1.clEnqueueNDRangeKernel函数错误(Access violation reading location 0x000......... )
后来发现原来是设置参数的时候搞疏忽掉了:
mem = clCreateBuffer(context, CL_MEM_READ_WRITE, VectorLength, 0, &err);
clSetKernelArg(gpus[i].kernel, argIdx++, sizeof(cl_mem), mem);
这里的mem应当传递指针,而不是值,改成这样即可:
mem = clCreateBuffer(context, CL_MEM_READ_WRITE, VectorLength, 0, &err);
clSetKernelArg(gpus[i].kernel, argIdx++, sizeof(cl_mem), &mem);
这个问题只是疏忽和粗心导致的,而且它还不怎么好找到。