SARscape中Opencl安装说明
1、介绍
SARscape逐步采用通用图像处理器(GPGPU)技术,通过提高并行度来提高处理性能。我们的解决方案基于开放计算语言(OpenCL)框架,这是一个被大多数硬件制造商和软件开发人员广泛支持的开放标准。
要使用SARscape,机器上需要有可用的OpenCL 1.2 runtime。
OpenCL runtime是一种第三方软件包,允许在目标机器上运行的应用程序通过所选的OpenCL平台/设备执行与OpenCL相关的操作。平台是由特定的OpenCL开发实现的(例如,由NVIDIA、Intel或AMD提供),而设备是用于执行计算的实际处理硬件(例如,GPU或CPU)。
用户可以在同一台计算机上安装多个OpenCL runtime版本(不同的设备)可以通过/SARscape/Preferences/Preferences common工具中的General parameters选项卡中OpenCL Platform和OpenCL Device来选择OpenCL设备。
根据您计划用于SARscape的机器的硬件特性,以下部分可能会帮助您了解如何正确安装和配置OpenCL。
2、OpenCL runtimes
OpenCL runtime主要有三种类型,设计用于特定的设备:CPU、GPU、加速器。根据OpenCL runtime的实现者所做的选择,一个平台可能支持多个异构设备,或不同类型的设备需要多个OpenCL平台。
2.1CPU
与其他计算框架相比,OpenCL的一个关键优势在于它不需要特定类型的设备或品牌的GPU来开始使用它。甚至不需要GPU就可以使用OpenCL,因为有CPU-only runtime。这些CPU-only runtime能够将CPU提供的计算能力服务于OpenCL。
尽管已经有强大的OpenCL兼容的GPU(并不是严格意义上的要求),我们建议安装一个CPU-only OpenCL runtime。通过这种方式。大多数与OpenCL有关的问题,由于安装损坏或驱动问题,可以通过从一个OpenCL runtime切换到另一个OpenCL runtime来解决。
如果SARscape没有检测到OpenCL CPU-only runtime,会报告一个提示信息,但如果至少找到一个可以工作的runtime,软件就可以使用。
目前有两个OpenCL CPU-only runtimes:一个由英特尔提供,另一个是用开源实现的。AMD在过去也提供了一个CPU-only runtime,但现在已经停产了。
2.1.1 Intel CPU-only runtime
英特尔提供了一个高度优化的CPU-only OpenCL,它利用了最新的多核架构和CPU指令集的优势 (如SSE4.2和AVX)。虽然这些OpenCL的CPU runtime是由英特尔提供的,但它们也可以在AMD CPU上运行。
Windows和Linux runtime的最新版本可在此链接获得:
Windows的安装包是一个独立的可执行文件,而Linux的安装包则是通过Linux发行的特定软件库提供的。请直接参考英特尔网站的说明,设置存储库并安装所需的软件包。在撰写本文时,Linux下至少需要配置这两个软件包:intel-oneapi-runtime-opencl 和 intel-oneapiruntime-libs。也请确保你的电脑和操作系统满足安装和使用此类runtime的要求,因为这些要求可能比SARscape的要求更严格。
在Windows下,SARscape的安装程序建议安装发布日期可用的最新版本的英特尔CPU-only runtime。
在Linux下,SARscape用户需要在开始安装之前,下载并安装一个与其Linux电脑兼容的OpenCL CPU-only runtime。
如果上述链接中提供的英特尔CPU-only runtime在您的机器上不能工作,可以试试之前的版本。较早的版本在页面上的 "Intel CPU Runtime for OpenCL Applications 18.1":
https://www.intel.com/content/www/us/en/developer/articles/tool/opencl-drivers.html#cpu-section
2.1.2便携式计算语言(PoCL)
PoCL是一个OpenCL标准的用开源(MIT授权)实现的。在撰写本文时,它支持OpenCL 1.2和一些额外的功能。它的安装和使用没有英特尔CPU专用包那么直接,因此,只推荐有经验的用户在有特殊原因的情况下使用它。它也主要面向Linux系统。
可在以下链接获得:http://portablecl.org/
2.2GPU
通常情况,每个硬件制造商提供的GPU驱动程序中包含用于特定GPU的OpenCL Runtime。请注意,对OpenCL的支持通常只包括官方完整版图形驱动中,可以从硬件制造商官网下载,操作系统安装的默认/通用驱动程序可能只提供最基本的功能。
任何符合OpenCL 1.2的GPU,至少有1GB的VRAM和支持FP64,都可以用于SARscape。不符合这些要求的GPU在/SARscape/Preferences/Preferences common系统参数中不会列出来。
如果您的电脑只有一个GPU,而且您打算用这个GPU进行OpenCL 加速,请注意相同的硬件资源将被SARscape和操作系统共享。这包括大部分的标准的桌面渲染操作和ENVI OpenGL加速的用户界面。在这种情况下,您可以考虑使用一个显存大于1GB的更强大的GPU,或者使用两个GPU(一个用于图形,一个用于计算),或切换到一个只用CPU的OpenCL Runtime。
2.3Accelerator
加速器是另一类适合OpenCL的设备。英特尔Xeon Phi协处理器和一些基于FPGA的处理板都属于这一类。只要这些设备与OpenCL 1.2兼容,遵循CPU和GPU Runtime的相同标准,并满足SARscape运行的基本要求,它们就可以用于SARscape。
3支持和故障排除
由于OpenCL runtime是我们无法控制的第三方软件组件,我们在这方面只能提供有限的支持。不过,我们提供了一系列的工具和建议,以帮助用户识别OpenCL有关的问题,并协助找到解决方案。
3.1 OpenCL配置扫描仪(sarxinfo)
sarxinfo应用程序是SARscape的一个工具,用于检查底层机器配置的硬件规格和可用的 OpenCL Runtime。如果sarxinfo没有找到一个与OpenCL 1.2兼容的runtime,SARscape就不能使用,直到满足这个要求。
该工具运行的结果可以在/SARscape/Administration/View Files/OpenCL Info下查看,结果类似如下:
SarxInfo v1.6r, A. Peternier (C) sarmap SA 2013-2020
------------------
Hardware topology:
------------------
Operating system . : Windows
CPU name . . . . . : Intel(R) Core(TM) i7-5930K CPU @ 3.50GHz
RAM . . . . . . . : 57770 MB
Systems . . . . . : 1
Nr. of nodes . . . : 1
Nr. of CPUs . . . : 1
Nr. of cores . . . : 6
Nr. of PUs . . . . : 12
----------------
Supported types:
----------------
char . . . . . . . : 8 bit
short . . . . . . : 16 bit
int . . . . . . . : 32 bit
long . . . . . . . : 32 bit
long long . . . . : 64 bit
size_t . . . . . . : 64 bit
float . . . . . . : 32 bit
double . . . . . . : 64 bit
long double . . . : 64 bit
bool . . . . . . . : 8 bit
pointer . . . . . : 64 bit
-----------------
OpenCL platforms:
-----------------
Nr. of platforms . : 2
Platform 0 . . . : AMD Accelerated Parallel Processing
Available devices: 1 (1 GPUs, 0 CPUs, 0 accelerators)
Device 0 . . . : gfx906 (def)
Device type . : GPU
Device version : OpenCL 2.0 AMD-APP (3302.6)
Driver version : 3302.6 (PAL,HSAIL)
FP16 support . : yes
FP64 support . : yes
SPIR support . : no
Global mem size: 16368 MB
Local mem size : 32 KB
Max mem object : 16112 MB
Address bits . : 64
Compute units : 60
Global cache . : 16 KB
Max clock freq : 1801 MHz
Max workgroup : 256
Image support : yes
Context check : passed
Device ready . : yes
Platform 1 . . . : Intel(R) OpenCL
Available devices: 1 (0 GPUs, 1 CPUs, 0 accelerators)
Device 0 . . . : Intel(R) Core(TM) i7-5930K CPU @ 3.50GHz
Device type . : CPU
Device version : OpenCL 2.1 (Build 0)
Driver version : 2021.12.6.0.19_160000
FP16 support . : no
FP64 support . : yes
SPIR support . : yes
Global mem size: 65445 MB
Local mem size : 32 KB
Max mem object : 16361 MB
Address bits . : 64
Compute units : 12
Global cache . : 256 KB
Max clock freq : 3500 MHz
Max workgroup : 8192
Image support : yes
Context check : passed
Device ready . : yes
[OK] This machine seems to be SARscape-compatible
sarxinfo的输出包含三个主要部分:hardware topology(硬件拓扑结构)、supported types(支持的类型),以及OpenCL platforms(OpenCL平台)。
“Hardware topology”部分是对检测到的硬件在CPU架构和内存方面的配置的总结。“Supported types”部分是一个技术报告,以确保特定的内存分配具有预期的大小,这个信息用户可以忽略。“OpenCL platforms”部分包含了大部分所需的信息,确保一个兼容的OpenCL Runtime是可用的。
注:在Windows下,报告的RAM数量与当前可用的空闲有关,而在Linux下,它报告总的可用物理内存。这个字段是仅提供信息,不同的语义对SARscape的执行没有影响。
如果“OpenCL platforms”部分没有OpenCL平台,这意味着要么没有安装OpenCL runtime,或者它的安装可能被破坏。在这种情况下,应该确认CPU或GPU runtime已正确安装,并确认当前用户是否有权限访问这样的runtime(这个问题在某些必须显式地设置GPU加速的Linux系统中可能会需要每个用户设置访问权限)
如果找到一个或多个OpenCL runtime,则会在平台和设备选项中列出来。在前面的示例中,有两个OpenCL平台可用:分别是AMD和Intel。
第一个平台(ID 0)是安装的AMD OpenCL以及图形驱动程序,使AMD GPU与OpenCL一起使用。这样的runtime只有一个GPU类型的设备,并且与opencl相关规格在后面列出。如果有些规格不符合最低要求,将问题记录在报告中。对于每个设备,sarxinfo执行一个简单的OpenCL初始化和计算测试(在“Context check”内容下),如果这个测试失败,OpenCL runtime可能被破坏或与底层硬件不兼容(如,在处理器非常有限的虚拟机上安装了一个cpu-only runtime,或者安装了不正确的GPU驱动程序)。规格满足最低要求和上下文测试成功通过,“Device ready”字段被标记为“yes”,这个意味着这个平台/设备组合可以使用SARscape,在/SARscape/Preferences/Preferences common界面中的Opencl Platform/Device Name可设置Opencl平台。
第二个平台(ID 1)是英特尔的CPU-only OpenCL。与ID 0的唯一区别是OpenCL设备的类型显示为“CPU”而不是“GPU”。
如果找到至少有一个可用的OpenCL平台/设备组合,sarxinfo将会终止并确认SARscape可以在此机器上使用。如果没有CPU-only runtime,则会提示建议安装CPU-only OpenCl,不过这个提示信息不影响SARscape的使用。
sarxinfo应用程序也可以直接从命令行执行。打开一个终端,路径定位到SARscape安装的“bin”目录下并运行“sarxinfo”。在Linux下,可能需要设置LD_LIBRARY_PATH环境变量,例如,“export LD_LIBRARY_PATH = / where/is/ SARscape / bin”。
总之,sarxinfo输出提供了系统配置方面的信息。
3.2 OpenCL配置测试器(sarxtest)
如果sarxinfo扫描结果为设备正常,说明至少有一个OpenCL设备已准备就绪以确保机器满足SARscape 要求。然而,当对OpenCL功能进行了更深入的测试或出现了不易识别的性能相关问题时,OpenCL runtimes可能会出现一些问题。
因此,我们提供了一个附加的工具,称为sarxtest,它在特定的OpenCL平台和设备上进行一系列测试和基准测试,确保它是完全可操作的,并与SARscape兼容。
该功能在/SARscape/Administration/Diagnostics/Check OpenCL Config菜单可以启动,对/SARscape/Preferences/Preferences common中设置的opencl平台上进行测试。
这个应用程序也可以直接从命令行启动:输入“sarxtest –h”的选项列表,可选择特定的OpenCL平台和设备。
平台和设备ID号是上一节提到的sarxinfo报告中返回的。在这种情况下,Linux可能也需要设置LD_LIBRARY_PATH环境变量,例如,“export LD_LIBRARY_PATH = /where /is/ SARscape / bin”。
3.3已知的问题和限制
3.3.1Windows下触发TDR (Timeout Detection Recovery)
在Windows操作系统下,选择GPU为OpenCL平台,触发TDR (Timeout Detection Recovery)。
- 背景
大多数情况下,计算机只有一个连接到显示器和显卡的GPU,用于操作系统的图形渲染。当这样的GPU支持OpenCL并满足SARscape的最低要求,就可以使用并提高处理效率。
但当同一GPU同时用于图形和SARscape处理的OpenCL设备时,GPU可能会超负荷,图形化操作卡顿或不动了。在特定的阈值(默认值是2秒)之后,操作系统认为驱动程序没有响应并对其进行重置。
- 解决方法
为了解决或至少限制这个问题的影响,请参考以下几点解决方法:
(1)增加TDR超时时间。在Windows注册表中编辑一个键。位于“HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ GraphicsDrivers” 路径下,关键字名称为“TdrDelay”,类型为“DWORD(32位)”,将其值设置为大于10(秒)的值,这提供了比默认值2秒更大的灵活性。如果该关键字不存在,创建一个即可。
增加这个值的一个更简单的方法是使用注册表脚本,SARscape安装之后其安装目录下的“config_file”路径下提供了该脚本。两个“update_tdr_delay_to_XXs.Reg”脚本可以直将TDR超时设置为10秒或30秒,具体取决于执行的脚本。执行该脚本需要管理员权限。为确保操作系统使用更新的 TDR 值,需要在每次修改后重启机器。
(2)使用CPU-only OpenCL runtime处理大数据量或触发了TDR问题的数据集。这也是我们建议还安装一个CPU-only OpenCL runtime的原因。
(3)如果可能的话,使用两个不同的GPU:一个用于渲染,一个用于处理。如果你有Nvidia硬件,看是否可以切换到仅计算GPU Tesla计算机集群(TCC)模式。更多信息请点击此链接:
https://docs.nvidia.com/nsight-visual-studio-edition/reference/index.html#tesla-compute-cluster
(4)在Linux下使用SARscape,因为Linux操作系统不使用类似TDR的机制来重置驱动程序,以防GPU无响应。
3.3.2 OpenCL runtime被破坏
- 背景
当一个之前可以运行的OpenCL runtime突然停止工作时,大多数情况是由于驱动程序或操作系统配置损坏造成的。由于GPU的OpenCL驱动被嵌入到图形驱动中,当这些驱动程序被更新时(有时是操作系统本身自动更新),它们可能会引入回退或改变/重置一些自定义参数(例如重置上面提到的TDR值)。
此外,Intel曾经在他们的GPU驱动程序中,提供一个CPU-only Opencl runtime驱动程序(如Intel HD图形显卡系列),这与他们也提供的独立的CPU-only Opencl runtime不同,而且这两种是冲突的。这种选择在过去造成了许多混乱,但最近的GPU驱动不再包括这样的CPU-only runtime了。然而,如果你使用旧版本的Intel GPU驱动程序,可能仍然有这个问题。
- 解决方法
图形驱动可能出错的情况太多,无法解决这方面的所有可能问题。一般情况下,当检测到一个与图形驱动有关的问题时,重新安装一个干净的GPU驱动程序可能会解决这个问题。
将驱动程序更新到较新的版本也会有帮助,但在某些情况下,较新的版本可能会在OpenCL上带来退步,因此需要降到以前的驱动版本。
如果Intel HD显卡驱动有问题,一些同时具有集成和独立GPU的笔记本电脑允许从BIOS中禁用集成GPU,不过这样做对电脑电池消耗比较大。
3.3.3 安装OpenCL runtime后未找到OpenCL
- 背景
OpenCL runtime已被安装,但它没有被sarxinfo检测到。
- 解决方法
即使没有明确要求,往往需要重启机器以在系统中正确识别新安装的OpenCL平台/设备。
还要检查所安装的runtime是否与目标机器上的CPU/GPU以及所运行的操作系统版本相兼容。
3.3.4 sarxtest FFT在Nvidia下失效
sarxtest在Nvidia硬件上测试快速傅里叶变换(FFT)时失败
- 背景
在Nvidia GPU上执行sarxtest时,OpenCLaccelerated Fast Fourier Transform(FFT)的测试失败。
- 解决方法
据我们了解,在370到392版本之间,Nvidia驱动出现了驱动退步。将驱动回退到370之前的版本,或者更新到392之后的版本,可以解决这个问题。
4、常见问题
(1)什么是OpenCL?
开放计算语言(OpenCL)是一个编写应用程序的框架,能够利用现代计算设备所提供的并行能力,如多核处理器、图形处理器(GPU)、现场/可编程门阵列(fpga)等。OpenCL是一个开放的标准,被当今大多数硬件制造商所采用。不同于其他类似的框架,如Nvidia CUDA和Intel oneAPI,OpenCL不受特定供应商、操作系统或硬件平台的限制。
我们在SARscape中使用OpenCL来提高一些特定算法的性能。
(2)为什么在SARscape中使用OpenCL ?
现代处理器通过改进并行性而不是提高时钟频率来提供额外的计算能力。因此,我们已经对SARscape的一些工具进行了并行化,以应对这种编程模式的转变。
GPU和其他现代大规模并行设备在合理的成本/效益范围内提供了明显更高的并行性。通过将我们的核心单元写在OpenCL,我们使SARscape不仅可以利用多核CPU,而且还可以在有条件的情况下利用这些专用设备所提供的并行计算能力。
GPU是一个经济高效的解决方案,可以处理SAR处理中日益增长的大数据问题。
(3)需要最新的显卡来运行SARscape吗?
不需要。与CUDA不同,运行任何与CUDA有关的应用程序都需要Nvidia的GPU。而OpenCL提供了只用CPU实现的方法,可以在几乎所有的计算机上运行SARscape。对于没有配备最新GPU的机器来说,这种只用CPU的实现方式不仅仅是一个简单的退路,因为它们为利用CPU的硬件资源(如多核和高级指令集)进行了优化。
(4)没有GPU的电脑能运行SARscape吗?
可以,在Windows上安装SARscape时,可以直接勾选以下选项:install the Intel CPU-only OpenCL runtime,(在Linux下,你需要下载并安装一个与你所用的操作系统兼容的软件包)。CPU-only OpenCL runtime可以在几乎所有最新的Intel或AMD CPU上运行。
如果您的CPU比较老,或者Intel CPU-only runtime不支持,您可以随时下载并安装旧版本的Intel CPU-only runtime
(5)通过Nvidia SLI或AMD CrossFire连接,SARscape在有两个(或更多)GPU的电脑上运行得更快吗?
Nvidia SLI和AMD CrossFire技术只在GPU被用于图形渲染时才会被利用,它们对OpenCL没有任何影响。当只有一个OpenCL设备时,SARscape只能使用一个OpenCL设备进行特定的处理,如果有几个设备可以用,用户在SARscape系统设置中指定使用哪个设备。如果您对性能要求很高,可以考虑使用SARscape 集群版本,它将工作负载分散到一系列分布式节点上,这些节点可以在多台计算机上运行,每台计算机都有一个或多个GPU。