想要利用工作站式机箱进行8块GPU并行,在计算的同时,8块GPU之间还要进行数据传输以便于进一步迭代计算,现在拟采用的方法是为每块GPU分配一个主机线程,不知道可行性如何,各主机线程间进行GPU互访有无影响,CUDA版本为4.2。
可行性没问题,需要注意的就是各个线程在调GPU完成计算工作后,最好由主线程同步所有设备一次,保证数据正确传回(如果是使用主存互相通信的话),再由各线程拷贝回去,这样可以确保正确性。
意思我懂了,不过我对主机线程操作不熟悉,这里说的主线程同步所有设备具体是怎么实现的?
最简单的办法,让所有线程在GPU计算完成后使用同步的内存拷贝,然后让主线程等待所有线程结束,等主线程获得CPU的使用权后,所有的数据已经是正确拷贝到主存,这时候再用多线程把数据拷贝回各个GPU
哦,你说的是把数据先从设备拷贝到主机内存,再传输到另一块设备上的方式吧,我想的是能不能不通过CPU而是GPU之间直接进行传输,不知道可不可以实现
telsa卡的话,您可以研究下“GPU Direct”功能。
额,由于设备不支持,所以我没试过点对点的直接传输!
好的,谢谢
tesla C2050