Попытка понять, как люди на самом деле пишут параллельный код в настоящее время, учитывая огромную важность многоядерного и многопроцессорного оборудования в наши дни. Для меня это выглядит как доминирующая парадигма pthreads (потоки POSIX), которая является родной для Linux и доступна в Windows. Люди HPC, как правило, используют OpenMP или MPI, но их почти нет на StackOverflow. Или вы полагаетесь на потоки Java, API-интерфейсы потоков Windows и т.д., А не на переносные стандарты? Каким образом, по вашему мнению, рекомендуется выполнять параллельное программирование?
Или вы используете более экзотические вещи, такие как Erlang, CUDA, RapidMind, CodePlay, Oz или даже дорогой старый Оккам?
Уточнение: я ищу решения, которые довольно переносимы и применимы к платформам, таким как Linux, различные unixes, на разных архитектурах хоста. Windows - редкий случай, который приятно поддерживать. Таким образом, С# и .net на самом деле слишком узкие, CLR - это классная технология, но они могут ПОДАВАТЬ ее для хоста Linux, чтобы она была такой же распространенной, как JVM, Python, Erlang или любой другой переносимый язык.
С++ или JVM-based: возможно, С++, поскольку JVM имеют тенденцию скрывать производительность.
MPI: Я бы согласился с тем, что даже люди HPC считают это сложным в использовании инструментом, но для работы на 128000 процессорах это единственное масштабируемое решение проблем, при которых карта/сокращение не применяется. Передача сообщений имеет большую элегантность, хотя, поскольку это единственный стиль программирования, который, по-видимому, очень хорошо масштабируется в локальной памяти /AMP, общей памяти /SMP, распределенных средах времени выполнения.
Интересным новым соперником является MCAPI. но я не думаю, что у кого-то было время для практического опыта.
В целом, похоже, ситуация в том, что есть много интересных проектов Microsoft, о которых я не знал, и что Windows API или pthreads являются наиболее распространенными реализациями на практике.