2012-02-11 221 views
0

我知道,对于Intel来说,矢量寄存器是优化的,例如, SandyBridge微架构(SSE + AVX),但NVIDIA的GPU如何?我在某处读过的一些资源(我忘记了在哪里)说使用矢量寄存器对NVIDIA的GPU没有任何用处。但是我有一个testrun在GPU上运行一个带有向量寄存器的程序,并且与其中的一个进行比较,他们确实给了我apx。 1.7倍加速。OpenCL:NVIDIA的矢量寄存器(float4,float8,..)VS英特尔的矢量寄存器

仅供参考对于相同的程序,英特尔的CPU只提供1.25倍的加速比。

因此,如果NVIDIA确实优化了这些向量寄存器,有人可以给我一个解释或来源阅读吗?我需要它来获取文档。谢谢。

+2

NVIDIA GPU上性能提升的可能来源将是内存吞吐量。硬件可以在每个多处理器的单个事务中为64位和128位类型进行存储和加载,从而减少总体延迟并提高有效吞吐量。 – talonmies 2012-02-11 16:14:04

+0

感谢您的回复。你的意思是16个加载/存储单元?每个单元可以加载/存储每个warp 128位类型? (因此使它成为16x128)。如果没有,我认为情况并非如此。因为隐式向量寄存器的使用(convert_floatn,vloadn等)确实有所作为。它提供了更好的加速。 – ardiyu07 2012-02-12 01:29:15

+0

是的。硬件可以处理每个warp 256和512字节的事务大小。这可以导致在任何给定的占用水平下更高的带宽利用率。请参阅[这些幻灯片]的幻灯片35(http://www.cs.berkeley.edu/~volkov/volkov10-GTC.pdf)(note pdf),以了解CUDA中的memcpy内核示例,其中说明了该效果。 – talonmies 2012-02-12 07:45:34

回答

2

NVIDIA GPU上性能提升的可能来源将是内存吞吐量。硬件可以在每个多处理器的单个事务中为64位和128位类型进行存储和加载,从而减少总体延迟并提高有效吞吐量。硬件可以处理每个warp 256和512字节的事务大小,因此可以在单个事务中处理适合于对齐的float4加载/存储请求,并且可以在两个事务中处理float8加载/存储请求。这可能导致在任何给定的占用水平下更高的全局内存带宽利用率。来自加利福尼亚大学伯克利分校的Vasily Volkov在幻灯片35的this presentation中查看了CUDA中的memcpy内核示例,该示例说明了类型大小(以及所产生的事务大小)对内存吞吐量的影响。

+0

你是否建议GPU实际上不使用float4/...上的SIMD指令进行计算? – eudoxos 2012-02-12 10:11:50

+2

@eudoxos:NVIDIA的DX10/DX11硬件(可以运行CUDA和OpenCL的硬件)上的ALU没有SIMD算术指令来处理像float4这样的矢量类型。它们纯粹是标量设备。可以直接对矢量类型执行的唯一操作是加载/存储和通过纹理硬件进行过滤。 – talonmies 2012-02-12 12:30:12