多次调用 get_global_id() 与将结果保存在局部变量中?
这可能是一个愚蠢的问题,但是: 在 OpenCL 内核中调用某些 get_*
函数的成本有多高?是将结果保存在某些局部变量中以供将来使用更好,还是在需要时调用所需的函数更好?
或者它依赖于平台?
聚苯乙烯 我认为,cuda 通过各种 threadIdx 变量可以更好地解决这个问题。
It is probably a silly question, but:
How expensive is it to call some get_*
function in OpenCL-kernels? Is it better to save the result for future usage in some local varialbe or to call the desired function whenever it needed?
Or it is platform dependent?
PS
I think, cuda solves it better with various threadIdx variables.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为这应该对所有 GPU 架构都是免费的。它应该被相应的硬件寄存器或缓存组中的常量替换。
编译器还可以对其进行持续传播。您可以使用 AMD Stream Analyser 进行检查:
OpenCL:
Radeon HD 5870 (Cypress) 程序集:
此处
get_global_id(0)
映射到常量缓存组值KC0[1 ].x
。因此,为了回答您的问题,我将使用最易读的形式。
I think this should be free for all GPU architectures. It should be replaced by a corresponding hardware register or a constant in a cache bank.
Compiler could also do constant propagation on it. You can check yourself using AMD Stream Analyser:
OpenCL:
Radeon HD 5870 (Cypress) assembly:
Here
get_global_id(0)
maps to constant cache bank valueKC0[1].x
.So, for answering your question I would use the most readable form.