Perché i programmatori definiscono modelli di programmazione per sostituire C / POSIX per il parallelismo?


10

I fornitori di nuove architetture di computer cercano regolarmente di introdurre nuovi modelli di programmazione, ad esempio recentemente CUDA / OpenCL per GPGPU, e sostituiscono C / POSIX come interfaccia di controllo per il parallelismo della piattaforma. (Poss & Koening, AM3: verso un acceleratore Unix hardware per molti core, 2015)

Perché i progettisti di architettura cercano di progettare nuovi modelli di programmazione per sostituire C / POSIX per il calcolo parallelo? C / POSIX non è adatto ai multiprocessori o gli autori originali di C / POSIX non avevano in mente la necessità del calcolo parallelo in fase di progettazione C / POSIX? O è il caso che i programmatori abbiano bisogno di più capacità di quelle che C / POSIX può offrire, ricorrendo così a nuovi progetti come CUDA / OpenCL, ecc.?


7
Ricorda, il software è un'astrazione dell'hardware. Se l'hardware cambia troppo, l'astrazione del software potrebbe non essere più valida. Credo che questo sia certamente vero quando si considera l'utilizzo di thread POSIX per una GPU, ma lo lascerò a qualcun altro per spiegare più pienamente in una risposta.

Risposte:


10

Confronta i thread POSIX e Grand Central Dispatch, ad esempio. Ho un codice che invia quattro thread in otto righe di codice. Con POSIX sarebbe un vero incubo.

D'altra parte, CUDA / OpenCL non riguardano affatto il multithreading, ma l'utilizzo di enormi capacità vettoriali. (Possono fare anche il multithreading, ma vettorializzare è la cosa importante).


9

Esiste una distinzione tra la programmazione parallela SIMD e il modello di programmazione parallela più tradizionale utilizzato da POSIX.

SIMD è il modello utilizzato da CUDA, OpenCL, ecc. Esiste un unico set di istruzioni che vengono eseguite simultaneamente da molti thread, ciascuno operante sul proprio pool di dati. Questo è molto utile per cose come la grafica 3D, in cui le stesse trasformazioni vengono applicate a un gran numero di punti.

Il modello POSIX presuppone che ciascun thread venga eseguito in modo asincrono e che ogni thread possa potenzialmente eseguire codice totalmente diverso.

Entrambi i modelli hanno i loro punti di forza e di debolezza - ecco perché sono diversi. POSIX è molto più flessibile, ma CUDA / OpenCL / ecc. può trarre vantaggio da hardware specializzato, eseguendo migliaia di thread (di solito più semplici) alla volta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.