Clause

Бенчмарки

Clause порівняно з Erlang/OTP на одній машині: ті самі програми Erlang, скомпільовані erlc і clau -O2, вимірюють час своїх ядер після розігрівального виклику. Ці числа змінюються з кожною оптимізацією.

Середнє геометричне часу ядер, Clause -O2 порівняно з BEAM JIT (OTP)
1,49× швидше в середньому
Ядра, на яких Clause швидший
31 / 31
Середнє геометричне на 2026-10-12, перший записаний запуск
20,2×

Час ядер

Медіана 3 запусків у мілісекундах. Смуга показує відношення часу Clause до часу OTP у логарифмічній шкалі.

Clause швидшийOTP швидший🔺 Розкид запусків перевищив половину медіани.
ЯдроOTP JITClause -O2Clause ÷ OTP
Генерування даних
bigint_factorialОбчислює факторіал 3000 на великих цілих, 330 разів1 620,17212,760,13×
binary_appendДописує 10 000 32-бітових цілих до зростаючого binary, 23 000 разів1 080,93802,570,74×
list_of_tuplesБудує список із 200 000 малих кортежів, 260 разів1 467,601 128,440,77×
list_to_tupleПеретворює списки з 1000 елементів на кортежі, 170 000 разів1 586,381 278,690,81×
map_putДодає 2000 цілих ключів до map по одному, 4900 разів1 605,841 519,510,95×
string_buildБудує 20 000 рядків із цілих чисел і атомів, 1000 разів1 044,38720,730,69×
Обробка даних
binary_matchСумує 20 000 32-бітових цілих, зіставлених із binary, 49 000 разів1 272,631 071,470,84×
comprehensionComprehension, що фільтрує й подвоює 20 000 цілих, 15 000 разів1 407,08893,850,64×
int_to_listПеретворює 20 000 цілих на рядки й назад, 2000 разів908,70412,790,45×
map_foldlЗастосовує map, потім fold до 20 000 цілих, 4500 разів1 500,771 113,040,74×
map_updateЗбільшує кожне значення map із 500 ключами, 24 000 разів1 151,28669,970,58×
small_mapОновлює малий map стану 80 мільйонів разів1 486,441 061,830,71×
sortСортує список із 20 000 випадкових цілих, 600 разів1 112,37466,550,42×
term_to_binaryКодує й декодує великий вкладений терм, 4300 разів1 433,291 071,950,75×
Файловий ввід-вивід
large_readЧитає файл на 16 МБ блоками по 64 КБ, 370 разів1 444,151 007,930,70×
large_writeЗаписує файл на 16 МБ блоками по 64 КБ, 200 разів1 019,80989,090,97×
read_fileЧитає цілий файл на 16 МБ одним викликом, 330 разів1 485,521 483,031,00×
read_lineЧитає текстовий файл із 20 000 рядків порядково, 52 рази1 522,071 467,280,96×
small_filesЗаписує, читає й видаляє 500 малих файлів, 11 разів1 209,751 116,400,92×
Збирання сміття
explicit_collectПримусово збирає сміття з 10 000 живими кортежами, 5100 разів1 547,98639,850,41×
grow_shrinkНарощує heap списком із 200 000 елементів, потім відкидає його, 300 разів1 041,41861,750,83×
long_lived_churnТримає ковзне вікно з 10 000 живих елементів серед сміття, 370 разів1 351,271 095,820,81×
short_processesЗапускає 5000 короткоживучих процесів, кожен створює сміття, 69 разів1 667,281 037,980,62×
Бібліотеки
qlcВиконує перетворення qlc над 27 запитами й 3 модулями, 11 разів1 873,721 714,660,92×
Обмін повідомленнями
fan_in100 процесів надсилають по 1000 повідомлень одному, 25 разів1 402,68391,780,28×
large_messageНадсилає список із 100 000 елементів іншому процесу й назад, 560 разів1 063,94789,040,74×
ping_pongПерекидає одне повідомлення між двома процесами 2 мільйони разів1 504,97904,200,60×
ringПередає токен 3050 разів кільцем із 1000 процесів1 438,211 099,660,76×
Сокети через loopback
tcp_connectВідкриває 900 TCP-з'єднань через loopback, у кожному луна 25 повідомлень по 1 КБ1 418,851 047,850,74×
tcp_echoВідбиває луною 30 000 повідомлень по 1 КБ через TCP на loopback1 455,621 136,060,78×
udp_round_tripПерекидає датаграму 1 КБ 27 900 разів через UDP на loopback1 458,071 196,820,82×

Цілі програми

Реальний час у секундах разом із запуском, медіана запусків.

ПрограмаOTP JITClause -O2Clause ÷ OTP
bench_datagenМасово будує списки, кортежі, maps, binaries і великі цілі8,545,720,67×
bench_dataprocСортування, fold, оновлення map, зіставлення binary, перетворення10,456,760,65×
bench_fileЗапис і читання малих і великих файлів, читання рядків6,956,240,90×
bench_gcКороткоживучі процеси, зростання й стискання heap, живі дані5,833,690,63×
bench_libraryParse transform qlc під час виконання, як її використовує qlc:q/12,301,890,82×
bench_msgПінг-понг, fan-in, кільце процесів і копіювання великих повідомлень5,693,280,58×
bench_socketTCP-луна, TCP-з'єднання та обміни UDP через loopback5,994,570,76×

Поступ

Середнє геометричне відношення часу Clause до часу OTP за кожен день записаних запусків. Запуски до 2026-10-21 не були прив'язані до набору процесорів, тож частина зміни того дня походить від прив'язки.

