nvidia GPU で OpenCL を使用していますが、カーネルを実行しようとすると CL_INVALID_KERNEL_ARGS が発生し続けます。私はそれを非常に単純なプログラムに落としました:
__kernel void foo(int a, __write_only image2d_t bar) { int 2 coords = {0, get_global_id(0)}; write_imagef(バー、座標、(float4)a); }
次の C プログラムを使用します (簡潔にするために、初期化ビットとエラー チェック ビットをスキップします)。
cl_kernel foo = clCreateKernel(program, "foo", &err); int a = 42; clSetKernelArg(foo, 0, sizeof(int), &a); cl_image_format fmt = {CL_INTENSITY, CL_FLOAT}; cl_mem バー = clCreateImage2D(ctx, CL_MEM_WRITE_ONLY|CL_MEM_ALLOC_HOST_PTR, &fmt, 100, 1, 0, NULL, &err)); clSetKernelArg(foo, 1, sizeof(cl_mem), &bar); size_t gws[] = {100}; size_t lws[] = {100}; cl_event イベント; clEnqueueNDRangeKernel(queue, foo, 1, NULL, gws, lws, 0, NULL, &evt); clFinish(キュー);
clEnqueueNDRangeKernel が CL_INVALID_KERNEL_ARGS を返し続けます。何か案は?