我尝试使用Nvidia GeForce 1060在Ubuntu 16上编译最新的Gdal(已安装Cuda工具包10)。我也通过apt-get为opencl标头安装软件包nvidia-opencl-dev
./configure --with-python=python3 --with-spatialite --with-pg --with-cryptopp --with-curl --with-opencl=yes --with-proj=/usr/local --prefix=/usr --with-opencl-include="/usr/local/cuda-10.0/targets/x86_64-linux/include/CL/" --with-opencl-lib="/usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1 -lOpenCL"
所有文件和目录的路径均正确
配置后,我检查了OpenCL支持 OpenCL支持:是
编译器没有显示错误。一切似乎都很好。
但是当我开始执行命令时,没有切换到视频卡 我这样尝试过
time gdalwarp -t_srs EPSG:4326 1.tif 2.tif --debug on
还有这个
time gdalwarp -t_srs EPSG:4326 1.tif 3.tif -wo USE_OPENCL=TRUE --debug on
Nvidia-smi显示完全不使用gpu。在调试输出中没有使用信息OpenCL。 与另一个命令相同的故事。我也尝试过gdal2tiles.py-没有加速和使用gpu。
几年前,我使用gpu和gdal2tiles.py编译了Gdal。使用opencl可以更快地工作。
我真的希望有人能与gpu分享编译和使用gdal的经验。
答案 0 :(得分:0)
并非所有 GDAL 栅格方法都将使用 OpenCL。如果我做和你一样的例子,在我用 OpenCL 编译的 GDAL 中,我没有报告任何 OpenCL 使用情况。
time gdalwarp -t_srs EPSG:3857 001972Argb_12.tif x.tif -wo USE_OPENCL=TRUE -wt Float32 --debug on
输出:
(...)
80GDAL: GDALWarpKernel()::GWKNearestNoMasksOrDstDensityOnlyFloat() Src=3987,7505,2012x1260 Dst=4005,7529,2002x1255
.GDAL: GDALWarpKernel()::GWKNearestNoMasksOrDstDensityOnlyFloat() Src=5994,7511,2006x1260 Dst=6007,7529,2003x1255
.GDAL: GDALWarpKernel()::GWKNearestNoMasksOrDstDensityOnlyFloat() Src=0,8746,1980x1254 Dst=0,8784,2002x1255
.90GDAL: GDALWarpKernel()::GWKNearestNoMasksOrDstDensityOnlyFloat() Src=1975,8752,2013x1248 Dst=2002,8784,2003x1255
.GDAL: GDALWarpKernel()::GWKNearestNoMasksOrDstDensityOnlyFloat() Src=3983,8759,2012x1241 Dst=4005,8784,2002x1255
.GDAL: GDALWarpKernel()::GWKNearestNoMasksOrDstDensityOnlyFloat() Src=5991,8764,2009x1236 Dst=6007,8784,2003x1255
.100 - done.
GDAL: Flushing dirty blocks: 0...10...20...30...40...50...60...70...80...90...100 - done.
GDAL: GDALClose(x.tif, this=0x55f28d7cf530)
GDAL: GDALClose(001972Argb_12.tif, this=0x55f28d5a2b90)
DGNv8: Driver cleanup
real 0m2,411s
user 0m1,972s
sys 0m0,440s
但如果我请求对栅格进行 bicubic
重采样,例如,使用 OpenCL。
time gdalwarp -t_srs EPSG:3857 001972Argb_12.tif x.tif -wo USE_OPENCL=TRUE -wt Float32 --debug on -r cubic
输出:
(...)
80OpenCL: Found vendor='NVIDIA Corporation' / device='GeForce GTX 950M' (GPU implementation).
OpenCL: Connected to vendor='NVIDIA Corporation' / device='GeForce GTX 950M' (GPU implementation).
GDAL: GDALWarpKernel()::GWKOpenCLCase() Src=5992,7509,2008x1264 Dst=6007,7529,2003x1255
.OpenCL: Found vendor='NVIDIA Corporation' / device='GeForce GTX 950M' (GPU implementation).
OpenCL: Connected to vendor='NVIDIA Corporation' / device='GeForce GTX 950M' (GPU implementation).
GDAL: GDALWarpKernel()::GWKOpenCLCase() Src=0,8744,1982x1256 Dst=0,8784,2002x1255
.OpenCL: Found vendor='NVIDIA Corporation' / device='GeForce GTX 950M' (GPU implementation).
OpenCL: Connected to vendor='NVIDIA Corporation' / device='GeForce GTX 950M' (GPU implementation).
GDAL: GDALWarpKernel()::GWKOpenCLCase() Src=1973,8750,2017x1250 Dst=2002,8784,2003x1255
.90OpenCL: Found vendor='NVIDIA Corporation' / device='GeForce GTX 950M' (GPU implementation).
OpenCL: Connected to vendor='NVIDIA Corporation' / device='GeForce GTX 950M' (GPU implementation).
GDAL: GDALWarpKernel()::GWKOpenCLCase() Src=3981,8757,2016x1243 Dst=4005,8784,2002x1255
.OpenCL: Found vendor='NVIDIA Corporation' / device='GeForce GTX 950M' (GPU implementation).
OpenCL: Connected to vendor='NVIDIA Corporation' / device='GeForce GTX 950M' (GPU implementation).
GDAL: GDALWarpKernel()::GWKOpenCLCase() Src=5989,8762,2011x1238 Dst=6007,8784,2003x1255
..100 - done.
GDAL: Flushing dirty blocks: 0...10...20...30...40...50...60...70...80...90...100 - done.
GDAL: GDALClose(x.tif, this=0x562582674c60)
GDAL: GDALClose(001972Argb_12.tif, this=0x562582448bc0)
DGNv8: Driver cleanup
real 0m6,732s
user 0m3,563s
sys 0m3,088s
在调试日志中很明显,对于请求的重采样,使用了 OpenCL。