From 87b55df10f00fd23d89a89bfb7c4354ff455d83d Mon Sep 17 00:00:00 2001 From: aarne Date: Tue, 11 Jan 2005 15:06:12 +0000 Subject: -val optimization --- doc/val-optimization.txt | 183 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 doc/val-optimization.txt (limited to 'doc') diff --git a/doc/val-optimization.txt b/doc/val-optimization.txt new file mode 100644 index 000000000..e2342876d --- /dev/null +++ b/doc/val-optimization.txt @@ -0,0 +1,183 @@ +Idea: in GFC, represent tables as just lists values, without showing +the parameters. + +Concrete syntax: + + table T [t1 ; ... ; tn] + +where t1,...,tn are terms. This is treated as equivalent to + + table {p1 => t1 ; ... ; pn => tn} + +where p1,...,pn is the canonical listing of patterns of type T. + +Advantage: reduce the size of GFC files. + +Disadvantages: you don't get the sharing optimization, e.g. +table {A|B => v} instead of table T [v ; v] +Moreover, it is slower to select from the table, because +one first has to look up the position index of the argument. + +Usage: when compiling a module, use the -val option: + + i -val -src Foo.gf + +Summary of results, testing with lib/resource/french/TestVerbesFre.gf: + + without -val with -val ratio + compilation time 129 s 84 s 65 % + time to read back gfcm 109 s 32 s 29 % + size of generated gfcm 28 M 9 M 32 % + memory use in compilation 376 M 251 M 67 % + memory use in reading gfcm 1120 M 524 M 47 % + +No significant loss in linearization (which needs selection). + +Conclusion: for the case at hand (which prompted the experiment +at the first place), the gain is significant: compilation needs +30 % less resources, and using the compiled grammar needs +50-70 % less. + +More testing is desirable to find out if -val is always good. + +At the moment, reuse is not possible with gfc modules created +with the -val flag (although it is supported by the GF syntax +already). + + + +10/1/2004 + +Test the generation of course-of-values tables + +--------------------- +Without: + + i -src TestVerbesFre.gf + 129160 msec + + > gr -cat=V | l -table + 650 msec + +gf +RTS -K10M -s +8,469,778,952 bytes allocated in the heap +2,779,891,252 bytes copied during GC +133,108,856 bytes maximum residency (36 sample(s)) + + 32295 collections in generation 0 ( 24,25s) + 36 collections in generation 1 ( 24,68s) + + 376 Mb total memory in use + + INIT time 0,01s ( 0,04s elapsed) + MUT time 80,21s (499,76s elapsed) + GC time 48,93s ( 50,01s elapsed) + EXIT time 0,00s ( 0,00s elapsed) + Total time 129,15s (549,81s elapsed) + + %GC time 37,9% (9,1% elapsed) + + Alloc rate 105,581,886 bytes per MUT second + + Productivity 62,1% of total user, 14,6% of total elapsed + + +wc french/*.gfc french/*.gfr + 37 2533 44976 french/CategoriesFre.gfc + 0 9 62 french/ConjugNancy.gfc + 2 29 137 french/MorphoFre.gfc + 29 966 7641 french/NumeralsFre.gfc + 136 393891 4415193 french/RulesFre.gfc + 151 4211 39290 french/StructuralFre.gfc + 123 607 3259 french/SyntaxFre.gfc + 285 4702 59892 french/TestResourceFre.gfc + 6790 27179 184046 french/TestVerbesAbs.gfc + 6781 28170 198376 french/TestVerbesFre.gfc + 20 214 1245 french/TypesFre.gfc + 6494 45458 254878 french/VerbesAbs.gfc + 6494 1272600 23438292 french/VerbesFre.gfc + 6449 45143 209154 french/Vs.gfc + 6278 47836 426316 french/ConjugNancy.gfr + 14465 72471 655006 french/MorphoFre.gfr + 238250 798560 8973600 french/SyntaxFre.gfr + 492 2557 21908 french/TypesFre.gfr + 293276 2747136 38933271 total + +pm | wf test0.gfcm +55660 msec + +wc test0.gfcm + 28041 1784674 28669416 test0.gfcm + +> i test0.gfcm ++ reading test0.gfcm 103290 msec +109450 msec + +1120 Mb total memory in use + +---------------------- +After: + + + i -src -val TestVerbesFre.gf + 84650 msec + + gr -cat=V | l -table + 390 msec + +gf +RTS -K10M -s +6,061,907,436 bytes allocated in the heap +1,576,739,488 bytes copied during GC + 92,700,188 bytes maximum residency (32 sample(s)) + + 23109 collections in generation 0 ( 13,98s) + 32 collections in generation 1 ( 12,02s) + + 251 Mb total memory in use + + INIT time 0,01s ( 0,00s elapsed) + MUT time 59,28s (122,35s elapsed) + GC time 26,00s ( 26,91s elapsed) + EXIT time 0,00s ( 0,00s elapsed) + Total time 85,29s (149,26s elapsed) + + %GC time 30,5% (18,0% elapsed) + + Alloc rate 102,241,650 bytes per MUT second + + Productivity 69,5% of total user, 39,7% of total elapsed + +wc french/*.gfc french/*.gfr + 37 3894 13600 french/CategoriesFre.gfc + 0 9 62 french/ConjugNancy.gfc + 2 29 137 french/MorphoFre.gfc + 29 938 5726 french/NumeralsFre.gfc + 136 354450 3097901 french/RulesFre.gfc + 151 3738 22354 french/StructuralFre.gfc + 123 607 3259 french/SyntaxFre.gfc + 285 2437 18664 french/TestResourceFre.gfc + 6790 27179 184046 french/TestVerbesAbs.gfc + 6781 27694 191696 french/TestVerbesFre.gfc + 20 214 1245 french/TypesFre.gfc + 6494 45458 254878 french/VerbesAbs.gfc + 6494 442149 5078881 french/VerbesFre.gfc + 6449 45143 209154 french/Vs.gfc + 6278 47836 426316 french/ConjugNancy.gfr + 14465 72471 655006 french/MorphoFre.gfr + 238250 798560 8973600 french/SyntaxFre.gfr + 492 2557 21908 french/TypesFre.gfr + 293276 1875363 19158433 total + +pm | wf test1.gfcm +13030 msec + +wc test1.gfcm + 28041 912901 8894578 test1.gfcm + +> i test1.gfcm ++ reading test1.gfcm 24220 msec +32720 msec + +524 Mb total memory in use + + -- cgit v1.2.3