Clause

Prestandatester

Clause jämfört med Erlang/OTP på en och samma maskin: samma Erlang-program, kompilerade med erlc och med clau -O2, tar tid på sina kärnor efter ett uppvärmningsanrop. Siffrorna ändras med varje optimering.

Geometriskt medelvärde av kärntiderna, Clause -O2 mot BEAM JIT (OTP)
1,49× snabbare i genomsnitt
Kärnor där Clause är snabbare
31 / 31
Geometriskt medelvärde den 2026-10-12, den första registrerade körningen
20,2×

Tider per kärna

Median av 3 körningar i millisekunder. Stapeln visar Clauses tid delad med OTP:s på en logaritmisk skala.

Clause snabbareOTP snabbare🔺 Körningarna varierade med mer än halva medianen.
KärnaOTP JITClause -O2Clause ÷ OTP
Datagenerering
bigint_factorialBeräknar fakulteten av 3000 med stora heltal, 330 gånger1 620,17212,760,13×
binary_appendLägger till 10 000 32-bitars heltal i en växande binary, 23 000 gånger1 080,93802,570,74×
list_of_tuplesBygger en lista med 200 000 små tupler, 260 gånger1 467,601 128,440,77×
list_to_tupleGör om listor med 1000 element till tupler, 170 000 gånger1 586,381 278,690,81×
map_putLägger in 2000 heltalsnycklar i en map, en i taget, 4900 gånger1 605,841 519,510,95×
string_buildBygger 20 000 strängar av heltal och atomer, 1000 gånger1 044,38720,730,69×
Databearbetning
binary_matchSummerar 20 000 32-bitars heltal matchade ur en binary, 49 000 gånger1 272,631 071,470,84×
comprehensionComprehension som filtrerar och dubblar 20 000 heltal, 15 000 gånger1 407,08893,850,64×
int_to_listGör om 20 000 heltal till strängar och tillbaka, 2000 gånger908,70412,790,45×
map_foldlKör map och sedan fold över 20 000 heltal, 4500 gånger1 500,771 113,040,74×
map_updateÖkar varje värde i en map med 500 nycklar, 24 000 gånger1 151,28669,970,58×
small_mapUppdaterar en liten tillståndsmap 80 miljoner gånger1 486,441 061,830,71×
sortSorterar en lista med 20 000 slumpmässiga heltal, 600 gånger1 112,37466,550,42×
term_to_binaryKodar och avkodar en stor nästlad term, 4300 gånger1 433,291 071,950,75×
Fil-I/O
large_readLäser en fil på 16 MB i block om 64 KB, 370 gånger1 444,151 007,930,70×
large_writeSkriver en fil på 16 MB i block om 64 KB, 200 gånger1 019,80989,090,97×
read_fileLäser en hel fil på 16 MB i ett anrop, 330 gånger1 485,521 483,031,00×
read_lineLäser en textfil med 20 000 rader rad för rad, 52 gånger1 522,071 467,280,96×
small_filesSkriver, läser tillbaka och raderar 500 små filer, 11 gånger1 209,751 116,400,92×
Skräpsamling
explicit_collectTvingar fram skräpsamling med 10 000 levande tupler, 5100 gånger1 547,98639,850,41×
grow_shrinkVäxer heapen med en lista på 200 000 element och släpper den, 300 gånger1 041,41861,750,83×
long_lived_churnBehåller ett glidande fönster med 10 000 levande element bland skräp, 370 gånger1 351,271 095,820,81×
short_processesStartar 5000 kortlivade processer som var och en skapar skräp, 69 gånger1 667,281 037,980,62×
Bibliotek
qlcKör qlc-transformen över 27 frågor och 3 moduler, 11 gånger1 873,721 714,660,92×
Meddelandeöverföring
fan_in100 processer skickar var och en 1000 meddelanden till en, 25 gånger1 402,68391,780,28×
large_messageSkickar en lista med 100 000 element till en process och tillbaka, 560 gånger1 063,94789,040,74×
ping_pongStudsar ett meddelande mellan två processer 2 miljoner gånger1 504,97904,200,60×
ringSkickar en token 3050 varv runt en ring av 1000 processer1 438,211 099,660,76×
Loopback-sockets
tcp_connectÖppnar 900 TCP-anslutningar via loopback och ekar 25 meddelanden på 1 KB i varje1 418,851 047,850,74×
tcp_echoEkar 30 000 meddelanden på 1 KB över TCP via loopback1 455,621 136,060,78×
udp_round_tripStudsar ett datagram på 1 KB 27 900 gånger över UDP via loopback1 458,071 196,820,82×

Hela program

Verklig tid i sekunder, inklusive uppstart, median av körningarna.

ProgramOTP JITClause -O2Clause ÷ OTP
bench_datagenBygger listor, tupler, maps, binaries och stora heltal i mängd8,545,720,67×
bench_dataprocSortering, fold, map-uppdateringar, binary-matchning och konverteringar10,456,760,65×
bench_fileSkriver och läser små och stora filer, läser rader6,956,240,90×
bench_gcKortlivade processer, heap som växer och krymper, levande data5,833,690,63×
bench_libraryqlc:s parse transform vid körning, som qlc:q/1 använder den2,301,890,82×
bench_msgPing-pong, fan-in, processring och kopiering av stora meddelanden5,693,280,58×
bench_socketTCP-eko, TCP-anslutningar och UDP-rundturer via loopback5,994,570,76×

Utveckling

Geometriskt medelvärde av Clauses tid delad med OTP:s för varje dag med registrerade körningar. Körningar före 2026-10-21 var inte låsta till en processoruppsättning, så en del av förändringen den dagen kommer från låsningen.

