[prev in list] [next in list] [prev in thread] [next in thread] 

List:       haskell-jhc
Subject:    [jhc] darcs patch: pre-initialize GC caches to avoid check in
From:       John Meacham <john () repetae ! net>
Date:       2010-12-13 1:39:59
Message-ID: 20101213013959.6EDB860EC6 () sliver ! repetae ! net
[Download RAW message or body]

Tue Dec  7 04:17:05 PST 2010  John Meacham <john@repetae.net>
  * pre-initialize GC caches to avoid check in allocator gaining a couple p=
ercent in speed.

["pre_initialize-gc-caches-to-avoid-check-in-allocator-gaining-a-couple-percent-in-speed_.dpatch" (text/x-darcs-patch)]

New patches:

[pre-initialize GC caches to avoid check in allocator gaining a couple percent in \
speed. John Meacham <john@repetae.net>**20101207121705
 Ignore-this: 1e00392ff635becfb744d56d0a363a7f
] hunk ./src/C/FromGrin2.hs 55
     wRequires :: Requires,
     wStructures :: Map.Map Name Structure,
     wTags :: Set.Set Atom,
-    wAllocs :: Set.Set Atom,
+    wAllocs :: Set.Set (Atom,Int),
     wEnums :: Map.Map Name Int,
     wFunctions :: Map.Map Name Function
     }
hunk ./src/C/FromGrin2.hs 150
         text "",
         body
         ]
