OpenCL:NVIDIA';s矢量寄存器(浮点4、浮点8、…)与英特尔&x27;s矢量寄存器

OpenCL:NVIDIA';s矢量寄存器(浮点4、浮点8、…)与英特尔&x27;s矢量寄存器,opencl,intel,nvidia,cpu-registers,Opencl,Intel,Nvidia,Cpu Registers,我知道对于英特尔来说,向量寄存器是经过优化的,例如SandyBridge微体系结构(SSE+AVX),但是对于NVIDIA的GPU呢 我在某处读到的一些资料(我忘了在哪里)说,使用矢量寄存器对NVIDIA的GPU是无用的。。然而,我在GPU上运行了一个带有向量寄存器的程序,与没有向量寄存器的程序相比,他们给了我apx。1.7倍加速比 仅供参考,对于相同的程序,Intel的CPU仅提供1.25倍的加速 所以,如果NVIDIA确实优化了这些向量寄存器,有人能给我一个解释或来源来阅读吗?我需要它的文件

我知道对于英特尔来说,向量寄存器是经过优化的,例如SandyBridge微体系结构(SSE+AVX),但是对于NVIDIA的GPU呢

我在某处读到的一些资料(我忘了在哪里)说,使用矢量寄存器对NVIDIA的GPU是无用的。。然而,我在GPU上运行了一个带有向量寄存器的程序,与没有向量寄存器的程序相比,他们给了我apx。1.7倍加速比

仅供参考,对于相同的程序,Intel的CPU仅提供1.25倍的加速


所以,如果NVIDIA确实优化了这些向量寄存器,有人能给我一个解释或来源来阅读吗?我需要它的文件。谢谢。

NVIDIA GPU性能提升的可能来源是内存吞吐量。硬件可以在每个多处理器上的单个事务中存储和加载32、64和128位类型的数据,从而减少总体延迟并提高有效吞吐量。硬件可以处理每个扭曲128、256和512字节的事务大小,因此可以在单个事务中为扭曲的适当对齐的
float2
加载/存储请求提供服务,并在两个事务中为
float4
加载/存储请求提供服务。这可能会导致在任何给定的占用率水平下都有更高的全局内存带宽利用率。有关CUDA中的memcpy内核示例,请参见UC Berkeley的Vasily Volkov的幻灯片35,该示例说明了类型大小(以及产生的事务大小)对内存吞吐量的影响。

NVIDIA GPU性能改进的可能来源是内存吞吐量。硬件可以在每个多处理器上的单个事务中存储和加载32、64和128位类型的数据,从而减少总体延迟并提高有效吞吐量。硬件可以处理每个扭曲128、256和512字节的事务大小,因此可以在单个事务中为扭曲的适当对齐的
float2
加载/存储请求提供服务,并在两个事务中为
float4
加载/存储请求提供服务。这可能会导致在任何给定的占用率水平下都有更高的全局内存带宽利用率。有关CUDA中的memcpy内核示例,请参见UC Berkeley的Vasily Volkov的幻灯片35,该示例说明了类型大小(以及由此产生的事务大小)对内存吞吐量的影响。

NVIDIA GPU性能改进的可能来源是内存吞吐量。硬件可以在每个多处理器上的单个事务中存储和加载64位和128位类型的数据,从而减少总体延迟并提高有效吞吐量。感谢回复。你是说16个装载/存储单元?每个单元是否可以加载/存储每个warp的128位类型?(因此为16x128)。如果不是,我想情况并非如此。。因为隐式向量寄存器的使用(convert_floatn、vloadn等)确实会产生影响。。它能提供更好的加速。硬件可以处理每个扭曲256和512字节的事务大小。这可以在任何给定的占用率水平上提高带宽利用率。有关CUDA中的memcpy内核示例,请参见(注意pdf)的幻灯片35,该示例演示了效果。太棒了!谢谢你的帮助和推荐!这正是我所需要的好吧,如果你愿意接受的话,我会根据我的评论做出回答。NVIDIA GPU性能改进的可能来源是内存吞吐量。硬件可以在每个多处理器上的单个事务中存储和加载64位和128位类型的数据,从而减少总体延迟并提高有效吞吐量。感谢回复。你是说16个装载/存储单元?每个单元是否可以加载/存储每个warp的128位类型?(因此为16x128)。如果不是,我想情况并非如此。。因为隐式向量寄存器的使用(convert_floatn、vloadn等)确实会产生影响。。它能提供更好的加速。硬件可以处理每个扭曲256和512字节的事务大小。这可以在任何给定的占用率水平上提高带宽利用率。有关CUDA中的memcpy内核示例,请参见(注意pdf)的幻灯片35,该示例演示了效果。太棒了!谢谢你的帮助和推荐!这正是我所需要的好吧,如果你愿意接受的话,我会根据我的评论做出回答。你是否建议GPU实际上没有在float4/…上使用SIMD指令。。。对于计算?@eudoxos:NVIDIA的DX10/DX11硬件(可以运行CUDA和OpenCL的硬件)上的ALU没有SIMD算术指令来操作向量类型,如
float4
。它们是纯标量设备。唯一可以直接在向量类型上执行的操作是加载/存储和通过纹理硬件进行过滤。您是否建议GPU实际上没有在float4/…上使用SIMD指令。。。对于计算?@eudoxos:NVIDIA的DX10/DX11硬件(可以运行CUDA和OpenCL的硬件)上的ALU没有SIMD算术指令来操作向量类型,如
float4
。它们是纯标量设备。可以直接对向量类型执行的唯一操作是加载/存储和通过纹理硬件进行过滤。