Re: native threads
David McClain <[email protected]> Fri, 5 Jan 2024 08:54:48 -0700
| Newsgroups | gmane.lisp.openmcl.devel |
|---|---|
| Message-ID | <[email protected]> |
I have spent more than a decade implementing various versions of Actors systems. Some were along the lines you describe, launching native threads to perform the work of Actors. I finally concluded that, having just run a good race, you ought not kill the race horses, but rather retire them to the stable for another race. IOW, I now use thread pools, permanently launched and waiting for dispatch to another task. Thread startup entails a huge amount of overhead - allocating stack space and CPU registers, registering with OS, etc. - DM > On Jan 5, 2024, at 07:32, Taoufik Dachraoui <[email protected]> wrote: > > why ccl is much slower? > > taoufik@Ankbot:~/workspace/ccl/actor$ sbcl > This is SBCL 2.3.11, an implementation of ANSI Common Lisp. > More information about SBCL is available at <http://www.sbcl.org/>. > > SBCL is free software, provided as is, with absolutely no warranty. > It is mostly in the public domain; some portions are provided under > BSD-style licenses. See the CREDITS and COPYING files in the > distribution for more information. > * (time (prog1 t (loop for i from 0 upto 100000000 collect i))) > Evaluation took: > 1.379 seconds of real time > 1.379015 seconds of total run time (0.856185 user, 0.522830 system) > [ Real times consist of 1.143 seconds GC time, and 0.236 seconds non-GC time. ] > [ Run times consist of 1.146 seconds GC time, and 0.234 seconds non-GC time. ] > 100.00% CPU > 2,913,031,106 processor cycles > 1,600,427,200 bytes consed > > T > * (quit) > taoufik@Ankbot:~/workspace/ccl/actor$ ccl > Clozure Common Lisp Version 1.12.1 (v1.12.1-22-g6b1f1d3a) LinuxX8664 > > For more information about CCL, please see http://ccl.clozure.com <http://ccl.clozure.com/>. > > CCL is free software. It is distributed under the terms of the Apache > Licence, Version 2.0. > ? (time (prog1 t (loop for i from 0 upto 100000000 collect i))) > (PROG1 T (LOOP FOR I FROM 0 UPTO 100000000 COLLECT I)) > took 11,946,514 microseconds (11.946514 seconds) to run. > 11,147,722 microseconds (11.147722 seconds, 93.31%) of which was spent in GC. > During that period, and with 24 available CPU cores, > 11,632,370 microseconds (11.632370 seconds) were spent in user mode > 292,428 microseconds ( 0.292428 seconds) were spent in system mode > 1,600,000,032 bytes of memory allocated. > 397,400 minor page faults, 0 major page faults, 0 swaps. > T > ? > > On Fri, Jan 5, 2024 at 3:28 PM Taoufik Dachraoui <[email protected] <mailto:[email protected]>> wrote: >> It looks like it is not because of the threads: >> >> taoufik@Ankbot:~/workspace/ccl/actor$ sbcl >> This is SBCL 2.3.11, an implementation of ANSI Common Lisp. >> More information about SBCL is available at <http://www.sbcl.org/>. >> >> SBCL is free software, provided as is, with absolutely no warranty. >> It is mostly in the public domain; some portions are provided under >> BSD-style licenses. See the CREDITS and COPYING files in the >> distribution for more information. >> * (time (reduce #'+ (loop for i from 0 upto 100000000 collect i))) >> Evaluation took: >> 1.836 seconds of real time >> 1.835223 seconds of total run time (1.351394 user, 0.483829 system) >> [ Real times consist of 1.184 seconds GC time, and 0.652 seconds non-GC time. ] >> [ Run times consist of 1.184 seconds GC time, and 0.652 seconds non-GC time. ] >> 99.95% CPU >> 3,876,850,246 processor cycles >> 1,600,427,200 bytes consed >> >> 5000000050000000 >> * taoufik@Ankbot:~/workspace/ccl/actor$ ccl >> Clozure Common Lisp Version 1.12.1 (v1.12.1-22-g6b1f1d3a) LinuxX8664 >> >> For more information about CCL, please see http://ccl.clozure.com <http://ccl.clozure.com/>. >> >> CCL is free software. It is distributed under the terms of the Apache >> Licence, Version 2.0. >> ? (time (reduce #'+ (loop for i from 0 upto 100000000 collect i))) >> (REDUCE #'+ (LOOP FOR I FROM 0 UPTO 100000000 COLLECT I)) >> took 13,091,079 microseconds (13.091079 seconds) to run. >> 11,036,666 microseconds (11.036666 seconds, 84.31%) of which was spent in GC. >> During that period, and with 24 available CPU cores, >> 12,734,283 microseconds (12.734283 seconds) were spent in user mode >> 336,005 microseconds ( 0.336005 seconds) were spent in system mode >> 1,600,000,032 bytes of memory allocated. >> 397,400 minor page faults, 0 major page faults, 0 swaps. >> 5000000050000000 >> ? >> >> On Fri, Jan 5, 2024 at 3:10 PM Taoufik Dachraoui <[email protected] <mailto:[email protected]>> wrote: >>> Hi >>> >>> In my current implementation of a classical actor model >>> I found that using ccl processes is much slower than sbcl threads >>> >>> to create a thread I use ccl:process-run-function, is there another way to >>> create native threads that are much faster; I do not need the ccl scheduling, >>> I want to create threads that are scheduled by the OS, I think that the ccl >>> scheduler is the reason why my ccl tests are much slower than the tests run >>> with sbcl >>> >>> Regards >>> -- >>> Taoufik Dachraoui >>> >> >> >> -- >> Taoufik Dachraoui >> > > > -- > Taoufik Dachraoui >