Кажется ли значение CRYSTAL_WORKERS по умолчанию 4 слишком низким для приложения Crystal-lang? Кто-нибудь еще тест выше? - PullRequest
0 голосов
/ 21 октября 2019

Я очень рад, что Crystal-lang теперь имеет многопоточность. Кто-нибудь еще делал несколько многопоточных тестов для Crystal-lang;если да, то, что CRYSTAL_WORKERS вы считаете полезным для того, что вы тестировали? (Да, я знаю, каждый бенчмарк отличается, поэтому пробег может отличаться.)

Значение по умолчанию для CRYSTAL_WORKERS - 4, но, похоже, оно должно быть больше, по крайней мере, в системах с более высокими ядрами. Могут ли критерии, которые приводят к этому значению 4, быть связаны с побочным эффектом числа ядер, используемых в то время, или чем-то еще?

Я провел несколько сравнений Фибоначчина 8-ядерном (Intel) и 16-ядерном (AMD) процессорах и получил несколько больших пиков и шаблонов долин (https://github.com/drhuffman12/bench_vs/blob/master/threads/README.md). (Для простых вычислений / преобразований издержки волокон / и т. Д., Похоже, не стоят того; но для более ресурсоемкого кода, такого как кальки Фибиначи, волокна с более высокими значениями CRYSTAL_WORKERS и same_thread: false казались потенциально полезными.)

1 Ответ

1 голос
/ 21 октября 2019

На этот вопрос нет ответа. Количество работников в значительной степени зависит от типа приложения и доступности / управления ресурсами в системе времени выполнения.

Конечно, когда ваша система имеет более 4 ядер, вам нужно большее число, чтобыиспользовать больше доступной вычислительной мощности. Но вы не обязательно хотите насытить все ядра, в зависимости от того, что еще работает в системе. Особенно приложения, связанные с вводом-выводом, не обязательно выиграют от слишком большого количества рабочих потоков. Поэтому установка CRYSTAL_WORKERS=$(nprocs), вероятно, не очень хорошая идея.

CRYSTAL_WORKERS=4 - это просто значение по умолчанию, потому что оно должно быть. Это довольно распространенное значение по умолчанию, потому что а) оно должно обеспечивать разумное улучшение по сравнению с однопоточным исполнением и б) современные процессоры обычно имеют как минимум 4 ядра. подумайте, какой номер рабочего подходит для этой конкретной среды, и настройте его соответствующим образом. Использование другого значения по умолчанию никак не поможет.

...