「GPGPU」の版間の差分

提供:MonoBook
編集の要約なし
 
(2人の利用者による、間の10版が非表示)
7行目: 7行目:


かつてはGPGPUは[[仮想通貨]]の[[マイニング]]でも使われた。ただ仮想通貨のマイニングの計算式は特定の[[アルゴリズム]]([[ハッシュ関数]])であり頻繁に変化するものではないため、[[コスパ]]を向上させる目的でGPGPUから[[FPGA]]へ、FPGAから[[ASIC]]へと変移していった。
かつてはGPGPUは[[仮想通貨]]の[[マイニング]]でも使われた。ただ仮想通貨のマイニングの計算式は特定の[[アルゴリズム]]([[ハッシュ関数]])であり頻繁に変化するものではないため、[[コスパ]]を向上させる目的でGPGPUから[[FPGA]]へ、FPGAから[[ASIC]]へと変移していった。
== 向いていない処理 ==
=== 小さい処理 ===
CPUからGPUを呼び出すには「準備」が必要です。この準備段階はものすごく重たい処理なのでメインの処理量が少ない場合は逆に遅くなることがあります。


== 歴史 ==
== 歴史 ==
=== 古代 ===
=== 古代 ===
N社のGPUでは1クロックで64ビクセルを一斉に画像処理する(A社は128ピクセル)。
「これ[[SIMD]]の代わりに使えるんじゃね?」
「これ[[SIMD]]の代わりに使えるんじゃね?」


その昔、こんなことを思いついた人がいた。
その昔、こんなことを思いついた人がいました。
* 巨大なint型などの[[配列]]を[[テクスチャ画像]]に無理やり変換し、
* 巨大なint型などの[[配列]]を[[テクスチャ画像]]に無理やり変換し、
* それを[[ピクセルシェーダー]]で数値として取り出し計算させ、
* それを[[ピクセルシェーダー]]で数値として取り出し計算させ、
* [[レンダーターゲット]]([[GPU]]の描画先テクスチャ)を巨大な配列に変換する
* [[レンダーターゲット]]([[GPU]]の描画先テクスチャ)を巨大な配列に変換する


[[構造体]]の配列を送信できる[[バーテックスバッファ]][[とバーテックスシェーダー]]を使ったほうが便利じゃん」と思うかもしれないが、この当時(SM 3.0 = DirectX 9)は[[GPU]]から[[データ]]を取得する手段が[[レンダーターゲット]](GPUの描画先テクスチャ)以外になかった。CPU側からGPU側に送信したデータを見ることすらできない。完全に一方通行。なのでピクセルシェーダーとレンダーターゲットが使われていた。
こんな面倒なことをするより「[[構造体]]の配列を送信できる[[バーテックスバッファ]][[バーテックスシェーダー]]を使ったほうが便利じゃん」と思うかもしれませんが、この当時(SM 3.0 = DirectX 9)は[[GPU]]から[[データ]]を取得(出力)する手段が[[レンダーターゲット]](GPUの描画先テクスチャ)しかありませんでした。
 
[[3DCG]]でも高度に[[カプセル化]]された3Dモデルを扱う[[ライブラリ]]から頂点データ(private宣言されている)を抜き出す手段がなく「GPUからGetDataできたら嬉しいな。このメーカーのGPUだけ動かねえ」なんてことがありました。
 
なので当時はピクセルシェーダーとレンダーターゲットが使われていました。


=== 近代 ===
=== 近代 ===
その後、SM4.0から「[[コンピュートシェーダー]]」が登場したことで、無理にテスクチャ画像化する必要がなくなった。
その後、SM4.0から「[[コンピュートシェーダー]]」が登場したことで無理にデータをテスクチャ画像化する必要がなくなり、[[バーテックスバッファ]]のように「構造体の配列」を送信する手法が使えるようになった。これにより飛躍的に手軽になった。
バーテックスバッファのように構造体の配列を送信する手法が使えるようになった。
 
飛躍的に手軽になった。
この世代から処理は主にゲームであればバーテックスシェーダーで使われる回路で実行されるようになりました。
つまり従来はピクセルシェーダーの性能に依存していましたがバーテックスシェーダーの性能が重要になりました。
 
このような状況もあり、[[NVIDIA A100]]などの主にゲームであればバーテックスシェーダーで使われる回路の性能に全振りした「GPGPU特化型のビデオカード」というものが登場するようになりました。これらでゲームを動かすとまったく速度がでないようです。
 
[[category: GPU]]
[[category: GPGPU]]

2024年8月26日 (月) 03:06時点における最新版

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特化型のビデオカード」というものが登場するようになりました。これらでゲームを動かすとまったく速度がでないようです。