メインメニューを開く

差分

GPGPU

1,655 バイト追加, 2024年4月16日 (火)
== 概要 ==
2D画像処理の各種フィルタをGPGPUで実装している例も多い。最近話題の[[人工知能]]の[[深層学習]]でも使われている。
かつては2D画像処理の各種フィルタをGPGPUで実装している例も多い。GPUといえば画像処理であるが、2D画像処理に関してはアルゴリズムによってはピクセルシェーダーで計算するよりもコンピュートシェーダーで計算した方が書きやすいこともある。 かつてはGPGPUは[[仮想通貨]]の[[マイニング]]でも使われた。ただ仮想通貨のマイニングの計算式は特定の[[アルゴリズム]]であるため、([[ハッシュ関数]])であり頻繁に変化するものではないため、[[コスパ]]を向上させる目的でを向上させる目的でGPGPUから[[GPGPUFPGA]]ではなくへ、FPGAから[[ASIC]]と主流になっている。へと変移していった。  == 向いていない処理 ===== 小さい処理 ===CPUからGPUを呼び出すには「準備」が必要です。この準備段階はものすごく重たい処理なのでメインの処理量が少ない場合は逆に遅くなることがあります。
== 歴史 ==
* 巨大なint型などの[[配列]]を[[テクスチャ画像]]に無理やり変換し、
* それを[[ピクセルシェーダー]]で数値として取り出し計算させ、
* レンダーターゲット(GPUの描画先テクスチャ)を巨大な配列に変換する[[レンダーターゲット]]([[GPU]]の描画先テクスチャ)を巨大な配列に変換する
「構造体の配列を送信できるバーテックスバッファとバーテックスシェーダーを使ったほうが便利じゃん」と思うかもしれないが、この当時(SM 「[[構造体]]の配列を送信できる[[バーテックスバッファ]]と[[バーテックスシェーダー]]を使ったほうが便利じゃん」と思うかもしれないが、この当時(SM 3.0 = DirectX 9)はGPUからデータを取得する手段がレンダーターゲット(GPUの描画先テクスチャ)以外にがなかった。GPUに送信した頂点データを計算前に単純にそのまま返してもらうことすらできなかった(なお現在は頂点データをGetDataできる)。9)は[[GPU]]から[[データ]]を取得する手段が[[レンダーターゲット]](GPUの描画先テクスチャ)以外になかった。正確には「一部のGPUでは」取り出せなかった。 CPU側からGPU側に送信したデータを見ることすらできない。完全に一方通行。[[3DCG]]でも高度に[[カプセル化]]された3Dモデルを扱う[[ライブラリ]]から頂点データ(private宣言されている)を抜き出す手段がなく「GPUからGetDataできたら嬉しいな。このメーカーのGPUだけ動かねえ」なんてことがあった。
なのでピクセルシェーダーとレンダーターゲットが使われていた。
=== 近代 ===
その後、SM4.0から「コンピュートシェーダー」が登場したことで、無理に画像化する必要がなくなった。0から「[[コンピュートシェーダー]]」が登場したことで無理にデータをテスクチャ画像化する必要がなくなり、[[バーテックスバッファ]]のように「構造体の配列」を送信する手法が使えるようになった。これにより飛躍的に手軽になった。バーテックスバッファのように構造体の配列を送信する手法が使えるようになった。飛躍的に手軽になった。この世代から処理は主にゲームであればバーテックスシェーダーで使われる回路で実行されるようになりました。つまり従来はピクセルシェーダーの性能に依存していましたがバーテックスシェーダーの性能が重要になりました。 このような状況もあり、[[NVIDIA A100]]などの主にゲームであればバーテックスシェーダーで使われる回路の性能に全振りした「GPGPU特化型のビデオカード」というものが登場するようになりました。これらでゲームを動かすとまったく速度がでないようです。 [[category: GPU]]