新しいコンピューターアーキテクチャのプロバイダーは、定期的に新しいプログラミングモデルを導入しようとします。最近、PGGPU向けのCUDA/OpenCL、およびプラットフォームの並列処理への制御インターフェースとしてのC/POSIXに取って代わりました。 (Poss&Koening、AM3:2015年のメニーコア向けハードウェアUnixアクセラレータに向けて)
なぜアーキテクチャ設計者は、並列プログラミングのためにC/POSIXに取って代わるために新しいプログラミングモデルを設計しようとするのですか? C/POSIXはマルチプロセッサにあまり適していませんか、またはC/POSIXの最初の作者はC/POSIX設計時に並列計算の必要性を念頭に置いていませんでしたか?あるいは、プログラマーがC/POSIXが提供できるよりも多くの機能を必要としているため、新しい設計に頼っています。 CUDA/OpenCLなど?
たとえば、POSIXスレッドとGrand Central Dispatchを比較します。 8行のコードで4つのスレッドにディスパッチするコードがあります。 POSIXでは、それはすべて絶対的な悪夢です。
一方、CUDA/OpenCLはマルチスレッド化についてではなく、大規模なベクトル機能の使用についてです。 (マルチスレッド化も可能ですが、ベクトル化が重要です)。
[〜#〜] simd [〜#〜] 並列プログラミングと、POSIXが使用する従来の並列プログラミングモデルとの間には違いがあります。
SIMDは、CUDA、OpenCLなどが使用するモデルです。多くのスレッドによって同時に実行される単一の命令セットがあり、それぞれが独自のデータプールで動作します。これは、同じ変換が多数のポイントに適用される3Dグラフィックスのようなものに非常に役立ちます。
POSIXモデルでは、各スレッドが非同期で実行され、各スレッドがまったく異なるコードを実行する可能性があると想定しています。
どちらのモデルにも長所と短所があります。そのため、モデルは異なります。 POSIXははるかに柔軟性がありますが、CUDA/OpenCLなどです。は、一度に何千もの(通常はより単純な)スレッドを実行する特殊なハードウェアを利用できます。