Firefly开源社区

标题: RK3588开发板 openCV调用openCL运行时失败,Status -11: CL_BUILD_PROGRAM_FAILURE... [打印本页]

作者: Williamboy    时间: 2022-9-26 11:03
标题: RK3588开发板 openCV调用openCL运行时失败,Status -11: CL_BUILD_PROGRAM_FAILURE...
本帖最后由 Williamboy 于 2022-9-26 11:06 编辑

RK3588S 开发板,Ubuntu 20.04.5 LTS, 系统信息

  1. <div>$ cat /proc/version
  2. </div><div>Linux version 5.10.66 (daijh@8d391e97ab54) (kernel commit id: fa94ece7080f) (sdk version: rk3588_linux_release_20220812_v1.0.1b) (aarch64-none-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29)) 10.3.1 20210621, GNU ld (GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29)) 2.36.1.20210621) #155 SMP Fri Aug 12 10:03:43 CST 2022</div>
复制代码
OpenCV4.6
OpenCL 安装/设备/驱动正常OpenCL2.1

  1. <div>$clinfo
  2. Number of platforms                               1
  3.   Platform Name                                   ARM Platform
  4.   Platform Vendor                                 ARM
  5.   Platform Version                                OpenCL 2.1 v1.g6p0-01eac0.efb75e2978d783a80fe78be1bfb0efc1
  6.   Platform Profile                                FULL_PROFILE
  7.   Platform Extensions                  ...</div><div>.......</div>
复制代码

OpenCV调用OpenCL C++测试代码如下:
  1. void calcEdgesGPU()
  2. {
  3.     std::cout << "****** Use GPU imag processing ******"  << std::endl;

  4.     cv::ocl::setUseOpenCL(true);

  5.     bool ret1 = cv::ocl::haveOpenCL();
  6.     bool ret2 = cv::ocl::useOpenCL();
  7.     std::cout << "haveOpenCL:" << ret1 << std::endl;
  8.     std::cout << "useOpenCL:" << ret2 << std::endl;

  9.     double start = cv::getTickCount();
  10.     cv::UMat gpuFrame, gpuGray, gpuBlur, gpuEdges;
  11.     cv::Mat cpuFrame = cv::imread(IMAGE_PATHNAME);
  12.     cpuFrame.copyTo(gpuFrame); //Mat与UMat相互转换

  13.     cvtColor(gpuFrame, gpuGray, cv::COLOR_BGR2GRAY);
  14.     cv::GaussianBlur(gpuGray, gpuBlur, cv::Size(3, 3), 15, 15);
  15.     cv::Canny(gpuBlur, gpuEdges, 50, 100, 3);
  16.     std::vector<cv::Vec3f> cir;
  17.     cv::HoughCircles(gpuBlur, cir, cv::HOUGH_GRADIENT_ALT, 1.5, 15, 300, 0.8, 1, 100);

  18.     std::cout << "GPU cost time:(s)" << ((cv::getTickCount() - start) / cv::getTickFrequency()) << std::endl;

  19.     cv::Mat matResult = gpuEdges.getMat(cv::ACCESS_READ); //Mat与UMat相互转换
  20.     cv::namedWindow("Canny Edges GPU1", cv::WINDOW_NORMAL);
  21.     cv::imshow("Canny Edges GPU1", matResult);

  22.     cv::namedWindow("Canny Edges GPU2", cv::WINDOW_NORMAL);
  23.     cv::imshow("Canny Edges GPU2", gpuEdges);
  24. }
复制代码







编译正常,运行报错:
Status -11: CL_BUILD_PROGRAM_FAILURE


  1. ****** Use GPU imag processing ******
  2. haveOpenCL:1
  3. useOpenCL:1
  4. OpenCL program build log: imgproc/color_rgb
  5. <u>Status -11: CL_BUILD_PROGRAM_FAILURE</u>
  6. -D depth=0 -D scn=3 -D PIX_PER_WI_Y=1 -D dcn=1 -D bidx=0 -D STRIPE_SIZE=1
  7. <built-in>:167:9: error: expected member name or ';' after declaration specifiers
  8. int32_t depth;             /**< The image depth. */
  9. ~~~~~~~ ^
  10. <built-in>:1:15: note: expanded from here
  11. #define depth 0
  12.               ^

  13. <built-in>:167:8: error: expected ';' at end of declaration list
  14. int32_t depth;             /**< The image depth. */
  15.        ^

  16. error: Compiler frontend failed (error code 62)

  17. GPU cost time:(s)0.350019
复制代码



请问RK3588的GPU支持OPENCL吗?有人有同样的问题吗?
求救!
求救!!
求救!!!

SOS!
SOS!!
SOS!!!



tchip_askquestions

opencl-error-log.txt

640 Bytes, 下载次数: 3, 下载积分: 灯泡 -1 , 经验 -1


作者: Williamboy    时间: 2022-9-27 10:58
这个文件就编译没通过。。。

OpenCL program build log: imgproc/color_rgb
Status -11: CL_BUILD_PROGRAM_FAILURE
作者: wx__wq5wRK    时间: 2022-11-20 16:24
Williamboy 发表于 2022-9-27 10:58
这个文件就编译没通过。。。

OpenCL program build log: imgproc/color_rgb

请问rk3588可以使用opencl吗
作者: 启东    时间: 2023-5-27 09:34
一模一样的问题,解决了吗?跪求解决方案
作者: sprintf    时间: 2023-8-17 16:04
opencv是怎么编译的
作者: qq394060021    时间: 2023-10-22 12:54
我也是同样的问题, 有人能给出一个解决方案或者思路嘛
作者: jacq    时间: 2023-11-29 12:21
如果你是想用ocl加速remap,修改/modules/imgproc/src/imgwarp.cpp文件里的ocl_remap函数
1:把函数里的int depth变量换个名字,比如s_depth, 把这个函数里用到的depth都换成s_depth
2:还是在这个函数里找到buildOptions,都换成s_depth,包括字符串参数
buildOptions += format(" -D T=%s -D T1=%s -D cn=%d -D ST=%s -D s_depth=%d",
                           ocl::typeToStr(type), ocl::typeToStr(s_depth),
                           cn, ocl::typeToStr(sctype), s_depth);
我这里gpu使用成功,cpu负载很低
cat /sys/class/devfreq/fb000000.gpu/load
23@500000000Hz




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1