GPGPU
GPGPU(読み:じーぴーじーぴーゆー)とは、GPUで画像処理以外の計算をやらせてみようというものである。
概要 編集
2D画像処理の各種フィルタをGPGPUで実装している例も多い。GPUといえば画像処理であるが、2D画像処理に関してはアルゴリズムによってはピクセルシェーダーで計算するよりもコンピュートシェーダーで計算した方が書きやすいこともある。
かつてはGPGPUは仮想通貨のマイニングでも使われた。ただ仮想通貨のマイニングの計算式は特定のアルゴリズム(ハッシュ関数)であり頻繁に変化するものではないため、コスパを向上させる目的でGPGPUからFPGAへ、FPGAからASICへと変移していった。
向いていない処理 編集
小さい処理 編集
CPUからGPUを呼び出すには「準備」が必要です。この準備段階はものすごく重たい処理なのでメインの処理量が少ない場合は逆に遅くなることがあります。
歴史 編集
古代 編集
N社のGPUでは1クロックで64ビクセルを一斉に画像処理する(A社は128ピクセル)。
「これSIMDの代わりに使えるんじゃね?」
その昔、こんなことを思いついた人がいました。
こんな面倒なことをするより「構造体の配列を送信できるバーテックスバッファとバーテックスシェーダーを使ったほうが便利じゃん」と思うかもしれませんが、この当時(SM 3.0 = DirectX 9)はGPUからデータを取得(出力)する手段がレンダーターゲット(GPUの描画先テクスチャ)しかありませんでした。
3DCGでも高度にカプセル化された3Dモデルを扱うライブラリから頂点データ(private宣言されている)を抜き出す手段がなく「GPUからGetDataできたら嬉しいな。このメーカーのGPUだけ動かねえ」なんてことがありました。
なので当時はピクセルシェーダーとレンダーターゲットが使われていました。
近代 編集
その後、SM4.0から「コンピュートシェーダー」が登場したことで無理にデータをテスクチャ画像化する必要がなくなり、バーテックスバッファのように「構造体の配列」を送信する手法が使えるようになった。これにより飛躍的に手軽になった。
この世代から処理は主にゲームであればバーテックスシェーダーで使われる回路で実行されるようになりました。 つまり従来はピクセルシェーダーの性能に依存していましたがバーテックスシェーダーの性能が重要になりました。
このような状況もあり、NVIDIA A100などの主にゲームであればバーテックスシェーダーで使われる回路の性能に全振りした「GPGPU特化型のビデオカード」というものが登場するようになりました。これらでゲームを動かすとまったく速度がでないようです。