[Openmcl-devel] Optimizing a stupid benchmark
Jonathan Fischer
jonathan at mohiji.org
Thu May 4 13:26:51 PDT 2017
This is a stupid thing to test, I was just curious about it, and I’m wondering what obvious thing it is I’m doing wrong to get really bad results.
For starters, a silly little function to sum up an arithmetic series:
(defun sum-test-iterative ()
(let ((sum 0))
(dotimes (i 2147483647)
(setf sum (+ sum i)))
sum))
In ClozureCL 1.11, this is horribly slow and conses like crazy:
? (time (sum-test-iterative))
(SUM-TEST-ITERATIVE)
took 62,875,836 microseconds (62.875835 seconds) to run.
2,818,179 microseconds ( 2.818179 seconds, 4.48%) of which was spent in GC.
During that period, and with 4 available CPU cores,
55,949,019 microseconds (55.949020 seconds) were spent in user mode
7,153,305 microseconds ( 7.153305 seconds) were spent in system mode
20,127,468,688 bytes of memory allocated.
10,397 minor page faults, 8 major page faults, 0 swaps.
2305843005992468481
SBCL 1.3.17 does much better:
* (time (sum-test-iterative))
Evaluation took:
7.741 seconds of real time
7.677832 seconds of total run time (7.594504 user, 0.083328 system)
99.19% CPU
18,536,585,073 processor cycles
0 bytes consed
2305843005992468481
If I sprinkle in some declarations I can get SBCL down to a bit over 3 seconds, but ClozureCL’s still pretty bad:
(defun sum-test-iterative ()
(declare (optimize speed (safety 0)))
(let ((sum 0))
(declare ((signed-byte 64) sum))
(dotimes (i 2147483647)
(setf sum (the (signed-byte 64) (+ sum i))))
sum))
? (time (sum-test-iterative))
(SUM-TEST-ITERATIVE)
took 48,308,393 microseconds (48.308390 seconds) to run.
2,875,113 microseconds ( 2.875113 seconds, 5.95%) of which was spent in GC.
During that period, and with 4 available CPU cores,
42,849,312 microseconds (42.849310 seconds) were spent in user mode
6,040,092 microseconds ( 6.040092 seconds) were spent in system mode
20,127,468,707 bytes of memory allocated.
14,039 minor page faults, 1 major page faults, 0 swaps.
2305843005992468481
* (time (sum-test-iterative))
Evaluation took:
3.267 seconds of real time
3.248668 seconds of total run time (3.228591 user, 0.020077 system)
99.45% CPU
7,821,424,512 processor cycles
0 bytes consed
2305843005992468481
How can I help ClozureCL out here? Both of these are running 64-bit on macOS, btw.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.clozure.com/pipermail/openmcl-devel/attachments/20170504/ab23182b/attachment.htm>
More information about the Openmcl-devel
mailing list