OpenCLでは完全に緑色です。私はインテルのウェブサイトでサンプルを入手しようとしていますが、できません。 This is the sample。CLSetKernelArgがCL_INVALID_MEM_OBJECTを返します。
ので、同じようclSetKernelArgに整数の引数を渡そうとしたとき、私は、エラーCL_INVALID_MEM_OBJECTを取得しています:
err = clSetKernelArg(ocl->kernel, 2, sizeof(cl_mem), (void *)&width);
if (CL_SUCCESS != err)
{
LogError("Error: Failed to set argument dstMem, returned %s\n", TranslateOpenCLError(err));
return err;
}
チュートリアルは、画像上で動作するようになって、特に引数のような設定されるべきであると述べています:ここでは
err |= clSetKernelArg(ocl->kernel, 2, sizeof(cl_mem), (void *) &width);
err |= clSetKernelArg(ocl->kernel, 3, sizeof(cl_mem), (void *) &height);
は、フル機能である:
cl_uint SetKernelArguments(ocl_args_d_t *ocl, cl_uint width, cl_uint height)
{
cl_int err = CL_SUCCESS;
err = clSetKernelArg(ocl->kernel, 0, sizeof(cl_mem), (void *)&ocl->srcA);
if (CL_SUCCESS != err)
{
LogError("error: Failed to set argument srcA, returned %s\n", TranslateOpenCLError(err));
return err;
}
err = clSetKernelArg(ocl->kernel, 1, sizeof(cl_mem), (void *)&ocl->dstMem);
if (CL_SUCCESS != err)
{
LogError("Error: Failed to set argument dstMem, returned %s\n", TranslateOpenCLError(err));
return err;
}
err = clSetKernelArg(ocl->kernel, 2, sizeof(cl_uint), (void *)&width);
if (CL_SUCCESS != err)
{
LogError("Error: Failed to set argument dstMem, returned %s\n", TranslateOpenCLError(err));
return err;
}
err = clSetKernelArg(ocl->kernel, 3, sizeof(cl_mem), (void *)&height);
if (CL_SUCCESS != err)
{
LogError("Error: Failed to set argument dstMem, returned %s\n", TranslateOpenCLError(err));
return err;
}
return err;
}
最後の注記:clSetKernelArgのサイズをsizeof(cl_uint)に変更すると、エラーがCL_INVALID_ARG_SIZEに変更されます。
これでは不十分な場合は、ソースをgithub hereに公開しています。
私はチュートリアルの指示によく従っていましたが、私が逃したかもしれないものを理解することはできません。御時間ありがとうございます。
あなたはカーネル関数の引数は、このような* __global intとして喜ば書くことができます... –