gpt4 book ai didi

java - 对 pow 的调用是模棱两可的

转载 作者:行者123 更新时间:2023-11-29 05:51:39 25 4
gpt4 key购买 nike

在使用 JOCl(java 版 opencl)时,我遇到了这个错误。

Exception in thread "main" org.jocl.CLException: CL_BUILD_PROGRAM_FAILURE
Build log for device 0:
<program source>:3:255: error: **call to '__cl_pow' is ambiguous**
__kernel void sampleKernel(__global short *x, __global short *y, __global uint *stop, __global uint *moment){private uint a = 1;private uint b = 2;for(uint i =0; i<= 100;i++){ for(uint j = stop[i]; j < stop[i+1]; j++){ pow(a,b) } }}

我的内核代码:

  private static String programSource =
"__kernel void "
+ "sampleKernel(__global short *x,"
+ " __global short *y,"
+ " __global uint *stop,"
+ " __global uint *moment)"
+ "{"
+ "for(uint i =0; i<= 100;i++){"
+ " for(uint j = stop[i]; j < stop[i+1]; j++){"
+ " moment[i] = moment[i] + (pow(x[j],0)*pow(y[j],0)) "
+ " }"
+ " }"
+ "}";

我认为这是因为 x 和 y 的数据类型。但是当我做一个简单的 pow(1,1) 时,它会导致同样的错误。

我该如何解决这个问题?

最佳答案

只是一个猜测:

pow 没有针对整数类型的重载,因此编译器将尝试在所有可用的重载中找到最接近的匹配:

  • pow(双, 双)
  • 战俘( float , float )
  • ...

但由于 short 可以转换为 float 以及 double 它找不到要使用的单个重载,因此错误。

要验证这个假设,请尝试通过强制转换明确表示要使用的转换:

(pow((float)x[j],0)*pow((float)y[j],0))

关于java - 对 pow 的调用是模棱两可的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13661038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com