forked from GitHub/gf-core
-val optimization
This commit is contained in:
183
doc/val-optimization.txt
Normal file
183
doc/val-optimization.txt
Normal file
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user