我使用 (CUDA C++) Thrust for GPU GeForce GTX 460SE,asyncEngineCount = 1。据我所知,我可以以一种方式重叠传输数据到 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 流中执行,不能与任何东西重叠?以及如何解决这个问题?