なぜプログラマーは、並列処理のためにC / POSIXを置き換えるプログラミングモデルを定義するのですか?


10

新しいコンピューターアーキテクチャのプロバイダーは、定期的に新しいプログラミングモデル(最近のGPGPU向けのCUDA / OpenCLなど)の導入を試み、プラットフォームの並列処理の制御インターフェイスとしてC / POSIXを置き換えます。(Poss&Koening、AM3:2015年のメニーコア向けハードウェアUnixアクセラレータに向けて)

なぜアーキテクチャ設計者は、並列プログラミングのためにC / POSIXに取って代わるために新しいプログラミングモデルを設計しようとするのですか?C / POSIXはマルチプロセッサにあまり適していませんか、それともC / POSIXの最初の作者はC / POSIX設計時に並列計算を必要としていませんでしたか?それとも、プログラマーがC / POSIXが提供できるよりも多くの機能を必要としているため、CUDA / OpenCLなどの新しい設計に頼っていますか?


7
ソフトウェアはハードウェアの抽象概念です。ハードウェアの変更が多すぎる場合、ソフトウェアの抽象化はもはや適切ではありません。GPUにPOSIXスレッドを使用することを検討する場合、これは確かに正しいと思いますが、答えをより完全に説明するために他の人に任せます。

回答:


10

たとえば、POSIXスレッドとGrand Central Dispatchを比較します。8行のコードで4つのスレッドにディスパッチするコードがあります。POSIXを使用すると、それはすべて絶対的な悪夢になります。

一方で、CUDA / OpenCLはマルチスレッド化についてではなく、大規模なベクトル機能の使用についてです。(マルチスレッド化も可能ですが、ベクトル化が重要です)。


9

SIMD並列プログラミングと、POSIXが使用する従来の並列プログラミングモデルとの間には違いがあります。

SIMDは、CUDA、OpenCLなどが使用するモデルです。多くのスレッドによって同時に実行される単一の命令セットがあり、それぞれが独自のデータプールで動作します。これは、同じ変換が多数のポイントに適用される3Dグラフィックスのようなものに非常に役立ちます。

POSIXモデルでは、各スレッドが非同期で実行され、各スレッドがまったく異なるコードを実行する可能性があると想定しています。

どちらのモデルにも長所と短所があります。そのため、モデルは異なります。POSIXははるかに柔軟ですが、CUDA / OpenCLなどです。は、一度に何千もの(通常はより単純な)スレッドを実行する特殊なハードウェアを利用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.