Hi,
我把opencv OpenCL face detect example 運行在ARM mali T768 後,有以下error message :
OpenCL Error Message (Haar face detection):
OpenCV Error: Gpu API call (CL_INVALID_EVENT_WAIT_LIST) in void cv::ocl::openCLReadBuffer(cv::ocl::Context*, cl_mem, void*, size_t), file /home/dennylai/DennyLai/opencv_build_arm_ping/modules/ocl/src/cl_operations.cpp, line 107
terminate called after throwing an instance of 'cv::Exception'
what(): /home/dennylai/DennyLai/opencv_build_arm_ping/modules/ocl/src/cl_operations.cpp:107: error: (-217) CL_INVALID_EVENT_WAIT_LIST in function void cv::ocl::openCLReadBuffer(cv::ocl::Context*, cl_mem, void*, size_t)
注意:
這error 是在, 成功呼叫clEnqueueNDRangeKernel後, 再呼叫clEnqueueMapBuffer 出現。
kernel error message:
<4>[20660.510046] mali ffa30000.gpu: Failed to map memory on GPU
<4>[20662.175808] mali ffa30000.gpu: Failed to map memory on GPU
<4>[20663.583743] mali ffa30000.gpu: JS: Job Hard-Stopped (took more than 2 ticks at 50 ms/tick)
<4>[20663.583860] mali ffa30000.gpu: error detected from slot 1, job status 0x00000004 (TERMINATED)
<3>[20663.583907] mali ffa30000.gpu: t6xx: GPU fault 0x04 from job slot 1
我發現每次程式自動退出前, kernel driver 都會出現"JS: Job Hard-Stopped (took more than 2 ticks at 50 ms/tick)" 和 “gpu: error detected from slot 1, job status 0x00000004 (TERMINATED)", 嘗試在mali kernel driver 上把 KBASE_DISABLE_SCHEDULING_SOFT_STOPS和KBASE_DISABLE_SCHEDULING_HARD_STOPS都設為1, 測試一晚都沒有出現問題。
有我以下一些問題:
1。KBASE_DISABLE_SCHEDULING_SOFT_STOPS 和 KBASE_DISABLE_SCHEDULING_HARD_STOPS 是什意思, 在gpu 中的job manager 是不是對每個kernel queue 有一個最長運行時間限制?
2。我看過arm mali OpenCL sdk example code, clEnqueueNDRangeKernel 中沒有使用local_work_size 參數, 是不是 arm mali 不支持。
3。我在用DS-5 streamline 去看mali gpu , 發現只可以看到“GPU Fragment, GPU Vertex-Compute, GPU Vertex-Tiling-Compute", 但是看不到Mali Midgard Job Manager , 是不是要kernel driver 支持?
Thanks
Tse Yi Ping
Hi tseyiping,
以下是对你问题的一些解答,希望对你有帮助:
1. 针对这个问题,我想先知道一下其他方面的信息。你的OpenCV用的是什么版本?今年年初以来,OpenCV针对CL做了大量的改进;前几周,我们剑桥那边的同事刚刚做过测试,所有的cl test都可以pass。你可不可以使用git master上面的内容试试,我们再来看看结果如何。
2. Mali是支持local_work_size的,sample code里面没有的话就是driver自己会去指定一个值,不过这个通常不是最优的。
3. 如果你要用DS-5看Mali Midgard Job Manager的话,需要自己去改一下configuration。在capture按钮的旁边,有一个按钮叫做Counter Configuration,你可以在里面找到你所需要的Job Manager的信息。
BR,
Sheri
Hi Sheri,
1.我是用opencv 2.4.10.2 在RK3288上運行,關於你說opencv git master 版本,明天我會試試,晚些把結果告訴你。
3.關於job manager問題,我已經在Counter configuration 中選了的Mali Job Manager work JS0, JS1 , JS2的信息,但是JS0, JS1 ,JS2都没有信息輸出。
Thankd
Hi tseyiping,
我尝试了一下捕捉Mali Job Manager work JS0, JS1 , JS2的信息,其中JS2 tasks里面是有数据的,我用的是DS-5 5.19.0,不知道你那边用的什么版本。关于更多Mali HW Counter的信息,你可以参考下面的链接:Mali Midgard Family Performance Counters
BR,
Hi Sheri
我用是DS-5 5.20.2版本。
thanks
除了Mali Job Manager work JS0, JS1 , JS2没有信息,其他的如何,可不可以把你抓到的数据截个图给我看一下?你的DS5版本和gator版本一致吗,有时候不一样,会有些问题。
附件圖中, Mali Job Manager Cycle 和Mali Job Manager Work 沒有輸出圖。
我在你的截图里面,我只看到了JS0,对于OpenCL来了,通常用到是JS1/JS2,你可以把这两个都加进去再尝试一下。关于JS0、JS1、JS2的说明在Mali Midgard Family Performance Counters里面比较详细。
麻烦你告诉我一下你用的平台,DDK版本,我尝试搭个环境测试一下,谢谢!
tseyiping,
那个OpenCV的测试进行的怎么样了?
我前幾天,本來打算在OpenCV git master branch 試, 但發覺opencv 2.4.10 和opencv master branch (應該是opencv 3.0 以後的版本)在結構已經有很大不同, 我以前在opencv 2.4.10上修改代碼, 在maser branch 不這適合用。我需要間去修改。 不如你把這問題close .
好的,我知道了,那等你改好之后,我们再来看这个问题好了。
你好, 是用RK3288(我只有RK3288 給kernel source and android source) , 我不知道怎樣去看DDK版本.
我找到一个RK3288的平台,尝试运行了一下DS5,结果如下:DDK r5p1, DS5 5.21, JS0/JS1/JS2 里面是有信息的
所以,我想请你做以下尝试:
1.尝试一下用5.21/5.21.1的版本,看看是否还有同样的问题。
2.把你编译gatore的config信息发给我看看,确认一下选择的分支是否正确。
3.尝试抓取更多hardware counter的信息,看看是否还有其他问题,还是仅仅只有这三个有问题。
4.community里面有几篇详细的文档Using DS-5 Streamline with Mali on Samsung Galaxy Note 4,描述编译gator,可以参考一下。
关于DDK的版本信息,你可以通过下面的命令获得:
strings libGLES_mali.so | grep ".*Midgard-\""
libGLES_mali.so 应该在 /system/lib/egl或者/system/vendor/lib/egl目录下面。