簡體   English   中英

如何在 gpu 支持(OpenCL)的情況下編譯和使用 GDAL?

[英]How to compile and use GDAL with gpu support(OpenCL)?

我嘗試使用 Nvidia GeForce 1060(安裝了 Cuda 工具包 10)在 Ubuntu 16 上編譯最新的 Gdal。 我還通過 apt-get 為 opencl 標頭安裝 package 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 根本沒有使用。 調試 output 中沒有使用信息 OpenCL。 與另一個命令相同的故事。 我還嘗試了 gdal2tiles.py - 沒有加速和使用 gpu。

幾年前,我用 gpu 編譯了 Gdal,而 gdal2tiles.py 用 opencl 工作得更快。

真心希望有人能分享一下編譯和使用gdal與gpu的經驗。

並非所有 GDAL 柵格方法都將使用 OpenCL。 如果我做和你一樣的例子,在我用 OpenCL 編譯的 GDAL 中,我沒有報告任何 OpenCL 使用情況。

time gdalwarp -t_srs EPSG:3857 001972Argb_12.tif x.tif -wo USE_OPENCL=TRUE -wt Float32 --debug on

output:

(...)
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

output:

(...)
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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM