OpenCL图像读取无法动态分配的数组

时间:2016-11-13 05:40:18

标签: opencl

我正在编写一个在图像上应用卷积矩阵的OpenCL程序。如果我将所有像素存储在数组image[height*width][4](第65行,评论)(抱歉,我说西班牙语,我的代码主要使用西班牙语),一切正常。但是,由于我正在使用的图像非常大,我需要动态分配内存。我执行代码,我收到Segmentation fault错误。

在一些穷人的调试之后,我发现在执行内核并将输出图像读回主机后出现问题,将数据存储到动态分配的数组中。我只是无法获取错误而无法访问数组的数据。

我认为问题在于clEnqueueReadImage函数(第316行)将图像数据写入image数组的方式。此数组是动态分配的,因此它没有预定义的“结构”。

但我需要一个解决方案,我无法找到它,也无法在我自己或互联网上找到它。

C程序和OpenCL内核在这里: https://gist.github.com/MigAGH/6dd0fddfa09f5aabe7eb0c2934e58cbe

1 个答案:

答案 0 :(得分:0)

不要使用指针指针(unsigned char **)。改为使用常规指针:

unsigned char* image = (unsigned char*)malloc(sizeof(unsigned char)*ancho*alto*4);

然后在for循环中:

for(i=0; i<ancho*alto; i++){
    unsigned char* pixel = (unsigned char*)malloc(sizeof(unsigned char)*4);
    fread (pixel, 4, 1, bmp_entrada);
    image[i*4] = pixel[0];
    image[i*4+1] = pixel[1];
    image[i*4+2] = pixel[2];
    image[i*4+3] = pixel[3];
    free(pixel);
}