GDAL使用OpenCL开启GPU加速

GDAL可以借助OpenCL,对特定重采样方法(只记得最邻近不行,三次卷积可以,双线性忘了),使用GPU提升计算效率

需要

  • GDAL源码
  • OpenCL
  • Visual Studio
  • SQLite(可选)
  • PROJ(可选)

1、查看自己电脑的显卡配置支不支持OpenCL
方法很多,可以自行百度。我是下载TechPowerUp GPU-Z(点击链接进入下载页)查看OpenCL项目前有没打勾
在这里插入图片描述
2、安装OpenCL
可以使用Intel,Nvidia官网都能下,也能用CUDA里带的。我用的Intel家的Intel® SDK for OpenCL,选择符合你本地系统的SDK下载(需要自行注册账号),安装。
安装过程没啥需要注意的,一路next,凭感觉勾选一些选项,最后会安装一个system studio到目标路径下,最关键的OpenCL SDK就在里边
在这里插入图片描述
3、下载GDAL源码
官网下载地址,看你的网络情况,可能需要挂梯子。这里可以选择3.X版本的或者2.X版本的,区别在于2.X版本不需要SQLite和PROJ依赖,如果选择3.X版本还需要额外安装这俩东西,安装方法见这个文章的相关内容。
注意! proj如果使用 OSGeo4W安装,不要下载9版本的,下载6版本的。9版本不再默认生成lib文件。如果你真的想用9版本,可以自己编译并设置BUILD_SHARED_LIBS选项。
下载压缩包,找个地方解压
在这里插入图片描述
4、修改GDAL源码
这里默认你安装的2.X版本或者已经按照第三步链接里的教程安装好了SQLite和PROJ并在源码里做了相应配置。
使用文本编辑软件打开nmake.opt,修改GDAL_HOME的值,修改为你希望打包到的路径

GDAL_HOME = "C:\programs\GDAL\gdal-3.5.0-build"

搜索 END OF STUFF THAT NORMALLY NEEDS TO BE UPDATED ,在该行前面添加以下代码

# Uncomment for OPENCL_AMD support
!IFDEF INCLUDE_OPENCL
OPENCL_DIR="C:\Program Files (x86)\IntelSWTools\system_studio_2020\OpenCL\sdk"
OPENCL_CFLAGS = -I$(OPENCL_DIR)/include -DHAVE_OPENCL
OPENCL_LIB    = $(OPENCL_DIR)/lib/x64/OpenCL.lib
!ELSE
OPENCL_DIR=
OPENCL_CFLAGS = -I
OPENCL_LIB     = 
!ENDIF

其中OPENCL_DIR指向你的OpenCL sdk路径,下面的OPENCL_LIB是从OPENCL_DIR到OpenCL.lib文件的相对路径。
然后在上面那行代码(END OF STUFF THAT NORMALLY NEEDS TO BE UPDATED)的下面添加下面的代码

# liml
!IFDEF INCLUDE_OPENCL
OPENCL_FLAG = -DHAVE_OPENCL
!ENDIF

在这里插入图片描述
搜索 CFLAGS,在该项赋值的代码等号右侧加上 $(OPENCL_FLAG)
在这里插入图片描述

搜索EXTERNAL_LIBS,照上面在最后加上 $(OPENCL_LIB)
在这里插入图片描述
修改alg目录下的makefile.vc,搜索OBJ,等号后加上 gdalwarpkernel_opencl.obj
在这里插入图片描述
5、编译
找到VS的x64 Native Tools Command Prompt for VS 2022,右键使用管理员运行,cd到你的gdal包,依次运行以下命令

nmake /f makefile.vc clean
nmake /f makefile.vc
nmake /f makefile.vc install
nmake /f makefile.vc devinstall

若无报错,会在你设置的GDAL_HOME路径下生成如下几个包:
在这里插入图片描述
6、测试
cd到上面生成的bin目录下,使用amd运行测试语句,参数里坐标参考和文件路径看着改

gdalwarp -t_srs EPSG:3857 C:\test.tif C:\test_out.tif -wo USE_OPENCL=TRUE -wt Float32 --debug on -r cubic

若出现OpenCL相关的日志输出,就成了
在这里插入图片描述
参考

  • https://blog.51cto.com/u_15469043/4892922
  • https://blog.csdn.net/qq_46209262/article/details/123489785
  • https://blog.csdn.net/Icesteam/article/details/112055345
  • https://blog.csdn.net/xiaozy12/article/details/108843224
  • https://www.javaer101.com/en/article/49652084.html
  • https://stackoverflow.com/questions/62439753/how-to-compile-and-use-gdal-with-gpu-supportopencl
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 rk3588 上使用 OpenCV 进行 GPU 加速,可以使用 OpenCL 接口来调用 GPU。 以下是在 rk3588 上使用 OpenCV 进行 GPU 加速的基本步骤: 1. 确保已经安装了 OpenCL 库和驱动。可以通过 `ls /usr/lib/aarch64-linux-gnu/libOpenCL.so` 命令检查是否已经安装了 OpenCL 库。 2. 下载 OpenCV 源代码,并在下载的源代码目录中创建一个新目录 `build`。 3. 进入 `build` 目录,运行以下命令配置编译选项: ``` cmake -DWITH_OPENCL=ON -DWITH_OPENMP=OFF -DWITH_TBB=OFF -DWITH_IPP=OFF -DWITH_LAPACK=OFF -DWITH_EIGEN=OFF -DWITH_CUDA=OFF -DWITH_PROTOBUF=OFF -DWITH_GTK=OFF -DWITH_QT=OFF -DWITH_VTK=OFF -DWITH_GDAL=OFF -DWITH_XINE=OFF -DWITH_AVFOUNDATION=OFF -DWITH_OPENEXR=OFF -DWITH_WEBP=OFF -DWITH_JASPER=OFF -DWITH_JPEG=ON -DWITH_PNG=ON -DWITH_TIFF=ON -DWITH_ZLIB=ON -DWITH_FFMPEG=ON -DWITH_GSTREAMER=OFF .. ``` 4. 运行以下命令编译 OpenCV: ``` make -j4 ``` 5. 在 OpenCV 中启用 OpenCL。在代码中添加以下代码: ``` cv::ocl::setUseOpenCL(true); ``` 6. 在代码中使用 OpenCL 接口调用 GPU 进行加速。例如: ``` cv::UMat src, dst; cv::Mat src_host = cv::imread("input.jpg", cv::IMREAD_COLOR); src_host.copyTo(src); cv::ocl::oclMat ocl_src(src), ocl_dst; cv::ocl::Kernel kernel("my_kernel", cv::ocl::imgproc::ocl::cvtColor_oclsrc, cv::ocl::imgproc::ocl::cvtColor_oclsrc_len); kernel.args(cv::ocl::KernelArg::ReadOnlyNoSize(src), cv::ocl::KernelArg::WriteOnly(dst)); size_t globalThreads[3] = { src.cols, src.rows, 1 }; size_t localThreads[3] = { 16, 16, 1 }; cv::ocl::enqueueKernel(kernel, 2, globalThreads, localThreads); ocl_dst.download(dst); cv::Mat dst_host(dst); cv::imwrite("output.jpg", dst_host); ``` 这样,就可以在 rk3588 上使用 OpenCV 进行 GPU 加速,并通过 OpenCL 接口调用 GPU 进行加速

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值