复现论文实验的时候,出现automicMin函数找不到的错误:
sssp.cu(196): error: no instance of overloaded function "atomicMin" matches the argument list
argument types are: (float *, float)
nvidia GPU 只支持整数型的操作,sm_35之后也只支持64位整数参数,如果需要使用float型的原子操作,可以用如下函数代替:
__device__ static float atomicMin(float* address, float val)
{
int* address_as_i = (int*) address;
int old = *address_as_i, assumed;
do {
assumed = old;
old = ::atomicCAS(address_as_i, assumed,
__float_as_int(::fminf(val, __int_as_float(assumed))));
} while (assumed != old);
return __int_as_float(old);
}
代码参考:https://stackoverrun.com/cn/q/4737281