__forceinline__对CUDA C __device__函数的影响

Far*_*zad 8 c cuda gpgpu nvidia

关于何时使用内联函数以及何时在常规C编码中避免它,有很多建议.__forceinline__对CUDA C __device__功能有什么影响?他们应该在哪里使用,哪里可以避免?

Rob*_*lla 5

通常,nvcc设备代码编译器会自行决定何时内联特定__device__函数,一般来说,您可能不需要担心使用__forceinline__decorator /指令覆盖它.

cc 1.x设备没有与新设备相同的硬​​件功能,因此编译器通常会自动为这些设备内联函数.

我认为指定的原因与__forceinline__您对主机C代码的了解相同.当编译器可能无法内联函数时(例如,在cc 2.x或更新的设备上),它通常用于优化.如果你一次调用函数,这个优化(即函数调用开销)可能是微不足道的,但是如果你在循环中调用函数,那么确保它被内联可能会在代码执行方面给出明显的改进.

作为反例,内联和递归通常具有禁忌症.对于调用自身的递归函数,我认为不可能处理任意递归和严格内联.因此,如果您打算递归使用函数(在cc 2.x及更高版本中支持),您可能不希望指定__forceinline__.

一般来说,我认为你应该让编译器为你管理这个.它将智能地决定是否内联函数.

  • 在表达式模板中,您希望通过使用更简单自然的数学语法获得与手写代码相同的性能。对于这种情况,我需要使用`__forceinline__`(和主机`__forceinline` 对应物)来保证这一点。 (2认同)