CUDA テクノロジを使用して GPU 対応のプログラムを作成しようとしています。それは C# Emgu または C++ Cuda ツールキット (まだ決定されていません) であるはずです。
すべての GPU パワーを使用する必要があります (16 個の GPU コアを搭載したカードを持っています)。16 個のタスクを並行して実行するにはどうすればよいですか?
の最初の。16 GPUコアは、6xxシリーズより前では、16 * 8=128コアに相当します。6xxシリーズでは、16 * 32=512コアです。これは、128/512タスクに制限する必要があるという意味ではありません。
2番目:emguは.NETのOpenCVラッパーのようで、画像処理に関連しています。通常、GPUプログラミングとは何の関係もありません。一部のアルゴリズムはGPUで高速化されている可能性がありますが、それについては何も知りません。これにおけるCUDAの代替は、OpenCVではなくOpenCLです。あなたが言うようにCUDAテクノロジーを使用する場合、CUDAだけがCUDAであるため、CUDAに代わるものはありません。
タスクの開始に関しては、実行するスレッドの数だけをGPUに指示します。実際には、GPUにブロック数とスレッド数を指示します。実行したいブロック。これは、cuda関数自体を呼び出すときに行われます。128/512スレッドに制限する必要もありませんが、実験してみてください。
GPGPUプログラミングの知識はわかりませんが、CPUのようにタスクを実行することはできないことを忘れないでください。128の異なるタスクを実行することはできません。すべてのスレッドは、まったく同じ命令を実行する必要があります(分岐する場合を除き、通常は回避する必要があります)。
一般的に言えば、すべてのストリーミング マルチプロセッサを満たすのに十分なスレッドが必要です。少なくともそれは.25 * MULTIPROCESSORS * MAX_THREADS_PER_MULTIPROCESSOR
です。
特にCUDAでは、CUDAカーネルがあるとします__global__ void square_array(float *a, int N)
...
カーネルを起動するときに、ブロック数とブロックごとのスレッド数を指定します
square_array <<< n_blocks, n_threads_per_block >>> (a, N);
注: すべての GPU パワーを使用するマナーに近づかないため、CUDA 並列プログラミング モデルに慣れる必要があります。Programming Massively Parallel Processors, A Hands-on Approachを読むことを検討してください。