Ubuntu : Intel® Q6600® quad-core |
Each chart bar shows how many times more Time or how many times more Memory one unidentified ↓ thread-ring program used, compared to the program that used least Time or the program that used least Memory.
This table shows 5 measurements - CPU Time, Elapsed Time, Memory, Code and ~ CPU Load.
Compare how much Memory the thread-ring programs used - sort Memory KB. Compare how much Code the programs used - sort Code B
Column × shows how many times more each program used compared to the program that used least.
| sort | sort | sort | sort | |||
|---|---|---|---|---|---|---|
| × | Program Source Code | CPU secs | Elapsed secs | Memory KB | Code B | ~ CPU Load |
| 1.0 | C GNU gcc #3 | 5.13 | 5.13 | 16,760 | 607 | 0% 100% 0% 0% |
| 1.6 | Haskell GHC #3 | 8.47 | 8.47 | 2,932 | 274 | 0% 0% 0% 100% |
| 3.1 | Mozart/Oz | 15.91 | 15.91 | 4,356 | 340 | 0% 0% 0% 100% |
| 4.1 | Go 6g 8g #3 | 21.04 | 21.04 | 3,048 | 347 | 0% 0% 0% 100% |
| 4.1 | Go 6g 8g | 21.09 | 21.09 | 3,084 | 309 | 0% 0% 100% 0% |
| 6.1 | Java 6 -server #4 | 30.61 | 31.53 | 119,832 | 894 | 32% 29% 19% 16% |
| 6.9 | Erlang HiPE | 35.57 | 35.58 | 6,452 | 273 | 0% 2% 0% 98% |
| 7.0 | Smalltalk VisualWorks #2 | 35.87 | 35.86 | 13,088 | 566 | 0% 0% 100% 0% |
| 18 | Scheme PLT | 91.14 | 91.14 | 19,648 | 262 | 0% 100% 0% 0% |
| 27 | Pascal Free Pascal | 124.66 | 139.58 | 2,556 | 523 | 43% 33% 3% 4% |
| 31 | C GNU gcc #2 | 158.43 | 158.85 | 2,532 | 575 | 9% 10% 30% 48% |
| 34 | C GNU gcc | 164.71 | 172.16 | 4,536 | 487 | 36% 2% 10% 46% |
| 34 | C++ GNU g++ #2 | 163.36 | 174.21 | 5,120 | 588 | 5% 55% 33% 0% |
| 34 | ATS | 166.90 | 175.72 | 4,600 | 1090 | 5% 29% 59% 0% |
| 36 | OCaml #3 | 185.42 | 186.10 | 2,968 | 296 | 20% 35% 15% 27% |
| 37 | OCaml #2 | 188.29 | 189.07 | 4,964 | 350 | 34% 27% 23% 7% |
| 43 | C++ GNU g++ | 257.79 | 218.23 | 3,124 | 636 | 31% 30% 18% 30% |
| 43 | Scala | 6 min | 218.78 | 155,780 | 339 | 48% 48% 42% 40% |
| 48 | Python CPython #2 | 240.25 | 246.42 | 7,204 | 287 | 3% 49% 42% 2% |
| 49 | Python 3 #2 | 247.36 | 250.06 | 8,364 | 288 | 50% 9% 3% 33% |
| 55 | Lisp SBCL | 295.73 | 283.83 | 58,444 | 618 | 30% 19% 13% 38% |
| 59 | Java 6 -server #3 | 5 min | 5 min | 118,132 | 530 | 1% 36% 47% 13% |
| 66 | Lisp SBCL #2 | 6 min | 5 min | 58,176 | 571 | 27% 27% 21% 27% |
| 71 | Ada 2005 GNAT #2 | 7 min | 6 min | 8,928 | 560 | 32% 28% 31% 26% |
| 71 | Java 6 -Xint #3 | 6 min | 6 min | 29,380 | 530 | 6% 22% 54% 14% |
| 81 | Go 6g 8g #2 | 7 min | 6 min | 3,116 | 333 | 21% 43% 7% 32% |
| 84 | Ada 2005 GNAT | 10 min | 7 min | 8,792 | 602 | 39% 34% 23% 32% |
| 94 | C# Mono | 13 min | 8 min | 11,400 | 476 | 39% 33% 46% 39% |
| 98 | Ruby JRuby #2 | 12 min | 8 min | 91,128 | 228 | 50% 16% 25% 50% |
| 100 | Ruby JRuby | 8 min | 8 min | 96,344 | 342 | 40% 7% 5% 47% |
| 103 | Perl #3 | 8 min | 8 min | 488,940 | 489 | 37% 17% 7% 36% |
| 131 | F# Mono | 18 min | 11 min | 13,108 | 472 | 33% 38% 42% 40% |
| 133 | OCaml | 11 min | 11 min | 5,656 | 282 | 40% 33% 6% 15% |
| 196 | Java 6 -Xint #4 | 16 min | 16 min | 42,128 | 894 | 26% 33% 21% 14% |
| 300 | Ruby MRI #2 | 25 min | 25 min | 10,332 | 228 | 0% 0% 100% 0% |
| 570 | Ruby MRI | 48 min | 48 min | 8,396 | 342 | 0% 0% 0% 100% |
| Lisaac | Make Error | 810 | ||||
| Perl | Timed Out | 2h 00 min | 353 | |||
| Ruby 1.9 #2 | Failed | 228 | ||||
| Ruby 1.9 | Failed | 342 | ||||
| interesting alternative programs | ||||||
| 0.2 | Java 6 -server #6 | 1.27 | 1.27 | 105,164 | 543 | |
| 0.7 | Lua LuaJIT #3 | 3.76 | 3.76 | 900 | 264 | |
| 0.9 | Lua LuaJIT #2 | 4.53 | 4.53 | 924 | 284 | |
| 1.0 | Java 6 -server #2 | 5.08 | 5.09 | 102,376 | 693 | |
| 1.1 | Lua LuaJIT | 5.83 | 5.83 | 956 | 255 | |
| 3.1 | Lua #2 | 15.75 | 15.76 | 1,292 | 284 | |
| 3.2 | Lua #3 | 16.25 | 16.25 | 1,272 | 264 | |
| 3.2 | Java 6 -server #5 | 16.07 | 16.45 | 98,708 | 432 | |
| 3.3 | Lua | 17.18 | 17.19 | 1,328 | 255 | |
| 3.7 | Python CPython #3 | 19.02 | 19.02 | 3,100 | 272 | |
| 3.9 | Python 3 #3 | 20.13 | 20.13 | 4,172 | 270 | |
| missing programs | ||||||
| Clean | No program | |||||
| Fortran Intel | No program | |||||
| Java 6 steady state | No program | |||||
| JavaScript TraceMonkey | No program | |||||
| JavaScript V8 | No program | |||||
| Lua | No program | |||||
| Lua LuaJIT | No program | |||||
| PHP | No program | |||||
diff program output N = 1000 with this output file to check your program is correct before contributing.
Each program should create and keep alive 503 threads, explicity or implicitly linked in a ring, and pass a token between one thread and the next thread at least N times.
Each program should
Similar benchmarks are described in Performance Measurements of Threads in Java and Processes in Erlang, 1998; and A Benchmark Test for BCPL Style Coroutines, 2004. For some language implementations increasing the number of threads quickly results in Death by Concurrency.
Programs may use kernel threads, lightweight threads; but coroutines, cooperative threads and other programs with custom schedulers will be listed as interesting alternative implementations. Briefly say what concurrency technique is used in the program header comment.