一个程序采用两个cuda计算,总是一个cuda线完成后另一个在计算,如何实现并行
最近参考CUDA事例程序中的simpleMultiGPU程序把握的程序采用两个显卡来计算,但是总是一个显卡线运行完再运行另一个显卡,两个显卡并不是同时运行的,所以效率和一个显卡没什么区别,如何让两个显卡同时运行?
事例程序的simpleMultiGPU大概代码如下:
//Copy data to GPU, launch the kernel and copy data back. All asynchronously
for(i = 0; i < GPU_N; i++)
{
//Set device
checkCudaErrors( cudaSetDevice(i) );
//Copy input data from CPU
checkCudaErrors( cudaMemcpyAsync(plan[i].d_Data, plan[i].h_Data, plan[i].dataN * sizeof(float), cudaMemcpyHostToDevice, plan[i].stream) );
//Perform GPU computations
launch_reduceKernel(plan[i].d_Sum, plan[i].d_Data, plan[i].dataN, BLOCK_N, THREAD_N, plan[i].stream);
getLastCudaError("reduceKernel() execution failed.\n");
//Read back GPU results
checkCudaErrors( cudaMemcpyAsync(plan[i].h_Sum_from_device, plan[i].d_Sum, ACCUM_N * sizeof(float), cudaMemcpyDeviceToHost, plan[i].stream) );
}
他是采用的for循环,我是不是应该开来两个线程来处理?