hi,All,
我在编写openCL时调用clEnqueueMapBuffer,在其中blocking_map 是CL_TRUE,event_wait_list以及num_events_in_wait_list 都是NULL。却出现了CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST的错误,我查了一下引起该错误的原因是:
CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST if the map operation is blocking and the execution status of any of the events in event_wait_list is a negative integer value.
event_wait_list
但我的event_wait_list是NULL,根本没有值。该问题主要出现在mali-t760 上,而adreno 以及桌面GPU都没有出现类似的问题。不知是不是驱动bug?
Thx,
Phenix.
Hi Phenix,
I haven't encounter such kind of error before, I write a simple test, and run it on T760 and T604, both platforms cannot reproduce your problem. Would you please tell me how you create the buffer, and how you call clEnqueueMapBuffer, that would help me to locate the problem. Also, please tell me which driver version you are using. Thanks.
For clEnqueueMapBuffer(), please change the value of num_events_in_wait_list to 0, as the parameter type is cl_int, otherwise you'll get a warning.
BR,
Sheri
Hi Sheri
How to check arm mali driver version ?
Thanks
Pingyi
Hi Sheri,
In common, in what situation will cause an CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST error ?
Thanks,
Phenix
Hi Pingyi,
You can get driver version by the following command:
strings libGLES_mali.so | grep ".*Midgard-\""
libGLES_mali.so should be in /system/lib/egl or /system/vendor/lib/egl on the device.
Frank
Hi All,
在我把opencv ocl facedetect example 放在RK3288 Mali 上運行時都出現, 我發現用640x480圖連續11次做ocl facedetect沒問題, 但是用1698 × 1131圖 連續11次ocl facedetect時, 通常第4或5次時就會出現 CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST error (我在trace code 都是在clEnqueueMapBuffer CL_MAP_READ 時出問題, 返回值為!CL_SUCCESS)
我的clEnqueueMapBuffer 用法如下:
cl_int *map_buffer_candidate = (cl_int*)clEnqueueMapBuffer(qu , candidatebuffer , CL_TRUE, CL_MAP_READ, 0
, 4 * sizeof(int)*outputsz , 0, NULL, NULL, &st);
我的mali driver version為 1.4 Midgard-"r4p1-02dev0"
我想知道這問題會不會是mali driver 問題 ?
Tse Yi Ping
谢谢大家的回复,负责工程师正在出差中,回复可能有点慢,请大家见谅
这个不是bug, blocking map这类的顺序执行在我们的driver里面是通过internal dependency来实现的, 就算user没有create event,
我们也会在内部生成一个event, 挂在前面那个enqueue命令上. 所以这个failure说明用户之前有enqueue的kernel执行出错了.
可以检查一下之前是哪个出错的, 可以考虑用上events, 这样用户自己有explicit dependency, 比较方便找出是哪个出错了.
谢谢,已经找到是某个kernel 出现错误,但这个kernel 在其他平台gpu上可以运行(AMD,adreno),在mali上运行的不是很顺利。请问下,对于local memory,mali gpu 支持吗?有些时候我把local memory 改掉在mali就能运行。
Hi phenix,
你好, 我想請問一下, 你用的ARM Board 是什麼model SOC..
你好,
我们是在用三星s6做测试的,其它如金立 GN9006 出现同样问题。
zhouzhan
我想請教一下, 你說在kernel code 去掉local memory的意思,是不是把__local 去掉, 對嗎, 還有一個問題, 你有沒有試過把opencv ocl 放上arm mali T768.
Hi Phenix,
Mali支持local memory,不过对于mali来说,local memory和global memory的性能是一样的,所以如果是基于性能考虑的话,可以直接用global memory代替local memory。另外,local memory的大小是有限制的,可以通过调用clGetDeviceInfo(, CL_DEVICE_LOCAL_MEM_SIZE, )来获得当前设备支持的local memory大小。
BR,
谢谢,这个我明白的,主要是为了可以利用其它gpu的local memory.
你有没有一个简单的kernel原型,比如参数是什么,做了哪些操作,可以让我这边也可以重现你的问题,做进一步的分析。谢谢!
Hi Tse Yi Ping,
不知道你的问题是否已经得到解决,没有的话,我会继续跟进你说的这个问题。或者,可以告诉我具体是哪个kernel处问题了,我可以有针对性地看一下问题在哪里。谢谢!