基于Mali-T760的GPU使用opencv的ocl模块,总会报出相关globalThreads等线程数相关的bug。
通过源码阅读和分析,发现这跟ocl/src下面的源码,有些函数直接写死globalThreads和localThreads相关,因此,当报错时,需要打印kernelName,定位到具体源码文件和函数,然后修改源码,使得满足条件。
因为ocl模块下面的opencl中的核函数都是根据src下面源码默认数据修改的,所以当修改源码数据时,需要到相应.cl核函数中进行相应修改。
目前,针对这款GPU需要修改的有:
1.pyrdown.cpp 中pyrdown_run()中
size_t localThreads[3] = { 256, 1, 1 };
修改为
size_t localThreads[3] = { 128, 1, 1 };
需要修改opencl/pyrdown.cl中的相关源码,原来256线程并行,现在为128个
2.imgproc.cpp 中extractCovData():
const int sobel_lsz = 16;
修改为
const int sobel_lsz = 8;
3.imgproc.cpp 中corner_ocl():
size_t blockSizeX = 256, blockSizeY = 1;修改为
size_t blockSizeX = 128, blockSizeY = 1;
(持续补充)