DatumCommitClause ÷ OTP
2026-10-12a7bc0c9b20,2×
2026-10-138a244d9c16,9×
2026-10-1455f42a9d16,9×
2026-10-156ed3851c2,73×
2026-10-1697295c841,95×
2026-10-17a8c3f8f61,38×
2026-10-18336caea71,41×
2026-10-207d7a2f2e1,00×
2026-10-2171ec52f80,78×
2026-10-23dea685080,69×
2026-10-24af1050430,65×
2026-10-26d6eafa720,71×
2026-10-30f4e5f3e00,67×

Storlek på körbara filer

Storlek i megabyte på testprogrammen som Clause bygger dem på varje optimeringsnivå.

Program-O0-O2-O2 --lto
bench_datagen9,90 MB9,82 MB9,82 MB
bench_dataproc10,42 MB10,01 MB10,01 MB
bench_file11,34 MB10,59 MB10,59 MB
bench_gc9,89 MB9,81 MB9,81 MB
bench_library10,24 MB9,94 MB9,95 MB
bench_msg9,91 MB9,82 MB9,82 MB
bench_socket11,58 MB10,64 MB10,65 MB

Storlekar med -O2 för de senaste 6 benchmarkkörningarna, äldst först, en Clause-commit per körning. Tabellen nedan lägger till summan för alla bench_*-program och storleken på kompilatorn clau.

024681012 MBbench_datagen, 2026-10-20 7d7a2f2e: 6,29 MBbench_datagen, 2026-10-21 71ec52f8: 6,32 MBbench_datagen, 2026-10-23 dea68508: 6,33 MBbench_datagen, 2026-10-24 af105043: 6,33 MBbench_datagen, 2026-10-26 d6eafa72: 8,55 MBbench_datagen, 2026-10-30 f4e5f3e0: 9,82 MB9.82bench_datagenbench_dataproc, 2026-10-20 7d7a2f2e: 6,62 MBbench_dataproc, 2026-10-21 71ec52f8: 6,64 MBbench_dataproc, 2026-10-23 dea68508: 6,65 MBbench_dataproc, 2026-10-24 af105043: 6,65 MBbench_dataproc, 2026-10-26 d6eafa72: 8,74 MBbench_dataproc, 2026-10-30 f4e5f3e0: 10,01 MB10.01bench_dataprocbench_file, 2026-10-20 7d7a2f2e: 6,72 MBbench_file, 2026-10-21 71ec52f8: 6,75 MBbench_file, 2026-10-23 dea68508: 6,75 MBbench_file, 2026-10-24 af105043: 6,75 MBbench_file, 2026-10-26 d6eafa72: 9,20 MBbench_file, 2026-10-30 f4e5f3e0: 10,59 MB10.59bench_filebench_gc, 2026-10-20 7d7a2f2e: 6,28 MBbench_gc, 2026-10-21 71ec52f8: 6,32 MBbench_gc, 2026-10-23 dea68508: 6,32 MBbench_gc, 2026-10-24 af105043: 6,32 MBbench_gc, 2026-10-26 d6eafa72: 8,54 MBbench_gc, 2026-10-30 f4e5f3e0: 9,81 MB9.81bench_gcbench_library, 2026-10-26 d6eafa72: 9,30 MBbench_library, 2026-10-30 f4e5f3e0: 9,94 MB9.94bench_librarybench_msg, 2026-10-20 7d7a2f2e: 6,29 MBbench_msg, 2026-10-21 71ec52f8: 6,32 MBbench_msg, 2026-10-23 dea68508: 6,33 MBbench_msg, 2026-10-24 af105043: 6,33 MBbench_msg, 2026-10-26 d6eafa72: 8,55 MBbench_msg, 2026-10-30 f4e5f3e0: 9,82 MB9.82bench_msgbench_socket, 2026-10-20 7d7a2f2e: 6,39 MBbench_socket, 2026-10-21 71ec52f8: 6,42 MBbench_socket, 2026-10-23 dea68508: 6,43 MBbench_socket, 2026-10-24 af105043: 6,43 MBbench_socket, 2026-10-26 d6eafa72: 9,33 MBbench_socket, 2026-10-30 f4e5f3e0: 10,64 MB10.64bench_socket
  • 2026-10-207d7a2f2e
  • 2026-10-2171ec52f8
  • 2026-10-23dea68508
  • 2026-10-24af105043
  • 2026-10-26d6eafa72
  • 2026-10-30f4e5f3e0
DatumCommitAlla bench_*-programclau
2026-10-207d7a2f2e38,59 MB59,50 MB
2026-10-2171ec52f838,78 MB59,54 MB
2026-10-23dea6850838,79 MB59,54 MB
2026-10-24af10504338,81 MB59,65 MB
2026-10-26d6eafa7262,21 MB59,98 MB
2026-10-30f4e5f3e070,63 MB60,75 MB

Testmiljö

Maskin
Intel64 Family 6 Model 183 Stepping 1, GenuineIntel, 32 logiska processorer, Windows 11 (10.0.26200)
Processoruppsättning
Prestandakärnor 0-15, 16 av 32 logiska processorer
Erlang/OTP
29, ERTS 17.1
Clause-commit
f4e5f3e0
Körning
2026-10-30

OTP och Clause körs på samma processorer: varje benchmarkprogram är låst till processorns prestandakärnor, så på en hybridprocessor hamnar ingen kärna (kernel) på en långsammare effektivitetskärna. Båda håller en schemaläggare aktiv per processor i uppsättningen, obunden inom den.

Kör prestandatesterna själv med make benchmark eller make-benchmark.bat i Clause-repositoryt; anteckningarna om prestandatester beskriver programmen och alternativen. Anteckningar om prestandatester