私は、MacのOpenCLコードをNVIDIA Tesla K20cカードを搭載したLinuxボックスに変換しており、単純なカーネルを構築するときに悩まされています。OpenCL無効なカーネル名
const char* srccode = kernel;
cl_program program = clCreateProgramWithSource(context, 1, &srccode, NULL, &err);
err = clBuildProgram(program, 0, NULL, NULL, NULL, NULL);
kernel = clCreateKernel(program, "diff", &err);
clBuildProgram
戻りCL_SUCCESS
とclBuildProgramInfo
からのログは空ですが、clCreateKernel
戻りCL_INVALID_KERNEL_NAME
:
char kernel[1024] =
"#pragma OPENCL EXTENSION cl_khr_fp64: enable \
\
kernel void diff(global double* u, \
int N, \
double dx, \
global double* du) \
{ \
size_t i = get_global_id(0); \
int ip = (i+1)%N; \
int im = (i+N-1)%N; \
du[i] = (u[ip] - u[im])/dx/2.; \
}";
私はこれを呼び出す:私のカーネルのコードはこれです。どんな考え?私はこれをしばらく叩いていて何も見つけることができません。すべての倍精度浮動小数点数を変更してプラグマを削除すると、問題はなくなり、正しく動作します。プラグマは責任があるのですか?もしそうなら、私はそれを正しく行うにはどうすればいいですか?
同じエラーが発生した場合は、プラグマを削除するだけで、デバイスコンパイラの適切な改行文字(プログラミング環境とは異なる可能性があります)が検索されます。 –