-    jgcs = [ text "static struct s_cache *" <> tshow (nodeCacheName m) <> char ';' | \
m <- Set.toList wAllocs] +    jgcs | fopts FO.Jgc = [ text "static struct s_cache *" \
<> tshow (nodeCacheName m) <> char ';' | (m,_) <- Set.toList wAllocs] +         | \
                otherwise = empty
     nh_stuff = text "static const void * const nh_stuff[] = {" $$ fsep (punctuate \
(char ',') (cafnames ++ constnames ++ [text "NULL"]))  $$ text "};"  includes =  map \
include (snub $ reqIncludes req)  include fn = text "#include <" <> text fn <> text \
">" hunk ./src/C/FromGrin2.hs 155
-    (header,body) = generateC (Map.elems fm) (Map.elems sm)
+    (header,body) = generateC (function (name "jhc_hs_init") voidType [] [] \
icaches:Map.elems fm) (Map.elems sm) +    icaches :: Statement
+    icaches | fopts FO.Jgc = mconcat [  toStatement $ functionCall (name \
"find_cache") [reference (toExpression $ nodeCacheName t),toExpression $ name \
"arena", tbsize (sizeof (structType $ nodeStructName t)), toExpression nptrs] | \
(t,nptrs) <- Set.toList wAllocs ] +            | otherwise = mempty
     cafnames = [ text "&_" <> tshow (varName v) | (v,_) <- grinCafs grin ]
     constnames =  map (\n -> text "&_c" <> tshow n) [ 1 .. length $ \
Grin.HashConst.toList finalHcHash]  ((cafs',finalHcHash,Written { wRequires = req, \
wFunctions = fm, wEnums = wenum, wStructures = sm, wTags = ts, .. }),cpr) = runC grin \
$ go >> mapM convertCAF (grinCafs grin) hunk ./src/C/FromGrin2.hs 797
       Nothing -> do
         st <- nodeType t
         as' <- mapM convertVal as
-        let wmalloc = jhc_malloc (reference (toExpression $ nodeCacheName t)) nptrs'
+        let wmalloc | fopts FO.Jgc = \_ -> functionCall (name "s_alloc") \
[toExpression $ name "gc", (toExpression $ nodeCacheName t)] +                    | \
                otherwise = jhc_malloc (reference (toExpression $ nodeCacheName t)) \
                nptrs'
             nptrs = length (filter (not . nonPtr . getType) as) + if sf then 1 else \
                0
             nptrs' = if nptrs > 0 && not sf && t `Map.notMember` cpr then nptrs + 1 \
else nptrs  malloc =  wmalloc (sizeof st)
hunk ./src/C/FromGrin2.hs 811
                 v <- newVar st
                 return (mempty,reference v)
             False -> do
-                tell mempty { wAllocs = Set.singleton t }
+                tell mempty { wAllocs = Set.singleton (t,nptrs') }
                 ty `newTmpVar` malloc
         let tmp' = concrete t tmp
             ass = [ if isValUnknown aa then mempty else project' i tmp' =* a | a <- \
as' | aa <- as | i <- map arg [(1 :: Int) ..] ] hunk ./src/C/FromGrin2.hs 914
 ----------------------------
 
 --gc_roots vs = functionCall (name "gc_begin_frame0") (constant (number \
                (fromIntegral $ length vs)):vs)
-gc_roots vs   = functionCall (name "gc_frame0") (v_gc:constant (number (fromIntegral \
$ length vs)):vs) +--gc_roots vs   = functionCall (name "gc_frame0") (v_gc:constant \
(number (fromIntegral $ length vs)):vs) +gc_roots vs   = case length vs of
+--    1 ->  functionCall (name "gc_frame1") (v_gc:vs)
+--    2 ->  functionCall (name "gc_frame2") (v_gc:vs)
+    lvs -> functionCall (name "gc_frame0") (v_gc:constant (number (fromIntegral \
lvs)):vs)  gc_end        = functionCall (name "gc_end") []
 tbsize sz = functionCall (name "TO_BLOCKS") [sz]
 jhc_malloc ntn nptrs sz | fopts FO.Jgc = functionCall (name "gc_alloc") [v_gc,ntn, \
tbsize sz, toExpression nptrs] hunk ./src/rts/jhc_jgc.c 14
           = { gc, n, { __VA_ARGS__ } }; gc_t gc = (gc_t)(void *)&l;
 #else
 #define gc_frame0(gc,n,...) void *ptrs[n] = { __VA_ARGS__ }; for(int i = 0; i < n; \
i++) gc[i] = (sptr_t)ptrs[i]; gc_t sgc = gc;  gc_t gc = sgc + n; +#define \
gc_frame1(gc,p1) gc[0] = (sptr_t)p1; gc_t sgc = gc;  gc_t gc = sgc + 1; +#define \
gc_frame2(gc,p1,p2) gc[0] = (sptr_t)p1; gc[1] = (sptr_t)p2; gc_t sgc = gc;  gc_t gc = \
sgc + 2;  #endif
 
 static unsigned number_gcs;             // number of garbage collections
hunk ./src/rts/jhc_jgc.c 100
 
         debugf("Setting Roots:");
         stack_check(&stack, root_stack.ptr);
-        for(int i = 0; i < root_stack.ptr; i++) {
+        for(unsigned i = 0; i < root_stack.ptr; i++) {
                 gc_add_grey(&stack, root_stack.stack[i]);
                 debugf(" %p", root_stack.stack[i]);
         }
hunk ./src/rts/jhc_rts.c 57
 
 static int hs_init_count;
 
+static void jhc_hs_init(void);
+
 void
 hs_init(int *argc, char **argv[])
 {
hunk ./src/rts/jhc_rts.c 73
                 assert(EOF == -1);
 
                 jhc_alloc_init();
+                jhc_hs_init();
                 hs_set_argv(*argc,*argv);
 #if JHC_isPosix
                 if(!uname(&jhc_utsname)) {
hunk ./src/rts/slub.c 214
         memset(pg->used,0,BITARRAY_SIZE_IN_BYTES(num_entries) - \
sizeof(pg->used[0]));  int excess = num_entries % BITS_PER_UNIT;
         pg->used[BITARRAY_SIZE(num_entries) - 1] = ~((1UL << excess) - 1);
-        if(JHC_VALGRIND) {
+#if JHC_VALGRIND
                 unsigned header =  sizeof(struct s_block) + \
                BITARRAY_SIZE_IN_BYTES(num_entries);
                 VALGRIND_MAKE_MEM_NOACCESS((char *)pg + header, BLOCK_SIZE - \
header); hunk ./src/rts/slub.c 217
-        }
+#endif
 }
 
 static void *

Context:

[don't increment allocation count when we arn't using it for status updates.
John Meacham <john@repetae.net>**20101207050322
 Ignore-this: f5209ab8f28a19f301d0dc9a7d1539ec
] 
[remove quadratic behavior in programSetDs'
John Meacham <john@repetae.net>**20101207033358
 Ignore-this: d0a52945b310e2a599cc54510c18ea5b
] 
[fix bug where the static argument transformation would clear rules. clean up a lot \
of code. John Meacham <john@repetae.net>**20101207031557
 Ignore-this: a78a8819ac6728d331b9a01e9a665152
] 
[clean ups and remove unused module, make selftest work with the new ghc
John Meacham <john@repetae.net>**20101206122555
 Ignore-this: 5b56d3dcd7186aeab6e3b42c57db0f99
] 
[fix type checker bug that occasionally reported false erros
John Meacham <john@repetae.net>**20101206120451
 Ignore-this: a34be6e294bde1e95ad7a9ca35b42055
] 
[fix pretty printing fixity of core to reduce ambiguity
John Meacham <john@repetae.net>**20101204231805
 Ignore-this: 8adc87b15e09134f673da1b438adc5a2
] 
[Fix a lot of compiler warnings, clean up dependencies.
John Meacham <john@repetae.net>**20101204035931
 Ignore-this: 7524be06d3ca6cd957316e50451b7208
] 
[show text of exception when dumping core.
John Meacham <john@repetae.net>**20100826091509
 Ignore-this: 859d57d2a6184698e97f0083482b3039
] 
[remove ePrettyEx
John Meacham <john@repetae.net>**20100812102458
 Ignore-this: 5ff9ed89d829f656c11012d75bab6f16
] 
[clean up warnings
John Meacham <john@repetae.net>**20100812102435
 Ignore-this: 582526a443397ee875d3530d892b704d
] 
[clean up E showing, get rid of -dhtml mode, get rid of ANSI color coding, dump \
jhc_core to files on error John Meacham <john@repetae.net>**20100812101452
 Ignore-this: ef81f8c50892ecfdda3b5a450d8fbac0
] 
[when let-shrinking a tail, be sure to optimize function bodies
John Meacham <john@repetae.net>**20100812054500
 Ignore-this: eb1b56f28287a98b67bcd9c29d50ba82
] 
[improve Grin Linting a little
John Meacham <john@repetae.net>**20100812054446
 Ignore-this: c7613a94c296e089a985904aa049d002
] 
[add imported ghc typechecking regression tests
John Meacham <john@repetae.net>**20100811014451
 Ignore-this: 7f625abf2f8d562bc76b71396a7e03f0
] 
[import ghc parsing regression tests
John Meacham <john@repetae.net>**20100811002607
 Ignore-this: 7a3676c7655fe26c52dd7eddd3c356dc
] 
[add 'skip' to regression options to skip certain tests
John Meacham <john@repetae.net>**20100811002445
 Ignore-this: 261b5e51fa22d7af25989ee078853590
] 
[allow unicode characters in haskell source
John Meacham <john@repetae.net>**20100810233304
 Ignore-this: dd54c632455bd0660ff7b5170d81c8ed
] 
[add regex-compat to dependencies
John Meacham <john@repetae.net>**20100810230216
 Ignore-this: e7c03b8e187802ab75dbcc574614eabc
] 
[accept empty class contexts
John Meacham <john@repetae.net>**20100810063832
 Ignore-this: 9dea1ec61b874fcb3537b79b74b345df
] 
[add 'transformers' package to included libraries
John Meacham <john@repetae.net>**20100810054906
 Ignore-this: e27f376331b3fac2e3414145bf17a1c0
] 
[fix desugaring of irrefutable lambda bindings
John Meacham <john@repetae.net>**20100810053944
 Ignore-this: 5c70934cbe42169850481562cd5b20f3
] 
[add some strictness annotations
John Meacham <john@repetae.net>**20100810053827
 Ignore-this: 15ed2e2fc90656cc418a841848e43107
] 
[clean ups
John Meacham <john@repetae.net>**20100806112820
 Ignore-this: 64c0ae0922073b65fc0dac4bd35ba968
] 
[speed up name choosing a little
John Meacham <john@repetae.net>**20100806111703
 Ignore-this: ac159eeb0d34a7d26ad74253d00386ae
] 
[further seperate out concrete types to speed up checking
John Meacham <john@repetae.net>**20100806092815
 Ignore-this: f992ced583042d3c7797d4de93e3e3a8
] 
[split type environment into concrete and mutable sets, to avoid retraversing the \
concrete imported types John Meacham <john@repetae.net>**20100806090349
 Ignore-this: c276618b4b968d9149e6b3dfc36d162a
] 
[create a better relation representation, speed up export chasing signifigantly
John Meacham <john@repetae.net>**20100806082622
 Ignore-this: 9f49871e33348bbfc4e8fd2ee9fa71b8
] 
[fix a few minor bugs in libraries found by better error reporting
John Meacham <john@repetae.net>**20100806045809
 Ignore-this: e7d43927c9e11b05de455a5d0ebd1017
] 
[check export lists for unknown names
John Meacham <john@repetae.net>**20100806045759
 Ignore-this: 4b3ff8381117f2acae34dd6b936c8e8d
] 
[ret rid of seperate subtable and errortable in favor of unified namemap
John Meacham <john@repetae.net>**20100806032455
 Ignore-this: 9e8fbd31f988d77614bd49fc23cefae
] 
[treat () the same as tuples when renaming
John Meacham <john@repetae.net>**20100806023948
 Ignore-this: defa66a11f1081a4582a5301cff217e4
] 
[move selector creation from desugar to renamer, detect multiply defined top level \
values and report an error properly. John Meacham <john@repetae.net>**20100806021241
 Ignore-this: 507bce69ec8ffe0085c3a72ffc0ec571
] 
[add initial version of jhc-prim
John Meacham <john@repetae.net>**20100806000900
 Ignore-this: 44a9f14db168b28d731fd750bba0fee9
] 
[clean up preprocessing a little
John Meacham <john@repetae.net>**20100803073754
 Ignore-this: c1064468bed864231c2d5fb3a68bbeaf
] 
[utilize preprocessor rather than ./configure to handle System.Info
John Meacham <john@repetae.net>**20100802100036
 Ignore-this: 76681affa5b0269621974deeccda019b
] 
[fix some warnings
John Meacham <john@repetae.net>**20100801083507
 Ignore-this: fd350fd02d0ad5a611ee1811de28bce5
] 
[fix build problem for tarball
John Meacham <john@repetae.net>**20100801082137
 Ignore-this: 33671b52398eef61afa670eb031ef575
] 
[update strictness and UNPACK annotations
John Meacham <john@repetae.net>**20100801080035
 Ignore-this: e598a6098143c1a62373a443865b3cfb
] 
[add announcement for 0.7.6
John Meacham <john@repetae.net>**20100731111353
 Ignore-this: 111c27548d94bdfe0042d61b02fe5728
] 
[TAG 0.7.6
John Meacham <john@repetae.net>**20100731104908
 Ignore-this: d5edc6edd6d300cbae451f0e056ee018
] 
Patch bundle hash:
9ddefbf2388995fd21f1fde5531107d1080d9714



_______________________________________________
jhc mailing list
jhc@haskell.org
http://www.haskell.org/mailman/listinfo/jhc

.

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic