asyncEngineCount = 1 で GPU GeForce GTX 460SE に (CUDA C++) Thrust を使用します。私が知っているように、GPU との間でデータ転送をオーバーラップさせ、単一のカーネルを実行することができます。しかし、私が使用するとき:
cudaStream_t Stream1, Stream2;
cudaStreamCreate(&Stream1);
cudaStreamCreate(&Stream2);
cudaMemcpyAsync(thrust::raw_pointer_cast(d_vec_src.data()), host_ptr1, test_size, cudaMemcpyHostToDevice, Stream1);
cudaMemcpyAsync(host_ptr2, thrust::raw_pointer_cast(d_vec_dst.data()), test_size, cudaMemcpyDeviceToHost, Stream2);
thrust::sort(d_vec_dst.begin(), d_vec_dst.end());
cudaThreadSynchronize();
nVidia Visual Profiler で見られるように、GPU からの転送、GPU への転送、カーネルの実行など、順次実行されます。おそらくこれは、何もオーバーラップできないゼロ 0 ストリームで実行されるスラスト アルゴリズムが原因でしょうか? そして、この問題をどのように解決しますか?