CUDA PTX Guide描述了指令'atom'和'red',它们执行原子和非原子减少。这对我来说是新闻(至少在非原子减少方面)......我记得早些时候学习how to do reductions with SHFL。这些指令是否反映或以某种方式包装在CUDA运行时API中?或者有些其他方式可以通过C++代码访问,而无需实际编写PTX代码?如何在CUDA C++代码中使用“红色”和“原子”PTX指令?
回答
这些指令是反映还是以某种方式包装在CUDA运行时API中?或者有些其他方式可以通过C++代码访问,而无需实际编写PTX代码?
大多数指令都反映在the programming guide中描述的原子操作(内置内在函数)中。如果编译任何这些原子内在函数,则会在您生成的代码中找到编译器在PTX或SASS级别发出的或red
指令。
当您不明确使用来自某个原子内在函数的返回值时,通常会使用red
指令类型。如果明确使用返回值,那么编译器通常会发出指令。因此,应该清楚的是,该指令本身并不执行完整的经典并行压缩,但是如果您想依靠原子硬件(以及相关的限制)进行还原操作,肯定可以用来实现一个。这通常不是并行削减的最快实施方案。
如果您想要直接访问这些说明,通常的建议是在需要时使用inline PTX。
按照要求,阐述使用atomicAdd()
为例:
如果我执行以下步骤:
atomicAdd(&x, data);
也许是因为我使用它对于典型的基于原子的还原到设备可变x
,则编译器将发出采取必要参数的指令(指向x
的指针和变量data
,即2个日志ical寄存器)。
如果我执行以下步骤:
int offset = atomicAdd(&buffer_ptr, buffer_size);
也许是因为我使用它不是一个典型的减少,而是保留之中在网格中,其中有各种线程共享的缓冲器的空间(buffer_size
)偏移索引(buffer_ptr
)到共享缓冲器中的下一个可用的空间,则编译器将发射一个(PTX)或ATOM
(SASS)指令,包括3个参数(offset
,&buffer_ptr
,和buffer_size
,在寄存器中)。
red
表格可以由线程/ warp发出,然后由于这个指令问题可能会继续并且不会正常停止,而这个指令问题通常对后续指令没有依赖关系。 OTOH的表示修改其3个参数中的一个(3个逻辑寄存器之一)。因此,随后在该寄存器中使用数据(即,在本例中为内部的返回值,即offset
)可能导致线程/扭曲停顿,直到实际上由原子硬件返回返回值。
当我使用原子本征的返回值时,您能否详细说明为什么/如何使用'red'?或者,也许给了一个(C++代码)示例代码片段?另外,虽然很明显没有单个指令自己执行并行减少,但它听起来像是执行其中的一部分 - 这可能在比nvcc使用它更广的上下文中派上用场。 – einpoklum
- 1. 在CUDA的PTX文件中,“.file”指令的用途是什么?
- 2. 如何在CUDA 4.1/4.2/5.0中输出C/C++注释的PTX
- 3. 如何使用CUDA加速C++代码
- 4. 如何用C头文件和CUDA代码编译C代码?
- 5. 当使用内联PTX asm()指令时,'volatile'会做什么?
- 6. 我如何使这个代码cuda(cpu代码到cuda代码)
- 7. CUDA/C++:在C++代码
- 8. 在内核代码位于PTX文件中时使用Cuda中的纹理,并且主机代码也会生成PTX文件
- 9. 如何使用#ifdef指令进行调试代码。 Objective-c
- 10. 如何使用clang编译OpenCL到ptx代码?
- 11. 使用RDTSC指令在C中测量代码执行时间
- 12. 我如何编译C#代码的IL代码指令
- 13. 在cuda主机代码中使用openMP?
- 14. 如何使用子文件夹组织CUDA C项目的源代码?
- 15. C代码中的SSE2指令
- 16. 措施运行C++和CUDA代码
- 17. 如何在C#中使用代码进行颜色提取?
- 18. 如何在cuda中使用指向指针的指针
- 19. 在NVIDIA GPU上编译ptx代码?
- 20. 在cuda/c + +代码中使用模板类
- 21. CUDA中的原子操作
- 22. 如何在不使用CUDA原子的情况下进行总和计算
- 23. 比较C代码和CUDA代码时使用哪个计时器?
- 24. 如何在HTML中使用C#代码?
- 25. prefetch和prefetchu ptx指令有什么区别?
- 26. 在cuda代码中循环
- 27. 如何在ruby代码中使用find,-exec和cp命令?
- 28. CUDA:注入我自己的PTX功能?
- 29. 如何在角度指令中应用jquery代码
- 30. 如何在c代码和h代码中创建ctags代码
http://stackoverflow.com/q/34466834/681865 – talonmies
你有没有尝试看看你使用atomicAdd CUDA函数时生成的ptx?我现在无法检查,但我相信它是这样暴露的。尽管如此,我对原子与红色的区别感到好奇。 @talonmies链接似乎说明了它。 –