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

10

Providers of new computer architectures regularly try to introduce new programming models, e.g. recently CUDA/OpenCL for GPGPUs, and displace C/POSIX as the control interface to platform parallelism. (Poss & Koening, AM3: Towards a hardware Unix accelerator for many-cores, 2015)

Perché i progettisti di architetture cercano di progettare nuovi modelli di programmazione per spostare C / POSIX per il calcolo parallelo? C / POSIX non si adatta bene ai multiprocessori o gli autori originali di C / POSIX non avevano in mente l'esigenza del calcolo parallelo in fase di progettazione C / POSIX? Oppure i programmatori hanno bisogno di più capacità di quelle che C / POSIX può offrire, ricorrendo così a nuovi progetti, ad es. CUDA / OpenCL, ecc.?

    
posta codezombie 02.12.2015 - 21:11
fonte

2 risposte

10

Confronta i thread POSIX e Grand Central Dispatch, per esempio. Ho il codice che invia a quattro thread in otto righe di codice. Con POSIX, sarebbe tutto un incubo assoluto.

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

    
risposta data 02.12.2015 - 22:50
fonte
9

C'è una distinzione tra SIMD programmazione parallela e il più tradizionale modello di programmazione parallela che usa POSIX.

SIMD è il modello utilizzato da CUDA, OpenCL, ecc. Esiste un singolo set di istruzioni che vengono eseguite simultaneamente da più thread, ognuno dei quali opera nel proprio pool di dati. Questo è molto utile per cose come la grafica 3D, dove le stesse trasformazioni sono applicate a un numero elevato di punti.

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

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

    
risposta data 02.12.2015 - 23:05
fonte

Leggi altre domande sui tag