各位斑竹好,看到书上说,当输入内存和输出内存都只能使用一次时,在独立GPU上使用零拷贝内存将带来性能提升。如果多次读取内存,那么将得不偿失,还不如一次将数据复制到GPU中。
我想问的是,“当输入内存和输出内存都只能使用一次时”是说在kernel函数中只使用一次,还是在整个程序中只使用一次。
例如有个for循环,循环体是kernel,在kernel中输入输出内存只使用了一次,但整个程序来看,输入输出内存却使用了多次,之中情况是否应该零拷贝。
感谢斑竹们 的解答!
如果虽然kernel中用了一次,但是从整个执行过程看,使用了多次该内存(例如您的这种循环启动kernel), 那么建议cudaMemcpy手工通过pci-e传输一次的(这样以后都在显存里高速读取),而不是每次都通过pci-e.
前者将只有一次PCI-E传输的代价和多次高速的显存的读写。
而后者,则将每次都是缓慢的pci-e传输。
所以建议是复制的。
谢谢斑竹:D
应该是集成显卡使用零拷贝内存效率会有提高,而使用 独立显卡,程序往往不可能只使用一次输入内存和输出内存,所以性能会下降。
感谢hrbspider的分析,您的发言非常及时、生动、发人深省,欢迎您多多来访!
不敢当,不敢当,我也非常感谢横扫千军 、 ice 斑竹对我的耐心指导,真的受益良多:)~