解決策が見つかるまで、カーネルを何回か起動しました。解は少なくとも1つのブロックによって見出される。
したがって、ブロックが解決策を見つけると、解決策が見つかったことをCPUに知らせる必要があります。したがって、CPUはこのブロックによって提供される解決策を出力します。
ので、私が現在やっていることは、次のとおりです。は私のケースでは良いcudaHostAllocを使用しています
__global__ kernel(int sol)
{
//do some computations
if(the block found a solution)
sol = blockId.x //atomically
}
私は戻ってホストメモリにゾルをコピーし、その値をチェックし、カーネルを呼び出すたびに。たとえば3に設定されている場合、私はblockid 3が解決策を見つけたので、解決策のインデックスがどこにあるかを知っているので、解決策をホストにコピーし直します。
この場合、cudaHostAllocを使用する方がよいでしょうか?すべてのカーネル呼び出しで単一の整数の値をコピーすると、プログラムが遅くなります。
CUDA 4.0では 'cudaDeviceSynchronize()'、 'cudaThreadSynchronize()'は非推奨です。 – harrism
OK、固定。ありがとう! – CygnusX1
@harrism cudaDeviceSynchronize()とcudaThreadSynchronize()の違いは何ですか?彼らは同じことをするつもりだと思いますが、名前を変えるのはなぜですか? –