Чому програмісти визначають моделі програмування для заміни 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 тощо?


7
Пам'ятайте, програмне забезпечення - це абстракція обладнання. Якщо апаратне забезпечення змінюється занадто сильно, то абстракція програмного забезпечення може вже не бути хорошою. Я вважаю, що це, безумовно, вірно, коли я розглядаю можливість використання потоків POSIX для графічного процесора, але я залишу це комусь іншому, щоб більш повно пояснити у відповіді.

Відповіді:


10

Порівняйте, наприклад, нитки POSIX та Grand Central Dispatch. У мене є код, який передає чотири потоки у восьми рядках коду. З POSIX це все було б абсолютно кошмаром.

З іншого боку, CUDA / OpenCL зовсім не в багатопотоковому читанні, а у використанні масивних векторних здібностей. (Вони також можуть робити багатопотоковість, але важлива річ - векторизація).


9

Існує різниця між паралельним програмуванням SIMD і більш традиційною моделлю паралельного програмування, яку використовує POSIX.

SIMD - модель, яку використовують CUDA, OpenCL тощо. Існує єдиний набір інструкцій, які виконуються одночасно багатьма потоками, кожен працює на власному пулі даних. Це дуже корисно для таких речей, як тривимірна графіка, де однакові перетворення застосовуються до великої кількості точок.

Модель POSIX передбачає, що кожен потік працює асинхронно, і кожен потік може потенційно виконувати зовсім інший код.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.