何が最も些細な機能のうbenfitから計算でGPUコンピューティング?

StackOverflow https://stackoverflow.com/questions/2443402

  •  19-09-2019
  •  | 
  •  

質問

私はとって、学習のOpenCL.ようにしている感じをつかむために何を連想移動の際は機能アルゴリズムを用いています。

最も基本的なカーネルのほチュートリアルは、カーネルが二つの配列番号、金額の価値に対応する指標を追加する第三の配列にはこのように:

__kernel void 
add(__global float *a,
    __global float *b,
    __global float *answer)
{
    int gid = get_global_id(0);
    answer[gid] = a[gid] + b[gid];
}

__kernel void
sub(__global float* n,
    __global float* answer)
{
    int gid = get_global_id(0);
    answer[gid] = n[gid] - 2;
}

__kernel void
ranksort(__global const float *a,
         __global float *answer)
{
  int gid = get_global_id(0);
  int gSize = get_global_size(0);
  int x = 0;
  for(int i = 0; i < gSize; i++){
    if(a[gid] > a[i]) x++;
  }
  answer[x] = a[gid];
}

いと仮定するときは決して正当化されない計算このGPUメモリに転送が出量の時間がかかると思う計算にCPUにより大きいかつてこい。

かんかんの些細な例が望める大幅な高速化をお使いの場合OpenCLカーネルではなく、CPU?

役に立ちましたか?

解決

あなたは、あなたは基本的に各要素に対して同じ操作を実行していることに線形代数操作を実行しようとする、または行列の十分な大規模なセットを持っている場合、私はその点でしょう簡単な例として。行列の乗算、加算、FFT年代、畳み込み、などあなたは多くの作業を行うことなく高速化のビットが表示されます。あなたは100倍スピードアップを見たい場合は、今、あなたは、メモリ管理を詳細に調べると、舞台裏で何が起こっているかについての公平なビットを知っている必要があります。

始めるために、私はそれは抽象度の非常に高いレベルを提供し、あなたは非常に迅速でジャンプすることができますので、始めるために非常に簡単ですので、pycudaで始まるをお勧めします。 //courses.ece:イリノイ HTTPの大学からCUDAを使用して、並列コンピューティングにこのコースをチェックしてください。あなたは、さらにダイブする準備が整いましたillinois.edu/ece498/al/するます。

他のヒント

些細の定義に依存します。それはメモリ比に計算O(3)/O(2)ているので、私の意見では、行列行列積になります。 同様の比を示すアルゴリズムは、GPUに出場しているの恩恵を受ける可能性があります。

カーネルは明らかにそれが有用な例することができ非常に些細ですが、

、それは完全にすべての要素のために次の2つを持っているので、バインドメモリ読み込み、1個の書き込み、そして唯一の演算です。そこなどのアドレスを計算するためのいくつかの命令がありますが、これはすべてのメモリにアクセスするコストと比較して、実質的に何になるます。

GPU上ですでにデータをと仮定すると、あなたも、この単純なカーネル用のメモリにGPUの非常に高い帯域幅の恩恵を受けることができます。

もちろん、(例えば何百何千ものをGPUは、あなたがメモリレイテンシを隠蔽するために十分なスレッドを持つに依存しているので、あなたのローカルワークグループのサイズは(256または512を言う)かなり大きくする必要がありますし、あなたのグローバルワークグループのサイズが非常に大きくする必要があります)これを有効にするには、それがポイントのようなものだ!

ピックアップしました。問題はかなり古いですが---これらの計算の設定例は非常に適して用いています。お持ちの複雑な入力ベクトル(float2)のスカラー出力(int)、お百業務毎に入力ベクトルの平均値。

ができるようになっていて、良い例アプリケーションです...

  • は2次元の入力データセット(計算イメージです)
  • いて説明できる波面、なぜこの2次元処理できることが有効ですが場合によ
  • を示すベクトルデータの種類
  • 作画することに検証により人間の眼(デバッグ)
  • を容易に拡張できるよカラーマッピング(__定),float4処理の代わりにfloat2(最適化)、int4(R,G,B,A)出力ベクトル列情報(最適化。削減の程(RGBA)=>(RGB)
  • 必要な数学の知識が可能(簡易式)

について ステファン

私は言う行列乗算後の画像のコンボリューション(例えばブラーとして、ノイズ除去など)。 AMDのチュートリアルをチェックします。

どのような「最もつまらない」であることは意見の問題ですが、私はマンデルブロ集合の画像を計算すると、GPUを使用して非常に簡単なアプリケーションですと言うでしょう。あなたは、各ポイントのスレッドを起動し、驚異的なスピードアップを得ることができるので、各点は、他のすべての点の完全に独立しています。反復される式自体は、単純な二次関数です。私は私のブログで見つけることができるチュートリアル<のhref =「http://bmaier.com/eblog//blog2.php/2009/12/25/cuda-first-code」のrel =の例としてそれを使用しました「nofollowをnoreferrer」>ここを、ちょうどでもそれがさらに簡単にする画像をせずに数字を計算します。ほぼすべてのあきれるほどの並列(Wikipediaのエントリを参照)問題は、そもそも良いものです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top