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:
@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user