OpenCL:NVIDIA的矢量寄存器(float4,float8,..)VS英特尔的矢量寄存器
问题描述:
我知道,对于Intel来说,矢量寄存器是优化的,例如, SandyBridge微架构(SSE + AVX),但NVIDIA的GPU如何?我在某处读过的一些资源(我忘记了在哪里)说使用矢量寄存器对NVIDIA的GPU没有任何用处。但是我有一个testrun在GPU上运行一个带有向量寄存器的程序,并且与其中的一个进行比较,他们确实给了我apx。 1.7倍加速。OpenCL:NVIDIA的矢量寄存器(float4,float8,..)VS英特尔的矢量寄存器
仅供参考对于相同的程序,英特尔的CPU只提供1.25倍的加速比。
因此,如果NVIDIA确实优化了这些向量寄存器,有人可以给我一个解释或来源阅读吗?我需要它来获取文档。谢谢。
答
NVIDIA GPU上性能提升的可能来源将是内存吞吐量。硬件可以在每个多处理器的单个事务中为64位和128位类型进行存储和加载,从而减少总体延迟并提高有效吞吐量。硬件可以处理每个warp 256和512字节的事务大小,因此可以在单个事务中处理适合于对齐的float4
加载/存储请求,并且可以在两个事务中处理float8
加载/存储请求。这可能导致在任何给定的占用水平下更高的全局内存带宽利用率。来自加利福尼亚大学伯克利分校的Vasily Volkov在幻灯片35的this presentation中查看了CUDA中的memcpy内核示例,该示例说明了类型大小(以及所产生的事务大小)对内存吞吐量的影响。
NVIDIA GPU上性能提升的可能来源将是内存吞吐量。硬件可以在每个多处理器的单个事务中为64位和128位类型进行存储和加载,从而减少总体延迟并提高有效吞吐量。 – talonmies 2012-02-11 16:14:04
感谢您的回复。你的意思是16个加载/存储单元?每个单元可以加载/存储每个warp 128位类型? (因此使它成为16x128)。如果没有,我认为情况并非如此。因为隐式向量寄存器的使用(convert_floatn,vloadn等)确实有所作为。它提供了更好的加速。 – ardiyu07 2012-02-12 01:29:15
是的。硬件可以处理每个warp 256和512字节的事务大小。这可以导致在任何给定的占用水平下更高的带宽利用率。请参阅[这些幻灯片]的幻灯片35(http://www.cs.berkeley.edu/~volkov/volkov10-GTC.pdf)(note pdf),以了解CUDA中的memcpy内核示例,其中说明了该效果。 – talonmies 2012-02-12 07:45:34