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

需要

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

1、查看自己电脑的显卡配置支不支持OpenCL

方法很多,可以自行百度。我是下载TechPowerUp GPU-Z(点击链接进入下载页)查看OpenCL项目前有没打勾

opengles优化开关 opengl gpu加速_opengles优化开关


2、安装OpenCL

可以使用Intel,Nvidia官网都能下,也能用CUDA里带的。我用的Intel家的Intel® SDK for OpenCL,选择符合你本地系统的SDK下载(需要自行注册账号),安装。

安装过程没啥需要注意的,一路next,凭感觉勾选一些选项,最后会安装一个system studio到目标路径下,最关键的OpenCL SDK就在里边

opengles优化开关 opengl gpu加速_c++_02


3、下载GDAL源码

官网下载地址,看你的网络情况,可能需要挂梯子。这里可以选择3.X版本的或者2.X版本的,区别在于2.X版本不需要SQLite和PROJ依赖,如果选择3.X版本还需要额外安装这俩东西,安装方法见这个文章的相关内容。

注意! proj如果使用 OSGeo4W安装,不要下载9版本的,下载6版本的。9版本不再默认生成lib文件。如果你真的想用9版本,可以自己编译并设置BUILD_SHARED_LIBS选项。

下载压缩包,找个地方解压

opengles优化开关 opengl gpu加速_搜索_03


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

opengles优化开关 opengl gpu加速_SQL_04


搜索 CFLAGS,在该项赋值的代码等号右侧加上 $(OPENCL_FLAG)

opengles优化开关 opengl gpu加速_搜索_05

搜索EXTERNAL_LIBS,照上面在最后加上 $(OPENCL_LIB)

opengles优化开关 opengl gpu加速_OpenCL_06


修改alg目录下的makefile.vc,搜索OBJ,等号后加上 gdalwarpkernel_opencl.obj

opengles优化开关 opengl gpu加速_c++_07


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路径下生成如下几个包:

opengles优化开关 opengl gpu加速_OpenCL_08


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相关的日志输出,就成了

opengles优化开关 opengl gpu加速_c++_09


参考