我在OpenCL内核中有错误,当我尝试使用cl_khr_fp64扩展时,内核编译并且构建日志为空,但是当我调用时clCreateKernel,我有CL_INVALID_KERNEL_NAME错误.
失败的来源:
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
__kernel void simple( __global char *x, __global char *y ){
int id = get_global_id(0);
y[id]=2*x[id];
}
Run Code Online (Sandbox Code Playgroud)
这个源编译正确:
__kernel void simple( __global char *x, __global char *y ){
int id = get_global_id(0);
y[id]=2*x[id];
}
Run Code Online (Sandbox Code Playgroud)
我正在使用OpenCL 1.0和Tesla C1060,它在CL_DEVICE_EXTENSIONS中有cl_khr_fp64,驱动程序280.13和CL_PLATFORM_VERSION = OpenCL 1.1 CUDA 4.0.1
问题是,在调用 clCreateProgramWithSource 之前,我们从源中删除了换行符。例如:来源:
"__kernel void f( __global char *x ){\nint id = get_global_id(0);\nx[id]=2;\n}"
Run Code Online (Sandbox Code Playgroud)
变成:
"__kernel void simple( __global char *x, __global char *y ){"
"int id = get_global_id(0);"
"x[id]=2;}"
Run Code Online (Sandbox Code Playgroud)
在我们添加预处理器指令之前,它不会引起任何问题。
OpenCL 预处理器实际上希望换行符存在。所以,应该写成:
"__kernel void simple( __global char *x, __global char *y ){\n"
"int id = get_global_id(0);\n"
"x[id]=2;}\n"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5057 次 |
| 最近记录: |