CUDA中的整数最小值/最大值

Pho*_*non 8 cuda

我在CUDA Math API文档中看到,有单精度和双精度min/max操作的函数(例如fminf()).我认为这些是高度优化的,等等.似乎没有像这样的函数用于整数.这是真的?这有什么理由吗?

cha*_*pjc 13

整数有最小/最大设备函数,但它们都被重载调用max().查看device_functions.hpp:

__DEVICE_FUNCTIONS_STATIC_DECL__ int max(int x, int y)
{
  return __nv_max(x, y);
}

__DEVICE_FUNCTIONS_STATIC_DECL__ unsigned int umax(unsigned int x, unsigned int y)
{
  return __nv_umax(x, y);
}

__DEVICE_FUNCTIONS_STATIC_DECL__ long long llmax(long long x, long long y)
{
  return __nv_llmax(x, y);
}

__DEVICE_FUNCTIONS_STATIC_DECL__ unsigned long long ullmax(unsigned long long x,
                                                 unsigned long long y)
{
  return __nv_ullmax(x, y);
}
Run Code Online (Sandbox Code Playgroud)

它们没有列在Integer Intinsics部分中,因为在math_functions.hpp中,max函数被重载以便为您调用这些函数.这些__nv*函数记录在device_function_decls.hpp中.

  • 值得一提的是,这些内在函数直接映射到硬件指令.如果用`cuobjdump --dump-sass`反汇编你的二进制文件,你会发现像`IMNMX` ="整数最小或最大"的指令(谓词选择是否执行`min()`或`max()`) (3认同)