Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有两个循环的CUDA中的重叠传输和内核执行_Cuda_Overlap_Cuda Streams - Fatal编程技术网

具有两个循环的CUDA中的重叠传输和内核执行

具有两个循环的CUDA中的重叠传输和内核执行,cuda,overlap,cuda-streams,Cuda,Overlap,Cuda Streams,我希望以如下形式重叠数据传输和内核执行: int numStreams = 3; int size = 10; for(int i = 0; i < size; i++) { cuMemcpyHtoDAsync( _bufferIn1, _host_memoryIn1 ), _size * sizeof(T), cuda

我希望以如下形式重叠数据传输和内核执行:

int numStreams = 3;
int size = 10;

for(int i = 0; i < size; i++) {
    cuMemcpyHtoDAsync( _bufferIn1,
                           _host_memoryIn1 ),
                           _size * sizeof(T),
                           cuda_stream[i % numStreams]);

    cuMemcpyHtoDAsync( _bufferIn2,
                           _host_memoryIn2,
                           _size * sizeof(T),
                           cuda_stream[i % numStreams]);

        cuLaunchKernel( _kernel,
                        gs.x(), gs.y(), gs.z(),
                        bs.x(), bs.y(), bs.z(),
                        _memory_size,
                        cuda_stream[i % numStreams],
                        _kernel_arguments,
                        0
                      );
      cuEventRecord(event[i], cuda_stream);
}

for(int i = 0; i < size; i++) {
    cuEventSynchronize(events[i]);

    cuMemcpyDtoHAsync( _host_memoryOut,
                           _bufferOut,
                           _size * sizeof(T),
                           cuda_stream[i % numStreams]);
}
int numStreams=3;
int size=10;
对于(int i=0;i

在这种情况下是否可能重叠?目前只有HtoD传输与内核执行重叠。第一次DtoH传输在最后一次内核执行之后执行。

只有在不同的流上执行操作时,才可能重叠。相同流中的CUDA操作由主机调用顺序顺序执行,以便在相应流上的所有操作完成后,将执行从设备到最终主机的复制。重叠不会发生,因为最后一个内核和第一个副本都在流0上执行,所以副本必须等待内核完成。由于您在每个循环迭代中都与事件同步,因此尚未调用其他流(流1和流2)上的其他副本

只有在不同的流上执行操作时,才可能重叠。相同流中的CUDA操作由主机调用顺序顺序执行,以便在相应流上的所有操作完成后,将执行从设备到最终主机的复制。重叠不会发生,因为最后一个内核和第一个副本都在流0上执行,所以副本必须等待内核完成。由于您在每个循环迭代中都与事件同步,因此尚未调用其他流(流1和流2)上的其他副本

您正在尝试在一组流上记录事件。。。另外,您希望有什么重叠?仅仅从你发布的代码是不可能看出这一点的。你试图在一系列流上记录一个事件。。。另外,您希望有什么重叠?仅仅从你发布的代码是不可能理解的。谢谢!如果流的数量等于循环迭代的数量,是否可能重叠?因此,我只在每个流中对HtoD传输、内核执行和DtoH传输排队。这取决于您想要实现何种重叠以及如何使用这些流和同步。你可以阅读这篇文章来更好地了解它的工作原理:谢谢!如果流的数量等于循环迭代的数量,是否可能重叠?因此,我只在每个流中对HtoD传输、内核执行和DtoH传输排队。这取决于您想要实现何种重叠以及如何使用这些流和同步。你可以阅读这篇文章,更好地了解它的工作原理: