Set kernel argument size to a value > 0

For the case that map or fun is not used in the msr-file, the corresponding
call to the setKernelArg still needs a 2nd argument > 0, otherwise macOS crashes.
This commit is contained in:
2018-12-11 11:35:32 +01:00
parent 24604042e7
commit e6021eb6e3

View File

@ -76,7 +76,6 @@ int OpenCLChiSquareRuntime::compileProgram(std::string function, bool mlh) {
double OpenCLChiSquareRuntime::calculateSum(cl_mem data, int length) {
int ierr;
//calc number of threads per workgroup and nr of work groups
size_t work_size_sum = (size_t)blockSize_m;
@ -105,7 +104,7 @@ double OpenCLChiSquareRuntime::calculateSum(cl_mem data, int length) {
m_oclbase->ocl_setKernelArg(3, sizeof(int), &length);
m_oclbase->ocl_executeKernel(1, &work_items, &work_size_sum);
//read partial sums and free temp mempry
//read partial sums and free temp memory
m_oclbase->ocl_readData(tmp_ptr, partial_sums, sizeof(double)*work_groups);
m_oclbase->ocl_freeMemory(tmp_ptr);
@ -157,6 +156,7 @@ int OpenCLChiSquareRuntime::launchChiSquare(int fitType,
return ierr;
//set kernel args
size_t num=1;
m_oclbase->ocl_setKernelArg(0, sizeof(cl_mem), &cl_mem_data);
m_oclbase->ocl_setKernelArg(1, sizeof(cl_mem), &cl_mem_err);
m_oclbase->ocl_setKernelArg(2, sizeof(cl_mem), &cl_param);
@ -172,20 +172,23 @@ int OpenCLChiSquareRuntime::launchChiSquare(int fitType,
m_oclbase->ocl_setKernelArg(12, sizeof(double), &tau_m);
m_oclbase->ocl_setKernelArg(13, sizeof(double), &N0_m);
m_oclbase->ocl_setKernelArg(14, sizeof(double), &bkg_m);
m_oclbase->ocl_setKernelArg(15, sizeof(double)*numpar, NULL);
m_oclbase->ocl_setKernelArg(16, sizeof(double)*numfunc, NULL);
m_oclbase->ocl_setKernelArg(17, sizeof(int)*nummap, NULL);
num = numpar; if (num == 0) num = 1;
m_oclbase->ocl_setKernelArg(15, sizeof(double)*num, NULL);
num = numfunc; if (num == 0) num = 1;
m_oclbase->ocl_setKernelArg(16, sizeof(double)*num, NULL);
num = nummap; if (num == 0) num = 1;
m_oclbase->ocl_setKernelArg(17, sizeof(int)*num, NULL);
if (ierr != DKS_SUCCESS)
return ierr;
} else if (fitType == FITTYPE_ASYMMETRY) {
//create kernel
ierr = m_oclbase->ocl_createKernel("kernelChiSquareAsymmetry");
if (ierr != DKS_SUCCESS)
return ierr;
//set kernel args
size_t num=1;
m_oclbase->ocl_setKernelArg(0, sizeof(cl_mem), &cl_mem_data);
m_oclbase->ocl_setKernelArg(1, sizeof(cl_mem), &cl_mem_err);
m_oclbase->ocl_setKernelArg(2, sizeof(cl_mem), &cl_param);
@ -200,9 +203,12 @@ int OpenCLChiSquareRuntime::launchChiSquare(int fitType,
m_oclbase->ocl_setKernelArg(11, sizeof(double), &timeStep);
m_oclbase->ocl_setKernelArg(12, sizeof(double), &alpha_m);
m_oclbase->ocl_setKernelArg(13, sizeof(double), &beta_m);
m_oclbase->ocl_setKernelArg(14, sizeof(double)*numpar, NULL);
m_oclbase->ocl_setKernelArg(15, sizeof(double)*numfunc, NULL);
m_oclbase->ocl_setKernelArg(16, sizeof(int)*nummap, NULL);
num = numpar; if (num == 0) num = 1;
m_oclbase->ocl_setKernelArg(14, sizeof(double)*num, NULL);
num = numfunc; if (num == 0) num = 1;
m_oclbase->ocl_setKernelArg(15, sizeof(double)*num, NULL);
num = nummap; if (num == 0) num = 1;
m_oclbase->ocl_setKernelArg(16, sizeof(int)*num, NULL);
if (ierr != DKS_SUCCESS)
return ierr;
@ -321,4 +327,3 @@ int OpenCLChiSquareRuntime::checkChiSquareKernels(int fitType, int &threadsPerBl
return ierr;
}