2016-06-13 4 views
-3

私はCUDAを学び始めており、プロジェクトに直接飛び込んでいなければなりません。私は途中でそれを拾うだろう。CUDAを使用して任意のサイズのタスクを処理する方法は?

私はハードウェアが内蔵されている方法は、スレッドブロックおよびグリッドに対処するために、プログラマが必要であることを理解している間、私は私の入門書では、以下の質問に対する答えを見つけることができませんでした:

  • タスクのサイズがGPUが一度に処理できるスレッドの量よりも大きい場合はどうなりますか? GPUは、CPUと同じように、すなわちシーケンシャルにアレイを進めますか?
  • したがって、特定のタスクが必要とするスレッドブロックの量がGPU上で同時に実行できる量を超えている場合は心配する必要はありますか?私はこれまでのところ「スレッド・ブロック・リミット」の概念を見つけました。明らかに、GPUが特定の時点で処理できることは、実際の(そして唯一の)制限であり、 ?
  • 特定のハードウェアに適切なブロックサイズを選択する以外に、実行のためにカーネルを設定する際に考慮すべき問題はありますか?私は、任意のサイズのタスクを起動することについて紛失している。配列上で実行するカーネルを起動するときに明示的なブロックサイズの計算が行われないように見えるので、CUDAの代わりにOpenCLを使うことも考えました。

私はこれが重複している場合は、元の質問を指すようにしてください。

+0

downvotersが、彼らはあなたに感謝し、質問について嫌い何にとしてのノートを残した場合、私は感謝します。質問は非常に正確で、なぜそれが広すぎると投票されたのかわからない。 – iksemyonov

+3

私はそれをあまりにも広いものとして閉じようと投票しました。その理由は。あなたは事実上4つの異なる質問をしてきましたが、それらすべてに答えるには*非常に*長い応答が必要です。確かに私は喜んで書くよりも長い。 – talonmies

答えて

1

スレッドブロックの数は任意です。ハードウェアは、番号が大きい場合は順番に処理できます。このリンクは、基本的なビューを提供します。一方

http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#scalable-programming-model

あなたは、スレッドごとに仕事を増やすことで、任意のサイズのタスクを処理するためにスレッドの限られた数を使用することができます。このリンクは、それを行う方法と、それがより良い理由を示しています。

https://devblogs.nvidia.com/parallelforall/cuda-pro-tip-write-flexible-kernels-grid-stride-loops/

あなたは完全な答え、次の2つを読むことをお勧めします。

http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html

http://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html

関連する問題