Есть ли какие-нибудь паттерны или фрейворки для программирования под многоядерные ARMы?
Современные серверные ARMы имеют много слабых ядер в отличии от старых-добрых x86.
Например, когда мы пишем стандартный цикл, то расчитываем, что он последовательно пробежится по всем элементам и выполнит какие-либо операции. В случае с интелом с высокой частотой ядра, процесс выполнится быстро, а в арме, в идеале, надо бы раскидать все элементы по отдельным медленным ядрам.
Понятно, что в большинстве языков есть различные библиотеки мультипоточности и т.д., но разбивать каждый loop на потоки/процессы, все же, слишком ресурсоемко.
Если какие-нибудь фрейворки или свежие технологии в языках, ориентированные на многоядерность? Все эти async/await, promise'ы как-то улучшают в данном случае ситуацию?
Или это вообще задача компилятора/интерпритатора сделать так, чтобы стандартный цикл по возможности по ядрам раскидался?
Если есть какие-то примеры кода, библиотек или фреймворков на популярных языках (java, php, python, js), было бы интересно посмотреть.
В вопросах любой оптимизации всегда на первое место идет конкретика. Раскидывание цикла по ядрам занимает время на синхронизацию потоков до и после цикла, а если у вас еще и данные не помещаются в один NUMA, вы будете больше времени атмосферу прогревать, чем считать.
Ну и редко когда так выходит, что что-то нетривиальное можно распараллелить, просто порезав цикл на части. Если речь не идет о числодробилке, конечно же.
А если речь идет о числодробилке, есть уже оптимизированные по самые яйца BLAS и ATLAS, и имеет смысл опираться на них, а не велосипедить.