<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
This fixes the problem, at least on CCL on MacOS (my Linux box is
not handy ATM):<br>
<br>
<font face="monospace"><b>(set-lisp-heap-gc-threshold 671350784) </b>;
default is 33554432<br>
(use-lisp-heap-gc-threshold)<br>
(gc) ; clear memory as much as possible<br>
<br>
(defun foo1 ()<br>
(prog1 t (loop for i from 0 upto 100000000 collect i)))<br>
<br>
(time (foo1))<br>
(FOO1)<br>
took 3,604,166 microseconds (3.604166 seconds) to run.<br>
2,193,000 microseconds (2.193000 seconds, 60.85%) of which
was spent in GC.<br>
During that period, and with 16 available CPU cores,<br>
3,130,749 microseconds (3.130749 seconds) were spent in user
mode<br>
501,264 microseconds (0.501264 seconds) were spent in
system mode<br>
1,600,000,032 bytes of memory allocated.<br>
227,013 minor page faults, 0 major page faults, 0 swaps.<br>
T</font><br>
<br>
As others have pointed out, there's a lot of GC going on here.<br>
<br>
The garbage collector in CCL is tuned not to hog system memory
unnecessarily, so every time the GC runs, it will allocate more
memory from the system if it needs it. By calling<font
face="monospace"> #'set-lisp-heap-gc-threshold</font> with a
larger number than the default, we're essentially telling CCL to
allocate larger chunks of memory from the system. This means the GC
has to run less frequently, which makes the above code run much
faster.<br>
<br>
In order to run the benchmark with SBCL, I had to use the argument
"--dynamic-space-size 4000000" just to prevent the heap from being
exhausted.<br>
<br>
As others have also pointed out, this is not a particularly
realistic benchmark. Practical CL implementations are not by default
tuned to allow huge amounts of worthless garbage to be created
quickly. But tuning them to allow it is possible.<br>
<br>
-SS<br>
<br>
<div class="moz-cite-prefix">On 1/5/24 7:32 AM, Taoufik Dachraoui
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CA+2r5MHUM8mOu1_sAPHvNCbrPtVJEFG5eJAwwpWOe41Mg9+y0Q@mail.gmail.com">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div dir="ltr">why ccl is much slower?
<div><br>
</div>
<div>taoufik@Ankbot:~/workspace/ccl/actor$ sbcl<br>
This is SBCL 2.3.11, an implementation of ANSI Common Lisp.<br>
More information about SBCL is available at <<a
href="http://www.sbcl.org/" moz-do-not-send="true"
class="moz-txt-link-freetext">http://www.sbcl.org/</a>>.<br>
<br>
SBCL is free software, provided as is, with absolutely no
warranty.<br>
It is mostly in the public domain; some portions are provided
under<br>
BSD-style licenses. See the CREDITS and COPYING files in the<br>
distribution for more information.<br>
* (time (prog1 t (loop for i from 0 upto 100000000 collect
i)))<br>
Evaluation took:<br>
1.379 seconds of real time<br>
1.379015 seconds of total run time (0.856185 user, 0.522830
system)<br>
[ Real times consist of 1.143 seconds GC time, and 0.236
seconds non-GC time. ]<br>
[ Run times consist of 1.146 seconds GC time, and 0.234
seconds non-GC time. ]<br>
100.00% CPU<br>
2,913,031,106 processor cycles<br>
1,600,427,200 bytes consed<br>
<br>
T<br>
* (quit)<br>
taoufik@Ankbot:~/workspace/ccl/actor$ ccl<br>
Clozure Common Lisp Version 1.12.1 (v1.12.1-22-g6b1f1d3a)
LinuxX8664<br>
<br>
For more information about CCL, please see <a
href="http://ccl.clozure.com" moz-do-not-send="true"
class="moz-txt-link-freetext">http://ccl.clozure.com</a>.<br>
<br>
CCL is free software. It is distributed under the terms of
the Apache<br>
Licence, Version 2.0.<br>
? (time (prog1 t (loop for i from 0 upto 100000000 collect
i)))<br>
(PROG1 T (LOOP FOR I FROM 0 UPTO 100000000 COLLECT I))<br>
took 11,946,514 microseconds (11.946514 seconds) to run.<br>
11,147,722 microseconds (11.147722 seconds, 93.31%) of
which was spent in GC.<br>
During that period, and with 24 available CPU cores,<br>
11,632,370 microseconds (11.632370 seconds) were spent in
user mode<br>
292,428 microseconds ( 0.292428 seconds) were spent in
system mode<br>
1,600,000,032 bytes of memory allocated.<br>
397,400 minor page faults, 0 major page faults, 0 swaps.<br>
T<br>
? <br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Fri, Jan 5, 2024 at 3:28 PM
Taoufik Dachraoui <<a
href="mailto:dachraoui.taoufik@gmail.com"
moz-do-not-send="true" class="moz-txt-link-freetext">dachraoui.taoufik@gmail.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">It looks like it is not because of the threads:
<div><br>
</div>
<div>taoufik@Ankbot:~/workspace/ccl/actor$ sbcl<br>
This is SBCL 2.3.11, an implementation of ANSI Common
Lisp.<br>
More information about SBCL is available at <<a
href="http://www.sbcl.org/" target="_blank"
moz-do-not-send="true" class="moz-txt-link-freetext">http://www.sbcl.org/</a>>.<br>
<br>
SBCL is free software, provided as is, with absolutely no
warranty.<br>
It is mostly in the public domain; some portions are
provided under<br>
BSD-style licenses. See the CREDITS and COPYING files in
the<br>
distribution for more information.<br>
* (time (reduce #'+ (loop for i from 0 upto 100000000
collect i)))<br>
Evaluation took:<br>
1.836 seconds of real time<br>
1.835223 seconds of total run time (1.351394 user,
0.483829 system)<br>
[ Real times consist of 1.184 seconds GC time, and 0.652
seconds non-GC time. ]<br>
[ Run times consist of 1.184 seconds GC time, and 0.652
seconds non-GC time. ]<br>
99.95% CPU<br>
3,876,850,246 processor cycles<br>
1,600,427,200 bytes consed<br>
<br>
5000000050000000<br>
* taoufik@Ankbot:~/workspace/ccl/actor$ ccl<br>
Clozure Common Lisp Version 1.12.1 (v1.12.1-22-g6b1f1d3a)
LinuxX8664<br>
<br>
For more information about CCL, please see <a
href="http://ccl.clozure.com" target="_blank"
moz-do-not-send="true" class="moz-txt-link-freetext">http://ccl.clozure.com</a>.<br>
<br>
CCL is free software. It is distributed under the terms
of the Apache<br>
Licence, Version 2.0.<br>
? (time (reduce #'+ (loop for i from 0 upto 100000000
collect i)))<br>
(REDUCE #'+ (LOOP FOR I FROM 0 UPTO 100000000 COLLECT I))<br>
took 13,091,079 microseconds (13.091079 seconds) to run.<br>
11,036,666 microseconds (11.036666 seconds, 84.31%)
of which was spent in GC.<br>
During that period, and with 24 available CPU cores,<br>
12,734,283 microseconds (12.734283 seconds) were
spent in user mode<br>
336,005 microseconds ( 0.336005 seconds) were
spent in system mode<br>
1,600,000,032 bytes of memory allocated.<br>
397,400 minor page faults, 0 major page faults, 0 swaps.<br>
5000000050000000<br>
?<br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Fri, Jan 5, 2024 at
3:10 PM Taoufik Dachraoui <<a
href="mailto:dachraoui.taoufik@gmail.com"
target="_blank" moz-do-not-send="true"
class="moz-txt-link-freetext">dachraoui.taoufik@gmail.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div dir="ltr">Hi
<div><br>
</div>
<div>In my current implementation of a classical actor
model</div>
<div>I found that using ccl processes is much slower
than sbcl threads</div>
<div><br>
</div>
<div>to create a thread I use <a class="moz-txt-link-freetext" href="ccl:process-run-function">ccl:process-run-function</a>,
is there another way to </div>
<div>create native threads that are much faster; I do
not need the ccl scheduling,</div>
<div>I want to create threads that are scheduled by the
OS, I think that the ccl </div>
<div>scheduler is the reason why my ccl tests are much
slower than the tests run </div>
<div>with sbcl</div>
<div>
<div><br>
</div>
<span class="gmail_signature_prefix">
<div><span class="gmail_signature_prefix">Regards</span></div>
-- </span><br>
<div dir="ltr" class="gmail_signature">
<div dir="ltr">Taoufik Dachraoui
<div><br>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br clear="all">
<div><br>
</div>
<span class="gmail_signature_prefix">-- </span><br>
<div dir="ltr" class="gmail_signature">
<div dir="ltr">Taoufik Dachraoui
<div><br>
</div>
</div>
</div>
</blockquote>
</div>
<br clear="all">
<div><br>
</div>
<span class="gmail_signature_prefix">-- </span><br>
<div dir="ltr" class="gmail_signature">
<div dir="ltr">Taoufik Dachraoui
<div><br>
</div>
</div>
</div>
</blockquote>
<br>
</body>
</html>