Macos Mac OSx上的OpenCL内核错误

Macos Mac OSx上的OpenCL内核错误,macos,debugging,opencl,gpgpu,Macos,Debugging,Opencl,Gpgpu,我写了一些OpenCL代码,它在LINUX上运行良好,但在MacOSX上出现错误,所以失败了。有人能帮我确定为什么会发生这种情况吗。内核代码显示在错误之后。我的内核使用double,因此在顶部有相应的pragma。但我不知道为什么错误显示浮点数据类型: inline float8 __OVERLOAD__ _name(float8 x) { return _default_name(x); } \ ^ /System/Library/Framewor

我写了一些OpenCL代码,它在LINUX上运行良好,但在MacOSX上出现错误,所以失败了。有人能帮我确定为什么会发生这种情况吗。内核代码显示在错误之后。我的内核使用double,因此在顶部有相应的pragma。但我不知道为什么错误显示浮点数据类型:

inline float8 __OVERLOAD__ _name(float8 x) { return _default_name(x); } \
                       ^
/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang/3.2/include/cl_kernel.h:4606:30: note: candidate function
__CLFN_FD_1FD_FAST_RELAX(__fast_relax_log, native_log, __cl_log);
                         ^
/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang/3.2/include/cl_kernel.h:421:29: 

note: expanded from macro '__CLFN_FD_1FD_FAST_RELAX'
inline float16 __OVERLOAD__ _name(float16 x){ return _default_name(x); }
                        ^
<program source>:206:19: error: call to '__fast_relax_log' is ambiguous
                                    det_zkinin + log((2.0) * 3.14));
              ^~~~~~~~~~~~~~~~~
/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang/3.2/include/cl_kernel.h:4608:22: 
note: expanded from macro 'log'
#define log(__x) __fast_relax_log(__x)
                 ^~~~~~~~~~~~~~~~
/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang/3.2/include/cl_kernel.h:4606:30: 
note: candidate function
__CLFN_FD_1FD_FAST_RELAX(__fast_relax_log, native_log, __cl_log);
                         ^
/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang/3.2/include/cl_kernel.h:416:27: 

note: expanded from macro '__CLFN_FD_1FD_FAST_RELAX'
inline float __OVERLOAD__ _name(float x) { return _default_name(x); } \
                      ^
/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang/3.2/include/cl_kernel.h:4606:30 
note: candidate function
__CLFN_FD_1FD_FAST_RELAX(__fast_relax_log, native_log, __cl_log);
                         ^

                       ^
inlinefloat8\uuuuu重载\uuuuuu名称(float8x){return\u default\u名称(x);}\
^
/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang/3.2/include/cl_kernel.h:4606:30:注意:候选函数
__CLFN\u FD\u 1FD\u FAST\u RELAX(\uuuu FAST\u RELAX\u log、native\u log和\uu cl\u log);
^
/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang/3.2/include/cl_kernel.h:421:29:
注意:从宏“\uuu CLFN\u FD\u 1FD\u FAST\u RELAX”展开
内联float16 uuu重载uuuu名称(float16 x){return u default u名称(x);}
^
:206:19:错误:对“\u快速\u松弛\u日志”的调用不明确
det_zkinin+log((2.0)*3.14));
^~~~~~~~~~~~~~~~~
/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang/3.2/include/cl_kernel.h:4608:22:
注意:从宏“log”展开
#定义日志(\uuuux)\uuuuuu快速\uu松弛\u日志(\uuuux)
^~~~~~~~~~~~~~~~
/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang/3.2/include/cl_kernel.h:4606:30:
注:候选函数
__CLFN\u FD\u 1FD\u FAST\u RELAX(\uuuu FAST\u RELAX\u log、native\u log和\uu cl\u log);
^
/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang/3.2/include/cl_kernel.h:416:27:
注意:从宏“\uuu CLFN\u FD\u 1FD\u FAST\u RELAX”展开
内联浮点uuu重载uuuu名称(float x){返回u默认值u名称(x)}\
^
/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang/3.2/include/cl_kernel.h:4606:30
注:候选函数
__CLFN\u FD\u 1FD\u FAST\u RELAX(\uuuu FAST\u RELAX\u log、native\u log和\uu cl\u log);
^
^
这是内核代码:

