1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
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
|