Я новичок в CUDA и C, и я мог бы использовать некоторую помощь в следующем: я хочу передать массив C GpuMats в ядро CUDA:
Вот код моего ядра:
__global__
void disparityFromDiffMapsKernel(cuda::PtrStepSzi* differenceMapsArray,
int arraySize,
cuda::PtrStepSzi disparityMap){
int x = blockIdx.x * blockDim.x + threadIdx.x;
int y = blockIdx.y * blockDim.y + threadIdx.y;
//check if thread is inside the image
if(x > differenceMapsArray[0].cols || y > differenceMapsArray[0].rows){
return;
}
//do stuff
}
А вот код, где я инициализирую массив и вызываю ядро:
cuda::PtrStepSzi diffMaps[diffMapsSize];
for(int i = 0; i <= offset; i++){
cuda::GpuMat diffMap(leftImageGPU.size(),CV_32SC1);
cuda::PtrStepSzi diffMapPtr = diffMap;
diffMaps[i] = diffMapPtr;
}
disparityFromDiffMapsKernel<<<numBlocks,threadsPerBlock>>>(diffMaps,diffMapsSize,disparityImageGPU); //gpu mat is initialized before
Когда я запускаю этот код, я получаю следующую ошибку opencv:
OpenCV(3.4.1) Error: Gpu API call (an illegal memory access was encountered)
Буду очень признателен за любую помощь!