12

私は少しググってみましたが、CUDAでプログラムされた一部のGPUが、SSE SIMD拡張命令と同様の命令を利用できるのか、それとも使用できるのかはわかりません。たとえば、フロートの2つのベクトルを2倍の精度で合計できるかどうか、それぞれに4つの値があります。もしそうなら、ベクトルの前の4つの値のそれぞれにもっと軽いスレッドを使用するのが良いのか、それともSIMDを使用するのが良いのだろうかと思います。

4

2 に答える 2

22

CUDAプログラムはPTX命令セットにコンパイルされます。その命令セットにはSIMD命令は含まれていません。したがって、CUDAプログラムはSIMDを明示的に使用することはできません。

ただし、CUDAの全体的な考え方は、大規模にSIMDを実行することです。個々のスレッドはワープと呼ばれるグループの一部であり、その中ですべてのスレッドがまったく同じ命令シーケンスを実行します(ただし、一部のスレッドでは一部の命令が抑制され、異なる実行シーケンスのように見えます)。NVidiaはそれをシングルインストラクション、マルチスレッド(SIMT)と呼んでいますが、本質的にはSIMDです。

于 2011-03-08T22:22:14.973 に答える
8

返信の1つへのコメントで述べたように、NVIDIAGPUにはいくつかのSIMD命令があります。これらは、unsigned intバイト単位およびハーフワード単位で動作します。2015年7月の時点で、次の操作にはいくつかの種類があります。

  • 絶対値
  • 足し算/引き算
  • 平均値の計算
  • 比較
  • 最大/最小
  • 否定
  • 絶対差の合計
于 2015-07-06T03:01:59.000 に答える