检测PCIe的数据传输速度
当从Host 拷贝数据到Device的过程中,数据需要通过PCIe实现拷贝。所以你的主板的PCIe的版本和传输速度就会影响CUDA 代码的效率。
首先你需要知道你的GPU的显存大小。比如我的P106 有6GB 的VRAM。然后分别传输1GB,2GB,… 的数据。
假如传输int型数据,根据:
1 | printf("this TYPE size: %lu Bytes\n", sizeof(TYPE)); |
来得到所使用的机器存储一个int型所需多少空间。我的机器存储int型需要4Bytes。
如果要传输3GB的数据,那么所需int型数据的数量为:
1 | 1GB = 1024*1024*1024*1 Bytes |
将这个数赋值给N。
之后,分别在Host和Device上开辟空间,最后计时从Host拷贝到Device所需时间:
1 |
|
之后可以逐步增加数据量,知道VRAM极限。如下是实验结果,传输数据量及所需时间:
1 | 1GB: 268435456 // 1.349s |
6GB 的数据错误是因为VRAM不可能全部给用户使用。
所传输数据量越大,经过PCIe传输时间也就越长。这样可以感受PCIe的速度。