Почему программисты определяют модели программирования для замены C / POSIX для параллелизма?

10

Поставщики новых компьютерных архитектур регулярно пытаются представить новые модели программирования, например, недавно CUDA / OpenCL для GPGPU, и заменяют C / POSIX в качестве интерфейса управления для параллелизма платформы. (Poss & Koening, AM3: на пути к аппаратному ускорителю Unix для многоядерных процессоров, 2015 г.)

Почему разработчики архитектуры пытаются разработать новые модели программирования для замены C / POSIX для параллельных вычислений? Не подходит ли C / POSIX для многопроцессорных систем, или у первоначальных авторов C / POSIX не было необходимости в параллельных вычислениях во время разработки C / POSIX? Или это тот случай, когда программистам нужно больше возможностей, чем может предоставить C / POSIX, и поэтому они прибегают к новым проектам, например, CUDA / OpenCL и т. Д.?

codezombie
источник
7
Помните, программное обеспечение - это абстракция аппаратного обеспечения. Если аппаратные средства меняются слишком сильно, то программная абстракция может перестать быть хорошей. Я верю, что это действительно так при рассмотрении использования потоков POSIX для графического процессора, но я оставлю это кому-то другому, чтобы объяснить более подробно в ответе.

Ответы:

10

Сравните потоки POSIX и Grand Central Dispatch, например. У меня есть код, который отправляет четыре потока в восемь строк кода. С POSIX это было бы настоящим кошмаром.

С другой стороны, CUDA / OpenCL - это вовсе не многопоточность, а использование массивных векторных возможностей. (Они также могут выполнять многопоточность, но векторизация важна).

gnasher729
источник
9

Существует различие между параллельным программированием SIMD и более традиционной моделью параллельного программирования, которую использует POSIX.

SIMD - это модель, которую используют CUDA, OpenCL и т. Д. Существует один набор инструкций, которые выполняются одновременно многими потоками, каждый из которых работает со своим собственным пулом данных. Это очень полезно для таких вещей, как трехмерная графика, где одни и те же преобразования применяются к большому количеству точек.

Модель POSIX предполагает, что каждый поток работает асинхронно, и каждый поток потенциально может выполнять совершенно другой код.

Обе модели имеют свои сильные и слабые стороны - поэтому они разные. POSIX гораздо более гибок, но CUDA / OpenCL / и т. Д. может использовать преимущества специализированного оборудования, запускающего тысячи (обычно более простых) потоков одновременно.

Майк Харрис
источник