※ 引述《k387259 (台湾李宏感)》之铭言:
: 大家好
: 想请问cuda核心数量与运算处理速度的差异
: 我在网络上有抓到一只程式
: 目前也感觉他把平行化处理的很好
: 用了两张卡测试(用CUDA-Z看的)
: GTX760 CUDA核心1152 处理速度1084M Hz
: Quadro K5000 CUDA核心1536 处理速度740M Hz
: 在K5000上"明显"低于GTX760
: (K5000 FPS:30 GTX760 FPS:60)
: 处理速度的差异我知道
: 但想询问核心数目的差异到底在哪
: 是GPU上运算部分可以平行化处理的东西更多吗?
是!
就像是可以简单想成总共有几个人可以同时帮你做事。
: 但是我用CUDA-Z看thread和grid数量一样
: 核心多/处理慢 跟 核心少/处理慢
: gpu运算的code内要怎么处理会比较好呢?
CUDA Optimize 考量因素非常多,
在分配 thread block grid 上就必须要去看硬件的规格,
例如thread 要能整除一个 wrap同时执行的核心数(通常是32)、
block要多过那张卡上SM的数量,让CUDA运算可以满载。
内存的部分也非常重要
GPU上的内存,分为Global memory, share memory, register memory 等 (不懂就查)
你怎么把你的要用的摆在相对应的内存区块,
如果想要更快,可以考虑memory alignment 、memory coalesce
一般而言,你如果能把你要运算的资料一口气放入share memory里面,
避免在运算过程中 access global memory 这样是最完美的。
也可以考虑stream (overlap).
如果不想要那么麻烦的写CUDA,也可以看看OpenACC,就像openmp一样地去加#就行了。
加油!