【问题标题】:OpenCL: NVIDIA's vector registers (float4,float8,..) VS Intel's vector registersOpenCL:NVIDIA 的向量寄存器 (float4,float8,..) VS Intel 的向量寄存器
【发布时间】:2012-03-03 17:36:20
【问题描述】:

我知道对于 Intel,向量寄存器已经过优化,例如SandyBridge 微架构 (SSE+AVX),但 NVIDIA 的 GPU 怎么样?

我在某处读到的一些资料(我忘了在哪里)说使用向量寄存器对 NVIDIA 的 GPU 毫无用处。但是我有一个测试运行在 GPU 上运行一个带有向量寄存器的程序,并与没有它们的程序进行比较,他们确实给了我apx。 1.7 倍加速。

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

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

【问题讨论】:

  • NVIDIA GPU 性能改进的可能来源是内存吞吐量。硬件可以在每个多处理器上的单个事务中对 64 位和 128 位类型进行存储和加载,从而减少总体延迟并提高有效吞吐量。
  • 感谢您的回复。你的意思是 16 个装载/存储单元?每个单元可以在每个扭曲中加载/存储 128 位类型吗? (因此使其成为 16x128)。如果不是,我认为情况并非如此。因为隐式向量寄存器的使用(convert_floatn、vloadn 等)确实有所作为。它提供了更好的加速。
  • 是的。每个 warp 硬件可以处理 256 和 512 字节的事务大小。这可以在任何给定的占用水平下导致更高的带宽利用率。请参阅these slides(note pdf) 的幻灯片 35,了解 CUDA 中的 memcpy 内核示例,该示例说明了效果。
  • 太棒了!感谢您的帮助和参考!这正是我需要的
  • 好的,如果你愿意接受的话,我会用我的 cmets 来回答。

标签: opencl intel nvidia cpu-registers


【解决方案1】:

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

【讨论】:

  • 您是否建议 GPU 实际上没有在 float4/... 上使用 SIMD 指令进行计算?
  • @eudoxos:NVIDIA 的 DX10/DX11 硬件(可以运行 CUDA 和 OpenCL)上的 ALU 没有 SIMD 算术指令来操作像 float4 这样的向量类型。它们是纯标量设备。唯一可以直接对矢量类型执行的操作是通过纹理硬件加载/存储和过滤。
猜你喜欢
  • 2017-05-12
  • 1970-01-01
  • 2014-02-04
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2014-11-19
相关资源
最近更新 更多