- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 OpenCL 内核中,多次调用 get_local_id(0)
,而不是在顶部调用一次,然后从局部变量访问该值是否更慢?
我是否通过不将 get_local_id(0)
存储到局部变量而是多次调用它来减少使用一个寄存器?
最佳答案
在大多数 GPU 架构上,本地工作项 ID 将保存在一组特殊的寄存器中,这些寄存器由硬件在分派(dispatch)线程时设置。这意味着当您执行 get_local_id(0) 时,您实际上只是从寄存器中读取数据,即没有速度损失“调用”get_local_id(0)。
编译器应该注意到您是否将 get_local_id(0) 分配给变量以供后续使用,并生成与每次都使用 get_local_id(0) 相同的代码。然而,根据我的经验,情况并非总是如此,您会注意到通过不使用变量来存储本地 ID 而只保存了一个寄存器。
如果您对寄存器很紧张,我建议您每次都调用 get_local_id(0)。您甚至可以设置一个宏来隐藏是否正在调用 get_local_id(0) 或正在使用寄存器。如果您有备用寄存器(您的探查器会告诉您这一点)或更喜欢您的代码使用变量,那么请使用变量。
关于OpenCL get_local_id 速度/寄存器成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20215675/
在 OpenCL 内核中,多次调用 get_local_id(0),而不是在顶部调用一次,然后从局部变量访问该值是否更慢? 我是否通过不将 get_local_id(0) 存储到局部变量而是多次调用它
我有一个简单的扫描内核,它计算循环中几个 block 的扫描。我注意到当 get_local_id() 存储在局部变量中而不是在循环中调用它时,性能会有所提高。所以用代码总结一下: __kernel
取自示例的代码。我用它创建了一个项目并且它可以工作,但我不明白某些部分。 举个例子,假设我有一个 32x32 矩阵,有 36 个工作项,所以 get_global_id(0) 从 0 -> 35 我假
我正在使用 OpenCL/OpenGL Interop 开发一个基本的光线追踪器。我在工作组内共享本地内存的内核方面遇到了一些问题。 这是内核: __kernel void ComputeDirect
我是一名优秀的程序员,十分优秀!