わかりました。関連する質問が何度も繰り返されていることを知っています。これについて見つけたほとんどすべてを読みましたが、状況はまだ不明です。おそらく、私が互いに矛盾するものを見つけて読んだためです(おそらく、異なる時代からのものであり、それらは異なる計算能力を持つデバイスを参照しており、その間にかなりのギャップがあるようです)。実行時間を短縮するために、より効率的になることを目指しています。したがって、同時に実行できるスレッド/ワープ/ブロックの数を正確に知る必要があります。また、これを一般化し、カーネルに渡す最適なスレッドとブロックの数を、(より単純なプログラムの場合)実行する必要があることがわかっている操作の数とシステム仕様のみに基づいて計算することを考えていました。
私はGTX550Tiを持っていますが、コンピューティング機能2.1を備えています。4 SMx48コア=192CUDAコア。
わかりました。私にはわかりませんが、次のとおりです。
マルチプロセッサ(SM)で複数のブロックを一度に(並列に)実行できますか?SMには最大8つのブロックを割り当てることができると読みましたが、それらがどのように実行されるかについては何もありません。SMあたりの最大スレッド数(1536)が、ブロックあたりの最大スレッド数(1024)よりもわずかに多いという事実から、ブロックは並列に実行されていないと思います(おそらく1.5?)。または、少なくともスレッドの最大数がある場合はそうではありません。また、ブロック数を4(私のSMの数)に設定した場合、それらはそれぞれ異なるSMに送信されますか?または、これらすべてがハードウェア上でどのように分散されるかを実際に制御することはできません。これは重要なポイントです。実行時間は、デバイスの気まぐれによって異なります...
次に、ブロックがそのスレッドを、ワープと呼ばれる、並列に実行される32のスレッドのグループに分割することを知っています。これで、これらのワープ(互いに関係がないと仮定)も並行して実行できますか?Fermiアーキテクチャでは、2つのワープが同時に実行され、各ワープから16(?)コアのグループに1つの命令が送信されると記載されているため、他の場所では、各コアがワープを処理することを読みました。これは、1536の最大スレッドを説明します( 32 * 48)しかし、少し多いようです。1つのCUDAコアで32のスレッドを同時に処理できますか?
簡単に言うと、私が求めているのは次のとおりです。(たとえば)2つのベクトルを3つ目のベクトルで合計する場合、それらにどのくらいの長さ(操作の数)を与える必要があり、どのようにブロックとスレッドに分割する必要がありますか?私のデバイスは、(アイドル状態のコアやSMがなくても)フルキャパシティーで同時に(並行して)動作します。
これが以前に尋ねられて、私がそれを受け取らなかったか、それを見なかったならば、すみません。あなたが私を助けてくれることを願っています。ありがとうございました!