OpenCL:调用内置函数是不明确的

时间:2015-03-04 10:07:02

标签: c opencl

我有一段来自openCL内核的代码。

     const uint idz = 100;
     const uint idy = 100;
     unit4 size_sino;
     uint idz_p;
     uint idy_p;
     idz_p = (idz*size_sino.y+idy)/16;
     idy_p = fmod((idz*size_sino.y+idy), (uint)16);

编译内核时,发生了一些错误:

     :192:18: error: call to 'fmod' is ambiguous
     <stdin>:1078:48: note: candidate function
     <stdin>:1084:49: note: candidate function
     <stdin>:1079:49: note: candidate function
     <stdin>:1080:49: note: candidate function
     <stdin>:1081:49: note: candidate function
     <stdin>:1082:49: note: candidate function
     <stdin>:1083:50: note: candidate function
     <stdin>:1085:50: note: candidate function
     <stdin>:1086:50: note: candidate function
     <stdin>:1087:50: note: candidate function
     <stdin>:1088:50: note: candidate function
     <stdin>:1089:51: note: candidate function

fmod()是一个已经过载的内置函数。我理解两个输入的类型应该是相同的。有谁能说出这里发生了什么?

1 个答案:

答案 0 :(得分:8)

您正在使用两个fmod参数调用uint。此函数具有floatdouble参数的重载,因此编译器无法推断您希望使用哪个重载(因此有关模糊函数调用的错误)。

您可以通过将参数强制转换为您要使用的类型来明确您的意图:

idy_p = fmod((float)(idz*size_sino.y+idy), (float)16.f);