我是CUDA编程的新手,并且正在将C代码重写为并行化的CUDA新代码。
有没有办法直接从设备写入输出数据文件而不必费心将数组从设备复制到主机?我假设如果cuPrintf存在,那么必须要写一个cuFprintf?
很抱歉,如果上一个主题中已经给出了答案,我似乎无法找到它......
谢谢!
答案 0 :(得分:1)
简短的回答是,没有。
cuPrintf和Fermi和Kepler运行时内置的printf支持是使用设备来托管副本。该机制与使用cudaMemcpy自行将缓冲区传输到主机没有什么不同。
几乎所有兼容CUDA的GPU都支持所谓的零拷贝(AKA“固定,映射”)内存,它允许GPU将主机缓冲区映射到其地址空间,并执行DMA传输到映射的主机内存。但请注意,映射内存的设置和初始化具有比传统内存分配高得多的开销(因此,您确实需要大量事务来在应用程序的整个生命周期中分摊该开销),并且CUDA驱动程序不能使用零-copy与物理内存支持的地址以外的任何其他地方。所以你不能mmap一个文件并使用零拷贝,即。您仍然需要显式的主机端文件IO代码才能从零拷贝缓冲区到磁盘。