NXP MCU 技术william hill官网
直播中

唯爱萌meng

9年用户 1017经验值
擅长:可编程逻辑
私信 关注
[问答]

OpenCL不能在i.MX8M平台上与OpenCV一起工作是为什么?

我正在使用基于 i.MX8M 的平台和 Vivante GC7000Lite GPU。(来自 Variscite 的 DART-MX8M)我正在尝试运行 OpenCL 加速的 OpenCV 示例代码,但我没有得到我期望的结果,想知道是否缺少某些信息。例如,如果我尝试 opencv_test_optflow:

$ /usr/bin/opencv_test_optflow

[ WARN:0] 使用全球可访问的缓存目录。这可能不安全:/var/tmp/
[INFO:0] 已成功初始化 OpenCL 缓存目录:/var/tmp/opencv/3.4.0/opencl_cache/
[INFO:0] 正在为上下文准备 OpenCL 缓存配置:32 位--Vivante_Corporation--Vivante_OpenCL_Device_GC7000L_6214_0000--OpenCL_1_2_V6_2_4_p1_150331
调用期间 OpenCL 错误 CL_INVALID_WORK_GROUP_SIZE (-54):clEnqueueNDRangeKernel('sobel3', dims=2, globalsize=592x400 x1, localsize=16x16x1) sync=false OpenCL 错误 CL_INVALID_WORK_GROUP_SIZE (-54) 在调用期间
: clEnqueueNDRangeKernel('maxEigenVal', dims=1, globalsize=4096x1x1, localsize=1024x1x1) sync=false
调用期间 OpenCL 错误 CL_INVALID_WORK_GROUP_SIZE (-54):clEnqueueNDRangeKernel('pyrDown', dims=2, globalsize=768x97x1, localsize=256x1x1) sync=false 调用期间 OpenCL 错误 CL_INVALID_WORK_GROUP_SIZE (-54):clEnqueueNDRangeKernel('pyrDown',暗淡=
2 , globalsize=768x97x1, localsize=256x1x1) sync=false
调用期间 OpenCL 错误 CL_INVALID_WORK_GROUP_SIZE (-54): clEnqueueNDRangeKernel('pyrDown', dims=2, globalsize=512x49x1, localsize=256x1x1) sync=false OpenCL 错误 CL_INVALID_WORK_GROUP_尺码 (-54
)通话期间:clEnqueueNDRangeKernel('pyrDown', dims=2, globalsize=512x49x1, localsize=256x1x1) sync=false
OpenCL 错误 CL_INVALID_WORK_GROUP_SIZE (-54) 通话期间:clEnqueueNDRangeKernel('pyrDown', dims=2, globalsize=256x25x1, localsize= 256x1x1) 同步=假
调用期间 OpenCL 错误 CL_INVALID_WORK_GROUP_SIZE (-54):clEnqueueNDRangeKernel('pyrDown', dims=2, globalsize=256x25x1, localsize=256x1x1) sync=false 调用期间 OpenCL 错误 CL_INVALID_WORK_GROUP_SIZE (-54):clEnqueueNDRangeKernel('pyrDown',暗淡=
2 , globalsize=768x97x1, localsize=256x1x1) sync=false
调用期间 OpenCL 错误 CL_INVALID_WORK_GROUP_SIZE (-54): clEnqueueNDRangeKernel('pyrDown', dims=2, globalsize=768x97x1, localsize=256x1x1) sync=false OpenCL 错误 CL_INVALID_WORK_GROUP_尺码 (-54
)调用期间:clEnqueueNDRangeKernel('pyrDown', dims=2, globalsize=512x49x1, localsize=256x1x1) sync=false
OpenCL 错误 CL_INVALID_WORK_GROUP_SIZE (-54) 调用期间:clEnqueueNDRangeKernel('pyrDown', dims=2, globalsize=512x49x1, localsize= 256x1x1) 同步=假
调用期间 OpenCL 错误 CL_INVALID_WORK_GROUP_SIZE (-54):clEnqueueNDRangeKernel('pyrDown', dims=2, globalsize=256x25x1, localsize=256x1x1) sync=false 调用期间 OpenCL 错误 CL_INVALID_WORK_GROUP_SIZE (-54):clEnqueueNDRangeKernel('pyrDown',暗淡=
2 , globalsize=256x25x1, localsize=256x1x1) sync=false
/usr/src/debug/opencv/3.4+gitAUTOINC+6d4f66472e_81ca8dab86_a62e20676a_34e4206aef_fccf7cd6a4-r0/contrib/modules/optflow/test/test_ OF_accuracy.cpp:236:
预期失败: (calcRMSE(GT , flow)) <= (target_RMSE), actual: 0.5805 vs 0.55
[ FAILED ] DenseOpticalFlow_PCAFlow.ReferenceAccuracy (65669 ms)
[--------] 来自 DenseOpticalFlow_PCAFlow 的 1 次测试(总共 65669 ms)



我不明白的是为什么返回 CL_INVALID_WORK_GROUP_SIZE。localsize 平均分为 global size。它小于全球规模。它小于 1024(最大工作组大小)。为什么会失败?如果我将 NULL 作为 localsize 传递给 clEnqueueNDRangeKernel 它可以工作,但这不是通用解决方案,因为我需要手动修改所有依赖于已知 localsize 的内核。在我看来,这似乎是底层平台中的一个潜在错误,无论是在 GPU 本身还是在 BSP 中。但是,libVivanteOpenCL 似乎是封闭源代码,因此我无法进一步调查。

更多回帖

发帖
×
20
完善资料,
赚取积分