version 1.25, 1995/11/28 18:45:28
|
version 1.26, 1995/11/30 18:04:27
|
Line 2528 The next invocation of a parsing word re
|
Line 2528 The next invocation of a parsing word re
|
Compiles a recursive call to the defining word not to the defined word. |
Compiles a recursive call to the defining word not to the defined word. |
|
|
@item argument input source different than current input source for @code{RESTORE-INPUT}: |
@item argument input source different than current input source for @code{RESTORE-INPUT}: |
!!???If the argument input source is a valid input source then it gets |
If the argument input source is a valid input source then it gets |
restored. Otherwise causes @code{-12 THROW}, which, unless caught, issues |
restored. Otherwise the result is undefined. |
the message "argument type mismatch" and aborts. |
@comment causes @code{-12 THROW}, which, unless caught, issues the message "argument type mismatch" and aborts. !! not all of the state is restored (e.g., sourcefilename). |
|
|
@item data space containing definitions gets de-allocated: |
@item data space containing definitions gets de-allocated: |
Deallocation with @code{allot} is not checked. This typically resuls in |
Deallocation with @code{allot} is not checked. This typically resuls in |
Line 2602 Not checked. As usual, you can expect me
|
Line 2602 Not checked. As usual, you can expect me
|
None. |
None. |
|
|
@item operator's terminal facilities available: |
@item operator's terminal facilities available: |
!!?? |
After processing the command line, Gforth goes into interactive mode, |
|
and you can give commands to Gforth interactively. The actual facilities |
|
available depend on how you invoke Gforth. |
|
|
@item program data space available: |
@item program data space available: |
@code{sp@ here - .} gives the space remaining for dictionary and data |
@code{sp@ here - .} gives the space remaining for dictionary and data |
stack together. |
stack together. |
|
|
@item return stack space available: |
@item return stack space available: |
!!?? |
By default 16 KBytes. The default can be overridden with the @code{-r} |
|
switch (@pxref{Invocation}) when Gforth starts up. |
|
|
@item stack space available: |
@item stack space available: |
@code{sp@ here - .} gives the space remaining for dictionary and data |
@code{sp@ here - .} gives the space remaining for dictionary and data |
Line 2930 System dependent; @code{REPRESENT} is im
|
Line 2933 System dependent; @code{REPRESENT} is im
|
function @code{ecvt()} and inherits its behaviour in this respect. |
function @code{ecvt()} and inherits its behaviour in this respect. |
|
|
@item rounding or truncation of floating-point numbers: |
@item rounding or truncation of floating-point numbers: |
What's the question?!! |
System dependent; the rounding behaviour is inherited from the hosting C |
|
compiler. IEEE-FP-based (i.e., most) systems by default round to |
|
nearest, and break ties by rounding to even (i.e., such that the last |
|
bit of the mantissa is 0). |
|
|
@item size of floating-point stack: |
@item size of floating-point stack: |
@code{s" FLOATING-STACK" environment? drop .}. Can be changed at startup |
@code{s" FLOATING-STACK" environment? drop .}. Can be changed at startup |
Line 3641 Sieve benchmark on a 486DX2/66 than Gfor
|
Line 3647 Sieve benchmark on a 486DX2/66 than Gfor
|
|
|
However, this potential advantage of assembly language implementations |
However, this potential advantage of assembly language implementations |
is not necessarily realized in complete Forth systems: We compared |
is not necessarily realized in complete Forth systems: We compared |
Gforth (compiled with @code{gcc-2.6.3} and @code{-DFORCE_REG}) with |
Gforth (direct threaded, compiled with @code{gcc-2.6.3} and |
Win32Forth 1.2093 and LMI's NT Forth (Beta, May 1994), two systems |
@code{-DFORCE_REG}) with Win32Forth 1.2093, LMI's NT Forth (Beta, May |
written in assembly, and with two systems written in C: PFE-0.9.11 |
1994) and Eforth (with and without peephole (aka pinhole) optimization |
(compiled with @code{gcc-2.6.3} with the default configuration for |
of the threaded code); all these systems were written in assembly |
Linux: @code{-O2 -fomit-frame-pointer -DUSE_REGS}) and ThisForth Beta |
language. We also compared Gforth with two systems written in C: |
(compiled with gcc-2.6.3 -O3 -fomit-frame-pointer). We benchmarked |
PFE-0.9.11 (compiled with @code{gcc-2.6.3} with the default |
Gforth, PFE and ThisForth on a 486DX2/66 under Linux. Kenneth O'Heskin |
configuration for Linux: @code{-O2 -fomit-frame-pointer -DUSE_REGS}) and |
kindly provided the results for Win32Forth and NT Forth on a 486DX2/66 |
ThisForth Beta (compiled with gcc-2.6.3 -O3 -fomit-frame-pointer; |
with similar memory performance under Windows NT. |
ThisForth employs peephole optimization of the threaded code). We |
|
benchmarked Gforth, PFE and ThisForth on a 486DX2/66 under |
|
Linux. Kenneth O'Heskin kindly provided the results for Win32Forth and |
|
NT Forth on a 486DX2/66 with similar memory performance under Windows |
|
NT. Marcel Hendrix ported Eforth to Linux, then extended it to run the |
|
benchmarks, added the peephole optimizer, ran the benchmarks and |
|
reported the results. |
|
|
We used four small benchmarks: the ubiquitous Sieve; bubble-sorting and |
We used four small benchmarks: the ubiquitous Sieve; bubble-sorting and |
matrix multiplication come from the Stanford integer benchmarks and have |
matrix multiplication come from the Stanford integer benchmarks and have |
Line 3661 other words, it shows the speedup factor
|
Line 3673 other words, it shows the speedup factor
|
other systems). |
other systems). |
|
|
@example |
@example |
relative Win32- NT This- |
relative Win32- NT eforth This- |
time Gforth Forth Forth PFE Forth |
time Gforth Forth Forth eforth +opt PFE Forth |
sieve 1.00 1.30 1.07 1.67 2.98 |
sieve 1.00 1.39 1.14 1.39 0.85 1.78 3.18 |
bubble 1.00 1.30 1.40 1.66 |
bubble 1.00 1.33 1.43 1.51 0.89 1.70 |
matmul 1.00 1.40 1.29 2.24 |
matmul 1.00 1.43 1.31 1.42 1.12 2.28 |
fib 1.00 1.44 1.26 1.82 2.82 |
fib 1.00 1.55 1.36 1.24 1.15 1.97 3.04 |
@end example |
@end example |
|
|
You may find the good performance of Gforth compared with the systems |
You may find the good performance of Gforth compared with the systems |
Line 3678 method for relocating the Forth image: l
|
Line 3690 method for relocating the Forth image: l
|
the actual addresses at run time, resulting in two address computations |
the actual addresses at run time, resulting in two address computations |
per NEXT (@pxref{System Architecture}). |
per NEXT (@pxref{System Architecture}). |
|
|
|
Only Eforth with the peephole optimizer performs comparable to |
|
Gforth. The speedups achieved with peephole optimization of threaded |
|
code are quite remarkable. Adding a peephole optimizer to Gforth should |
|
cause similar speedups. |
|
|
The speedup of Gforth over PFE and ThisForth can be easily explained |
The speedup of Gforth over PFE and ThisForth can be easily explained |
with the self-imposed restriction to standard C (although the measured |
with the self-imposed restriction to standard C (although the measured |
implementation of PFE uses a GNU C extension: global register |
implementation of PFE uses a GNU C extension: global register |
Line 3692 machine registers by itself and would no
|
Line 3709 machine registers by itself and would no
|
register declarations, giving a 1.3 times slower engine (on a 486DX2/66 |
register declarations, giving a 1.3 times slower engine (on a 486DX2/66 |
running the Sieve) than the one measured above. |
running the Sieve) than the one measured above. |
|
|
The numbers in this section have also been published in the paper |
In @cite{Translating Forth to Efficient C} by M. Anton Ertl and Martin |
@cite{Translating Forth to Efficient C} by M. Anton Ertl and Martin |
Maierhofer (presented at EuroForth '95), an indirect threaded version of |
Maierhofer, presented at EuroForth '95. It is available at |
Gforth is compared with Win32Forth, NT Forth, PFE, and ThisForth; that |
|
version of Gforth is 2\%@minus{}8\% slower on a 486 than the version |
|
used here. The paper available at |
@*@file{http://www.complang.tuwien.ac.at/papers/ertl&maierhofer95.ps.gz}; |
@*@file{http://www.complang.tuwien.ac.at/papers/ertl&maierhofer95.ps.gz}; |
it also contains numbers for some native code systems. You can find |
it also contains numbers for some native code systems. You can find |
numbers for Gforth on various machines in @file{Benchres}. |
numbers for Gforth on various machines in @file{Benchres}. |