1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- Some notes on the PSL "spectral" timing Tests
- Martin L. Griss
- March 17 1982
- The tests in the file PT:PSL-TIMER.SL (which is compiled and then
- driven by calls in PT:TIME-PSL.SL) have been gathered by us, with
- assistance/requests/suggestions from Fateman and Foderaro at Berkeley,
- JONL White and George Charrette at MIT, and Gabriel at Stanford as
- part of hist tests for the analysis of different LISP systems. They
- range over a number of LISP fundamentals, such as function calling
- speed, compiler quality, simple EVAL speed, INUM/FIXNUM arithmetic,
- CAR/CDR speeds, CONS speed, Type-testing predicates, etc. In most
- cases, the times quoted are for N iterations of some basic loop, with
- N fixed at some convenient quantity; the current N is given.
- The tests first set up some lists, which are then used for CDR'ing
- and counting loops. These are:
- LONGLIST 1664 elements
- TESTLIST 1002 elements
- TESTLIST2 2002 elements
- TEST N Description and comments
- Empty 10k Fastest Empty loop, using INUM or FIXNUM arithmetic
- as measure of overhead.
- SlowEmpty 10k Empty loop using generic arithmetic, usually
- much slower than Empty because of subroutine call.
- The loop indices are still in INUM range, and some
- implementations may opencode part of the arithmetic.
- Cdr1 100 Cdr down LONGLIST N times, using ATOM to terminate.
- The loop is done using INUM arithmetic
- If there is no INUM/FIXNUM arithmetic, this time is
- swamped by arithmetic time.
- In PSL, ATOM test requires TAG extraction, while
- NULL test is just an EQ with NIL. In some implementations
- CAR and CDR require the TAG to be masked off with an
- extra instruction, while in others the hardware ignores
- the tag field in addressing operations, speed this up.
- Cdr2 100 Cdr down LONGLIST N times, using NULL to terminate.
- Compare with CDR1 tests.
- Cddr 100 Cddr down LONGLIST N times, using NULL to terminate
- Note that some time CDDR is done better than just CDR
- since addressing modes may help.
- ListOnlyCdr1 Cdr down TESTLIST, length TESTLIST times, using NULL
- These LISTONLY... tests do not use arithmetic to loop.
- ListOnlyCddr Cddr down TESTLIST, length TESTLIST times, using NULL
- ListOnlyCdr2 Cdr down TESTLIST, length TESTLIST, using ATOM
- This does not use arithmetic to loop.
- ListOnlyCddr Cddr down TESTLIST2, length TESTLIST times, using ATOM.
- Reverse 10 Call system reverse on LONGLIST, N times.
- This CONS's a lot, also some SYSTEM reverse's
- handcoded, e.g. LISP 1.6.
- MyReverse1 10 Reverse compiled, using ATOM to terminate
- MyReverse2 10 Reverse compiled, using NULL to terminate
- Length 100 Built-in length, on LONGLIST.
- Arithmetic 10k Call FACTORIAL 9, N times, generic arithmetic.
- Looping as in EMPTYtest.
- Eval 10k EVAL EvalForm N times.
- EvalForm is (SETQ FOO (CADR '(1 2 3))) .
- tak 18 12 6 Gabriel's test function that has been used
- on MANY LISP systems. Using INUM/FIXNUM arithmetic.
- gtak 18 12 6 As above, using Generic arithmetic.
- gtsta g0 Charrete's FUNCALL/APPLY test. 100000 loops on
- (APPLY F (list I)) or (FUNCALL F I), whichever
- exists and is fastest in system. [PSL converts
- (APPLY F (list I)) into a fast-apply].
- g0 is a NOOP.
- gtsta g1 g1 calls ADD1
|