ДатаКомітClause ÷ 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×

Розмір виконуваних файлів

Розмір тестових програм у мегабайтах, зібраних Clause на кожному рівні оптимізації.

Програма-O0-O2-O2 --lto
bench_datagen9,90 МБ9,82 МБ9,82 МБ
bench_dataproc10,42 МБ10,01 МБ10,01 МБ
bench_file11,34 МБ10,59 МБ10,59 МБ
bench_gc9,89 МБ9,81 МБ9,81 МБ
bench_library10,24 МБ9,94 МБ9,95 МБ
bench_msg9,91 МБ9,82 МБ9,82 МБ
bench_socket11,58 МБ10,64 МБ10,65 МБ

Розміри з -O2 для останніх 6 запусків бенчмарків, від найстарішого, по одному коміту Clause на запуск. Таблиця нижче додає сумарний розмір усіх програм bench_* і розмір компілятора clau.

024681012 МБbench_datagen, 2026-10-20 7d7a2f2e: 6,29 МБbench_datagen, 2026-10-21 71ec52f8: 6,32 МБbench_datagen, 2026-10-23 dea68508: 6,33 МБbench_datagen, 2026-10-24 af105043: 6,33 МБbench_datagen, 2026-10-26 d6eafa72: 8,55 МБbench_datagen, 2026-10-30 f4e5f3e0: 9,82 МБ9.82bench_datagenbench_dataproc, 2026-10-20 7d7a2f2e: 6,62 МБbench_dataproc, 2026-10-21 71ec52f8: 6,64 МБbench_dataproc, 2026-10-23 dea68508: 6,65 МБbench_dataproc, 2026-10-24 af105043: 6,65 МБbench_dataproc, 2026-10-26 d6eafa72: 8,74 МБbench_dataproc, 2026-10-30 f4e5f3e0: 10,01 МБ10.01bench_dataprocbench_file, 2026-10-20 7d7a2f2e: 6,72 МБbench_file, 2026-10-21 71ec52f8: 6,75 МБbench_file, 2026-10-23 dea68508: 6,75 МБbench_file, 2026-10-24 af105043: 6,75 МБbench_file, 2026-10-26 d6eafa72: 9,20 МБbench_file, 2026-10-30 f4e5f3e0: 10,59 МБ10.59bench_filebench_gc, 2026-10-20 7d7a2f2e: 6,28 МБbench_gc, 2026-10-21 71ec52f8: 6,32 МБbench_gc, 2026-10-23 dea68508: 6,32 МБbench_gc, 2026-10-24 af105043: 6,32 МБbench_gc, 2026-10-26 d6eafa72: 8,54 МБbench_gc, 2026-10-30 f4e5f3e0: 9,81 МБ9.81bench_gcbench_library, 2026-10-26 d6eafa72: 9,30 МБbench_library, 2026-10-30 f4e5f3e0: 9,94 МБ9.94bench_librarybench_msg, 2026-10-20 7d7a2f2e: 6,29 МБbench_msg, 2026-10-21 71ec52f8: 6,32 МБbench_msg, 2026-10-23 dea68508: 6,33 МБbench_msg, 2026-10-24 af105043: 6,33 МБbench_msg, 2026-10-26 d6eafa72: 8,55 МБbench_msg, 2026-10-30 f4e5f3e0: 9,82 МБ9.82bench_msgbench_socket, 2026-10-20 7d7a2f2e: 6,39 МБbench_socket, 2026-10-21 71ec52f8: 6,42 МБbench_socket, 2026-10-23 dea68508: 6,43 МБbench_socket, 2026-10-24 af105043: 6,43 МБbench_socket, 2026-10-26 d6eafa72: 9,33 МБbench_socket, 2026-10-30 f4e5f3e0: 10,64 МБ10.64bench_socket
  • 2026-10-207d7a2f2e
  • 2026-10-2171ec52f8
  • 2026-10-23dea68508
  • 2026-10-24af105043
  • 2026-10-26d6eafa72
  • 2026-10-30f4e5f3e0
ДатаКомітУсі програми bench_*clau
2026-10-207d7a2f2e38,59 МБ59,50 МБ
2026-10-2171ec52f838,78 МБ59,54 МБ
2026-10-23dea6850838,79 МБ59,54 МБ
2026-10-24af10504338,81 МБ59,65 МБ
2026-10-26d6eafa7262,21 МБ59,98 МБ
2026-10-30f4e5f3e070,63 МБ60,75 МБ

Конфігурація

Машина
Intel64 Family 6 Model 183 Stepping 1, GenuineIntel, Логічних процесорів: 32, Windows 11 (10.0.26200)
Набір процесорів
Продуктивні ядра 0-15, 16 з 32 логічних процесорів
Erlang/OTP
29, ERTS 17.1
Коміт Clause
f4e5f3e0
Запуск
2026-10-30

OTP і Clause працюють на тих самих процесорах: кожну програму бенчмарку прив'язано до продуктивних ядер процесора, тож на гібридному процесорі жодне ядро бенчмарку (kernel) не потрапляє на повільніше енергоефективне ядро. Обидва тримають активним один планувальник на кожен процесор набору, не прив'язуючи його до конкретного процесора в межах набору.

Щоб запустити бенчмарки самостійно, виконайте make benchmark або make-benchmark.bat у репозиторії Clause; нотатки про бенчмарки описують програми та параметри. Нотатки про бенчмарки