#pragma OPENCL扩展cl_khr_fp64:启用
__内核无效ckf_kernel2(int-dimx,int-aligned_-dimx,
int numockf,int aligned_ckf,
国际热核实验堆,
双ε,
__全球双*名单,
__全球双*ZR列表,
__全球双*rlists,
__全局双*初始状态,
__全局双*初始变量,
__环球双星,
__全局双*共变矩阵,
__全球双*累积,
__全局双*临时变量,
__全球双*x_k_f,
__全球双*z_k_j,
__全局双*交叉矩阵,
__全球双*z_k_f,
__全局双*矩阵,
__全球双*zk_差异,
__全局双*减少增益矩阵,
__全球双*llk
)
{
int ckf_id=get_global_id(0);
if(ckf_id=dimx)?-1:1;
sing_j[(i*dimx*2+idx)*对齐的_ckf+ckf_id]=临时变量[(i*dimx+列)*对齐的_ckf+ckf_id]*ε*模式+初始状态[i*对齐的_ckf+ckf_id];
}
}
z_k_f[ckf_id]=0;
innCovMatrixSum[ckf_id]=0;
对于(intidx=0;idx#pragma OPENCL EXTENSION cl_khr_fp64: enable

__kernel void ckf_kernel2(int dimx, int aligned_dimx, 
                          int numOfCKF, int aligned_ckf,
                          int iter, 
                          double epsilon,
                          __global double * yrlists, 
                          __global double * zrlists,
                          __global double * rlists,
                          __global double * init_state,
                          __global double * init_var,
                          __global double * sing_j,
                          __global double * covMatrixSum,
                          __global double * cummulative,
                          __global double * temp_var,
                          __global double * x_k_f,
                          __global double * z_k_j,
                          __global double * crossCovMatrixSum,
                          __global double * z_k_f,
                          __global double * innCovMatrixSum,
                          __global double * zk_diff,
                          __global double * reduce_gain_matrix,
                          __global double * llk
    )
{

    int ckf_id = get_global_id(0);

    if( ckf_id < numOfCKF){



        for (int i = 0 ; i < dimx ; i++)
        {
            for (int idx = 0; idx < dimx * 2 ; idx++)
            {
                int column = idx % dimx;
                int mode = (idx >= dimx) ? -1 : 1;
                sing_j[(i * dimx * 2 + idx) * aligned_ckf + ckf_id] = temp_var[(i * dimx + column) * aligned_ckf + ckf_id] * epsilon * mode + init_state[i * aligned_ckf + ckf_id];

            }
        }
        z_k_f[ckf_id] = 0;
        innCovMatrixSum[ckf_id] = 0;
        for (int idx = 0; idx < dimx * 2 ; idx++)
        {
            z_k_j[idx * aligned_ckf + ckf_id] = 0;
            for (int i = 0 ; i < dimx ; i++)
                z_k_j[idx * aligned_ckf + ckf_id] += sing_j[(i * dimx * 2 + idx) * aligned_ckf + ckf_id] * zrlists[iter * aligned_dimx + i ];

            z_k_f[ckf_id] += z_k_j[idx* aligned_ckf + ckf_id] ;
            innCovMatrixSum[ckf_id]  += z_k_j[idx* aligned_ckf + ckf_id] * z_k_j[idx* aligned_ckf + ckf_id];
        }
        z_k_f[ckf_id] = z_k_f[ckf_id]  / (dimx * 2);
        innCovMatrixSum[ckf_id] = innCovMatrixSum[ckf_id] / (dimx * 2);
        innCovMatrixSum[ckf_id] = (innCovMatrixSum[ckf_id] - z_k_f[ckf_id] *z_k_f[ckf_id]) + rlists[ckf_id];

        // calcualte crossCovMatrixSum
        for (int idx = 0; idx < dimx; idx ++)
        {

            crossCovMatrixSum[idx * aligned_ckf + ckf_id] = 0;
            for (int i = 0 ; i < 2 * dimx ; i++)
            {
                crossCovMatrixSum[idx * aligned_ckf + ckf_id] += sing_j[(idx * dimx*2 + i) * aligned_ckf + ckf_id ] * z_k_j[i* aligned_ckf + ckf_id];
            }   
            crossCovMatrixSum[idx * aligned_ckf + ckf_id] = crossCovMatrixSum[idx * aligned_ckf + ckf_id]/ (dimx * 2);
            crossCovMatrixSum[idx * aligned_ckf + ckf_id] = crossCovMatrixSum[idx * aligned_ckf + ckf_id] - x_k_f[idx* aligned_ckf + ckf_id] * z_k_f[ckf_id];

        }

        // calculate zk_diff

        int z_check = (int)yrlists[iter];
        if (z_check == -1)
            zk_diff[ckf_id] = 0;
        else
            zk_diff[ckf_id] = yrlists[iter] - z_k_f[ckf_id];


        // calculate reduce_gain_matrix and (reduce_state_matrix  <==> init_state);
        for (int idx = 0 ; idx < dimx; idx++)
        {
            reduce_gain_matrix[idx * aligned_ckf + ckf_id] =  (crossCovMatrixSum[idx * aligned_ckf + ckf_id] / innCovMatrixSum[ckf_id]);
            init_state[idx * aligned_ckf + ckf_id] =    reduce_gain_matrix[idx * aligned_ckf + ckf_id] * zk_diff[ckf_id] + x_k_f[idx* aligned_ckf + ckf_id];

        }

        for (int idx = 0 ; idx < dimx; idx++)
        {
            init_var[idx * aligned_ckf + ckf_id ] = covMatrixSum[(idx * dimx + idx) * aligned_ckf + ckf_id] - 
                reduce_gain_matrix[idx * aligned_ckf + ckf_id] * innCovMatrixSum[ckf_id] *
                reduce_gain_matrix[idx * aligned_ckf + ckf_id];

        }

        double det_zkinin = zk_diff[ckf_id] * zk_diff[ckf_id] * (1.0f /innCovMatrixSum[ckf_id]);

        if (innCovMatrixSum[ckf_id] <= 0)
            llk[ckf_id] = 0;
        else
            llk[ckf_id] = 0.5 * ((log(innCovMatrixSum[ckf_id])) + 
                                 det_zkinin + log((2.0) * 3.14));

        cummulative[ckf_id] += llk[ckf_id];
    }

}
cl_device_fp_config cfg;
clGetDeviceInfo(device, CL_DEVICE_DOUBLE_FP_CONFIG, sizeof(cfg), &cfg, NULL);
printf("Double FP config = %llu\n", cfg);