[commit: ghc] ghc-lwc2: FairShare scheduling can either be on concrete time or counts (e80c0c8)

Sivaramakrishnan Krishnamoorthy Chandrasekaran t-sichan at microsoft.com
Mon May 13 22:27:45 CEST 2013


Repository : http://darcs.haskell.org/ghc.git/

On branch  : ghc-lwc2

https://github.com/ghc/ghc/commit/e80c0c817fcd8b4b3fcdc6462519683fb8fb1fc2

>---------------------------------------------------------------

commit e80c0c817fcd8b4b3fcdc6462519683fb8fb1fc2
Author: KC Sivaramakrishnan <chandras at cs.purdue.edu>
Date:   Mon May 13 16:25:04 2013 -0400

    FairShare scheduling can either be on concrete time or counts

>---------------------------------------------------------------

 rts/PrimOps.cmm                                        |  1 +
 rts/Schedule.c                                         |  6 ++++++
 tests/Benchmarks/ChameneosRedux/FairShare.hs           | 18 +++++++++++++++++-
 tests/Benchmarks/ChameneosRedux/Makefile               |  2 +-
 tests/Benchmarks/ChameneosRedux/chameneos-redux-lwc.hs |  4 ++--
 5 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm
index 4ebb79a..fbfa669 100644
--- a/rts/PrimOps.cmm
+++ b/rts/PrimOps.cmm
@@ -881,6 +881,7 @@ stg_newSContzh ( gcptr closure )
         RtsFlags_GcFlags_initialStkSize(RtsFlags),
         closure "ptr");
   StgTSO_why_blocked (threadid) = Yielded::I16;
+  Capability_context_switch(MyCapability()) = 1 :: CInt;
 
   return (threadid);
 }
diff --git a/rts/Schedule.c b/rts/Schedule.c
index eb57408..8bb1c7f 100644
--- a/rts/Schedule.c
+++ b/rts/Schedule.c
@@ -339,6 +339,12 @@ more_upcalls:
          */
         if (!emptyUpcallQueue(cap)) {
             t = prepareUpcallThread (cap, t);
+            //If there are other runnable threads, append the upcall thread to
+            //the scheduler.
+            if (!emptyRunQueue (cap)) {
+              appendToRunQueue (cap, t);
+              continue;
+            }
         }
         else {
             t = restoreCurrentThreadIfNecessary (cap, t);
diff --git a/tests/Benchmarks/ChameneosRedux/FairShare.hs b/tests/Benchmarks/ChameneosRedux/FairShare.hs
index bf47555..2863f6f 100644
--- a/tests/Benchmarks/ChameneosRedux/FairShare.hs
+++ b/tests/Benchmarks/ChameneosRedux/FairShare.hs
@@ -43,6 +43,7 @@ import qualified Data.PQueue.Min as PQ
 
 #include "profile.h"
 
+
 newtype State = State (PVar Int, PVar ClockTime, PVar Int)
                 deriving (Typeable)
 
@@ -50,6 +51,12 @@ newtype State = State (PVar Int, PVar ClockTime, PVar Int)
 -- SCont Accounting
 -------------------------------------------------------------------------------
 
+#define ACCOUNT_COUNT
+
+#ifdef ACCOUNT_COUNT
+#undef ACCOUNT_TIME
+#endif
+
 -- |Returns the time difference in microseconds (potentially returning maxBound
 -- <= the real difference)
 timeDiffToMicroSec :: TimeDiff -> Int
@@ -64,20 +71,29 @@ timeDiffToMicroSec (TimeDiff _ _ _ _ _ sec picosec) =
 _INL_(startClock)
 startClock :: SCont -> PTM ()
 startClock sc = do
+#ifdef ACCOUNT_TIME
   sls <- getSLS sc
   let State (_,st,_) = fromJust $ fromDynamic sls
   time <- unsafeIOToPTM $ getClockTime
   writePVar st $ time
+#else
+  return ()
+#endif
 
 _INL_(stopClock)
 stopClock :: SCont -> PTM ()
 stopClock sc = do
   sls <- getSLS sc
   let State (_,st,acc) = fromJust $ fromDynamic sls
+#ifdef ACCOUNT_TIME
   startTime <- readPVar st
   endTime <- unsafeIOToPTM $ getClockTime
+  let diff = timeDiffToMicroSec (diffClockTimes endTime startTime)
+#else
+  let diff = 1
+#endif
   sum <- readPVar acc
-  let newSum = sum + timeDiffToMicroSec (diffClockTimes endTime startTime)
+  let newSum = sum + diff
   writePVar acc newSum
   where
 
diff --git a/tests/Benchmarks/ChameneosRedux/Makefile b/tests/Benchmarks/ChameneosRedux/Makefile
index 29d8ca2..0fd7851 100644
--- a/tests/Benchmarks/ChameneosRedux/Makefile
+++ b/tests/Benchmarks/ChameneosRedux/Makefile
@@ -4,7 +4,7 @@ include ../../config.mk
 
 TOP := ../../../
 EXTRA_LIBS=/scratch/chandras/install
-GHC_OPTS_EXTRA=-threaded -XDeriveDataTypeable -XBangPatterns -XCPP -XGeneralizedNewtypeDeriving -funbox-strict-fields -ipqueue-1.2.1 -O2 -debug
+GHC_OPTS_EXTRA=-threaded -XDeriveDataTypeable -XBangPatterns -XCPP -XGeneralizedNewtypeDeriving -funbox-strict-fields -ipqueue-1.2.1 -O2
 
 PROFILE_FLAGS := -DPROFILE_ENABLED -prof -fprof-auto -auto -auto-all
 
diff --git a/tests/Benchmarks/ChameneosRedux/chameneos-redux-lwc.hs b/tests/Benchmarks/ChameneosRedux/chameneos-redux-lwc.hs
index 6c3792d..7bcf25d 100644
--- a/tests/Benchmarks/ChameneosRedux/chameneos-redux-lwc.hs
+++ b/tests/Benchmarks/ChameneosRedux/chameneos-redux-lwc.hs
@@ -15,9 +15,9 @@
    -}
 
 import LwConc.Substrate
--- import FairShare
+import FairShare
 -- import LwConc.RunQueue
-import ConcurrentList
+-- import ConcurrentList
 import MVarList
 import Control.Monad
 import Data.Char





More information about the ghc-commits mailing list