GPU 加速的 GROMACS

现在,开始阅读此《GPU Ready Apps Guide》(GPU Ready 应用程序指南)。

GROMACS

GROMACS 是一款分子动力学应用程序,旨在模拟包含数百到数百万个粒子的系统的牛顿运动方程。GROMACS 设计用于模拟具有大量复杂键合相互作用的生物化学分子,例如蛋白、脂类和核酸。

与仅使用 CPU 的系统相比,GROMACS 在使用 NVIDIA GPU 加速的系统上的运行速度最高可提升 3 倍,从而使用户运行分子动力学模拟的时间从几天缩短到几小时。

GROMACS 在 NVIDIA GPU 加速的系统上的运行速度快了 3 倍

安装

可以从 GROMACS 网站下载 GROMACS(版本 5.1.2)。在以下示例中,命令行会将“VERSION”替换为 5.1.2 或您要使用的最新或所需 GROMACS 版本。截止本文写作时,版本 5.1.4 已发布,经证明其性能优于版本 5.1.2。

下载和安装说明

要配置(使用 CMake)并构建 GPU 加速版本,需要以下软件:

  • CMake
  • NVIDIA CUDA®*
  • GCC*
  • MPI(可选。请在需要多节点版本时使用)。

*推荐使用最新的 CUDA 版本(当前为 7.5)以及所用 CUDA 版本支持的最新 gcc 版本。

$ wget ftp://ftp.gromacs.org/pub/gromacs/gromacs-VERSION.tar.gz
$ tar -xzvf gromacs-VERSION.tar.gz
$ mkdir gromacs-VERSION-build
$ cd gromacs-VERSION-build
$ CC=gcc CXX=g++ cmake <GROMACS_SRC_DIR> -DGMX_OPENMP=ON -DGMX_GPU=ON -
DGPU_DEPLOYMENT_KIT_ROOT_DIR=<GDK_PATH> -DGMX_BUILD_OWN_FFTW=ON -
DGMX_PREFER_STATIC_LIBS=ON -DCMAKE_BUILD_TYPE=Release -
DCMAKE_INSTALL_PREFIX=<GROMACS_INSTALL_DIR>

跨平台 MAKE (CMAKE) 选项

请将 替换为 GROMACS 源目录的路径,例如 ../gromacs-5.1.2。 是安装了 GPU 部署套件的位置。

GROMACS 5.1 GPU 频率可以通过 NVML 进行自动调整,以实现最佳性能。要构建可选的 NVML 支持,需要使用  GPU 部署套件 (GDK)。

下载并安装此套件后,请将 替换为 gdk 目录的路径。(如果将 GDK 安装到默认位置,您可以删除选项 -DGPU_DEPLOYMENT_KIT_ROOT_DIR= 。)还需要将 替换为所需安装目录,例如 /opt/gromacs。

这里其他的一些配置是使用 CMake 选项设定的,例如使用 -DGMX_OPENMP=ON 启用 OpenMP 支持。通过 -DGMX_BUILD_OWN_FFTW=ON 配置选项,可以在 GROMACS 构建期间下载并构建 FFTW。这将确保为 FFTW 选择了正确的优化标志。或者,可以使用指定的 FFTW 安装;请参阅 GROMACS 安装说明的 FFTW 一节以获取详细信息。如需了解每个选项的详细信息,请参阅 GROMACS 手册

支持 MPI 的 GROMACS

要构建并安装支持 MPI 的 GROMACS,您需要通过使用 MPI 编译器包装器并添加“-DGMX_MPI=ON”将先前的命令调整为以下内容。

$ CC=mpicc CXX=mpicxx cmake <GROMACS_SRC_DIR> -DGMX_OPENMP=ON -DGMX_GPU=ON
-DGPU_DEPLOYMENT_KIT_ROOT_DIR=<GDK_PATH> -DGMX_MPI=ON -DGMX_BUILD_OWN_FFTW=ON -DGMX_PREFER_STATIC_LIBS=ON -
DCMAKE_BUILD_TYPE=Release -DGMX_BUILD_UNITTESTS=ON -DCMAKE_INSTALL_PREFIX=<GROMACS_INSTALL_DIR>

构架和安装

要构建并安装 GROMACS,请使用以下命令:

$ make
$ sudo make install

安装后要检查 GROMACS 的正确性,请向配置命令中添加 -DREGRESSIONTEST_DOWNLOAD=ON 选项,并在“make install”之前运行“make check”。另外,您可以使用“make -jN”,N 是平台中用于加速 make 进程的核心数。

如需了解安装选项的更多详细信息,请参阅 GROMACS 安装指南

运行作业

GROMACS 提供了一些脚本,用于为不同的 shell 设置环境。要设置 PATH 和其他环境,可使用以下命令。

    $ source <GROMACS_INSTALL_DIR>/bin/GMXRC

如果按上述内容同时构建 MPI 和非 MPI 二进制文件,您会在安装版本的 bin 文件夹中找到“gmx”和“gmx_mpi”。本指南中描述的示例使用 GROMACS ftp 中的“水”数据集。使用这些数据集运行 GROMACS 首先需要下面所述的数据准备步骤。可以在此处找到为运行 GROMACS 的输入准备相关的更多详细信息/选项。

要运行 GROMACS,需要执行以下两个步骤:

1. 使用 grompp (GROMACS 预处理程序)准备输入内容 

a.对于单节点版本: $ gmx grompp -f

2. 启动 mdrun

a.对于单节点版本, $ gmx mdrun 
b。对于 MPI 版本 (np = #GPUs):$ mpirun –np gmx_mpi mdrun

对于较小的节点计数,这些设置通常可以提供出色的性能。不过,进行一些调整往往能提高 GROMACS 的模拟性能。对于较大的节点计数,手动调整更为重要。请参阅 GROMACS 手册 和 gmx-users 邮件列表以及发表的论文,以了解详细信息。

文档中说明了与 GPU 相关的性能调整选项。可 下载用于基准测试的输入集。

基准测试执行选项

运行 GROMACS 基准测试以测量性能时,请使用以下命令行选项:

1.–resethway: 在每次模拟开始时,GROMACS 会调整区域分解并均衡可用 CPU 与 GPU 之间的负载。这会降低前几百次迭代的速度。由于实际模拟会运行很长时间,因此这不会对已实现的性能产生任何影响。要最大限度地缩短基准测试时获取稳定结果所需的运行时间,应指定选项 –resethway。当执行的迭代次数达到一半时,-resethway 会重置所有性能计数器,因此可以在没有很多时间步长的情况下测量实际性能。请注意,在运行开始阶段,PME 负载均衡器仍处于活动状态时,如果进行了重置,可能会显示以下错误“尝试在步长 xxxxxxx 重置 mdrun 计数器时 PME 调整仍然处于活动状态”。为了避免出现此错误,您可以增大所使用的 -maxh 或添加 -nsteps 参数,通过增大模拟的时间步长数来增大运行时间步长数。

2.-maxh: 用于控制模拟应运行的最长时间。mdrun 执行足够的时间步长,以确保运行时间不少于指定时间(小时)。此选项应设置为足够高的值,以便获得稳定的性能结果。合理值通常为 5 分钟 = 0.08333。此选项或下文说明的“nsteps”选项可用于限制模拟的运行时间。

3.–noconfout: 此选项用于禁用可能会花费大量时间(例如,在并行文件系统上)的 confout.gro 输出。由于实际模拟中极少完成此输出,因此应在基准测试期间将其禁用。

4.–v: 向命令行及生成的日志文件 md.log 中输出更多信息。所包含的信息对于调整 GROMACS 的性能非常有用。

5.–nb: 此选项用于告知 GROMACS 使用“gpu”还是“cpu”进行特定计算

6.–nsteps: 要运行的时间步长数。此选项会覆盖 mdp 文件中的默认值。它还可用于代替 maxh 控制模拟运行的总体时间。

性能会显示于所生成的日志文件 (md.log) 结尾以及控制台输出中,单位为“纳秒/天”(值越大越好)。 

请访问 GROMACS 文档页面 以获取有关命令行参数的更多详细信息。

调整性能

对 GROMACS 执行的任务拥有基本了解,有助于理解 GROMACS 的性能行为。下文简单介绍了相关任务。从较高级别的层面上看,GROMACS 执行以下四项任务:

1.PP:计算短程非键合力或粒子间 (PP) 相互作用(计算仅限于最邻近通信)

2.PME:计算长程非键合力的长程部分的近似值(多节点运行中的通信密集型)

3.键合 (B):计算键合力

4.其他:施加键合约束,向前推进原子位置以及计算近邻列表和其他。

GPU 版本的 GROMACS 可以在 GPU 上加快最耗时的 PP 任务,而其他三项任务 PME、“键合”及“其他”只能在 CPU 上执行。PP 任务独立于“键合”及 PME 任务,并且可以并行执行,而任务“其他”主要依赖于 PP、PME 和“键合”的输出结果。因此,GPU 版本在 CPU 上执行 PME 和“键合”任务,而 GPU 则执行 PP 任务:

GROMACS 可以分流 GPU 上的大负载计算 PP 任务

通过调整静电截断(超过后由长程部分处理力的距离),GROMACS 可以将工作从 CPU(PME 任务)转移到 GPU(PP 任务)(可以使用 –tunepme 命令行开关禁用自动启用)。由于存在准确性限制,因此无法实现反向转移。例如,在 GPU 完成 PP 任务的速度比 CPU 更快(请参阅下图)的情况下,GROMACS 会将工作从 CPU 转移到 GPU,从而缩短应用程序运行时间。

GROMACS 可以将工作负载转移到 GPU,以实现更快的模拟运行速度

PP 任务的复杂性为 O(m*n),而 PME 任务的复杂性为 O(n log(n)),其中 n 是粒子数,m 是近邻列表的大小。通常,m 的值介于 200 到 400 之间,远小于 n。

以下设置可用于调整 GROMACS 的性能。

启动配置

通过使用 MPI 和 OpenMP,GROMACS 能够利用集群中所有可用的 GPU 和 CPU 资源。最佳启动配置因输入集与网络功能而异。这些启动配置包括每逻辑核心一个 MPI 进程且每个带有一个 OpenMP 线程,到每节点一个 MPI 进程且使用节点内所有可用核心。要选择最佳启动配置,可遵循以下准则:

  • 如果仅使用单(或有时为双)CPU 插槽,OpenMP 并行化的效率通常高于 MPI
  • 如果使用了多个 CPU 插槽或节点,则 MPI 和 OpenMP(混合)并行化(每 MPI 秩使用 2-4 个 OpenMP 线程)的效率通常高于仅使用 MPI
  • 在具有大量节点的情况下,每个 MPI 秩使用多个 OpenMP 线程可显著减少所需通信量。系统将在输出文件 md.log 中报告通信所花费的时间量(请参阅“脚本 1 md.log 中通信花费的时间”)。
Computing: Num Ranks Num Threads Call Count Wall time (s) Giga-Cycles total sum %
[…]
Comm. coord. 2 10 252681 63.467 3808.202 3.6
[…]
Comm. energies. 2 10 25917 1.108 66.457 0.1
Total 1782.537 106957.655 100.0
Breakdown of PME mesh computation
[…]
PME 3D-FFT Comm. 2 10 518322 126.829 7610.103 7.1
[…]

脚本 1 md.log 中通信花费的时间

对于 MPI 版本,可以通过所用 MPI 实现的启动程序 (-np parameter) 来控制 MPI 秩数,而 OpenMP 线程数可以通过 mdrun 命令行选项 –ntomp 或环境变量 OMP_NUM_THREADS 进行控制。mdrun 的单节点版本使用线程 MPI(基于线程的内部 MPI 实现)和 OpenMP。对于此版本,OpenMP 线程数还可以使用命令行选项 –ntomp 来控制,而 MPI 秩数可以使用 –ntmpi 来控制。对于 GROMACS 的 GPU 加速版本,每个 GPU 必须至少有一个 MPI 秩才能利用所有可用 GPU。

线程/进程固定

GROMACS OpenMP 线程和 MPI 进程应正确固定到系统的核心/线程。此操作可以通过所用的 MPI 启动程序/批处理系统或 GROMACS 完成。默认情况下,GROMACS 会尝试自动固定线程,但是在某一固定已由 MPI 启动程序、OpenMP 实现完成或者可用的逻辑核心数与节点上使用的总线程数不匹配的情况下,此功能将关闭。在这种情况下,如果固定并非由 MPI 启动程序或批处理系统完成,可以使用选项 –pin 启用固定。

SMT/超线程

使用系统中的所有逻辑核心(也称为 SMT 或超线程)通常会小幅提升性能。

GPU BOOST

GROMACS 的 GPU 内核未利用 GPU 的所有功能和散热预算。因此,建议通过应用程序频率将 GPU 频率提高到最大支持值,此操作也很安全。从 GROMACS 5.1 开始,如果应用程序频率权限设置为“UNRESTRICTED”(无限制),此操作将由 gmx 可执行程序自动完成,因此您应看到类似以下的输出内容:Changing GPU clock rates by setting application clocks for Tesla K80 to (2505,875)

如果应用程序频率权限设置为“RESTRICTED”(受限制),GROMACS 会发出相关警告,输出类似以下的内容:

Not possible to change GPU clocks to optimal value because of insufficient permissions to set application clocks for Tesla K80.Current values are (2505,562).Max values are (2505,875) Use sudo nvidia-smi -acp UNRESTRICTED or contact your admin to change application clock permissions.

按照警告消息中的指示,您可以使用

$ sudo nvidia-smi -acp UNRESTRICTED

将应用程序频率权限更改为“UNRESTRICTED”(无限制)。

如果您的 GROMACS 构建不包含 GDK,GROMACS 将发出类似以下内容的警告消息:

GROMACS was configured without NVML support hence it can not exploit
application clocks of the detected Tesla K80 GPU to improve performance.
(GROMACS 未配置 NVML 支持,因此无法利用检测到的 Tesla K80 GPU 的应用程序频率来提高性能)Recompile with the NVML library (compatible with the driver used) or set application clocks manually.(请使用(与所用驱动程序兼容的)NVML 库来重新编译,或手动设置应用程序频率。)

在这种情况下,可手动使用类似以下内容的命令配置最大加速频率。请注意,对于不同的 GPU,具体的最大频率设置将有所不同。

$ nvidia-smi -ac 2505,875       # 这是 K80 GPU 的最大频率

如需了解 GPU Boost 的更多详细信息,请参阅 使用 GPU Boost 和 K80 Autoboost 提高性能

近邻列表更新

当使用韦尔莱截断方案(GPU 加速所需)时,可以自由选择近邻列表的更新间隔。如果近邻列表搜索花费很长时间,可以延长近邻列表的更新间隔。md.log 文件中指定了近邻列表搜索的时间(请参阅“脚本 2 md.log 中近邻列表搜索花费的时间”)。可能需要增加截断半径时,此操作将自动完成。由于近邻列表是在 CPU 上计算,且较长的截断半径会导致进行更多的力计算,因此增大 nstlist 会将部分工作从 CPU 转移到 GPU。除了近邻列表计算需要 MPI 秩之间的通信外,这还会以通信换取计算。

Computing: Num
Nodes
Num
Threads
Call
Count
Wall time
(s)
Giga-Cycles total sum %
[…]
Neighbor search 2 10 6480 32.464 1947.963 1.8
[…]
Total 1782.537 106957.655 100.0

调整 PME – PP 负载均衡

[…]
Force evaluation time GPU/CPU: 4.972 ms/5.821 ms = 0.854
For optimal performance this ratio should be close to 1!
[…]

脚本 3 md.log 中的 PME PP 负载均衡输出

如上所述,可以均衡 PME 节点与 PP 节点之间的负载。默认情况下,此功能处于启用状态,可使用参数 –notunepme 将其关闭。对于单进程 GPU 加速运行,将在输出文件 md.log 中报告 PP (GPU) / PME (CPU) 负载均衡(请参阅“脚本 3 md.log 中的 PME PP 负载均衡输出”)

单独的 PME 秩

PME 网格计算的分解

Breakdown of PME mesh computation
PME redist. X/F 2 10 518322 167.004 10020.730 9.4
PME spread/gather 2 10 518322 429.501 25771.381 24.1
PME 3D-FFT 2 10 518322 123.600 7416.369 6.9
PME 3D-FFT Comm. 2 10 518322 126.829 7610.103 7.1
PME solve Elec 2 10 259161 13.470 808.259 0.8

脚本 4 md.log 中 PME 任务花费的时间

使用 PME 处理长程非键合相互作用是一项通信密集型任务,因为它需要执行 3D FFT。由于 PP 和 PME 任务相互独立,因此 GROMACS 支持启动所谓的单独 PME 节点(仅执行 PME 任务的进程),以便通过 MPMD 方式减少网络压力。默认情况下,仅当不使用 GPU 时,才会自动确定 PME 秩。可以使用参数 –npme 对其进行微调。如果输出文件 md.log 中报告的 PME 任务的通信时间较长,应考虑单独的 PME。通常会发生于 3-4 个或更多节点的情况下。

有两种不同选项可将 MPI 秩映射到与 GROMACS 的 GPU 加速运行相关的 PP 和 PME 节点:

  • PME 节点与所谓的 PP 节点交织(PP 节点将执行任务“力”),这会增加网络压力,但可以避免资源空闲。命令行选项为 –ddorder interleave(GPU 加速运行时为默认)。
  • PME 节点分为互相接近的组。这会降低网络压力,但导致某些 GPU 处于空闲状态。命令行选项为 –ddorder pp_pme(仅 CPU 运行时为默认)。

在多个进程
和多进程服务 (MPS) 之间共享一个 GPU

在很多情况下,在多个 MPI 秩之间共享 GPU 会提高性能。

对于使用 GROMACS 的非 MPI 构建这样的单节点情况,只需通过使用 -ntmpi 和参数的线程 MPI 并将 -ntmpi 设置(或允许 GROMACS 为您设置)为每个 GPU 运行 2 个或多个 MPI 秩即可提供相关支持。

对于使用 GROMACS 的 MPI 构建这样的多节点运行,可以通过多进程服务 (MPS) 在支持计算能力 3.5 的 GPU 上共享 GPU。这需要将所用 GPU 设置为独占进程模式,并在每个节点上启动 MPS 控制守护程序 (nvidia-cuda-mps-control):

#!/bin/bash
sudo nvidia-smi -c 3
nvidia-cuda-mps-control -decho " -started nvidia-cuda-mps-control on `hostname`"

用于在单个节点上启动 MPS 的示例脚本

#!/bin/bash
echo quit | nvidia-cuda-mps-control
sudo nvidia-smi -c 0
echo " stopping MPS on `hostname`"

用于在单个节点上停止 MPS 的示例脚本

可以在 此处找到有关 MPS 的更多信息。

高级选项

系统提供了一些更高级的区域分解设置。对于非均匀系统(例如,每个区域的原子数),调整这些选项可以进一步提高性能。请参阅 GROMACS 手册或 GROMACS 用户邮件列表,以获取更多信息。

免责声明

*GROMACS 提供了很多选项,用于调整性能以处理不同的输入内容以及在不同的架构/系统上进行处理。指令集涵盖了对于 GPU 加速 GROMACS 而言重要的方面。

分步示例

本节将为您说明几个运行 GROMACS 的示例。可以从 此处获取用于这些示例的输入数据集。

要开始使用,请下载并解压缩档案文件

$ wget ftp://ftp.gromacs.org/pub/benchmarks/water_GMX50_bare.tar.gz
$ tar -zxvf water_GMX50_bare.tar.gz

此数据包括具有不同大小的示例“水”数据,其文件夹名称类似 0384、0768 和 1536。文件夹名称对应原子数(以千计),即文件夹 0768 包含具有 25.6 万个水分子及 76.8 万个原子的用例。第一步是使用 grompp 工具准备数据。

例如,要运行用例 1536,请使用以下命令。如果您要使用粒子网格埃瓦尔德 (Particle Mesh Ewald, PME),请使用 pme.mdp。运行下列命令将生成 topol.tpr 文件,该文件用作 GROMACS mdrun 的输入内容。

$ cd water-cut1.0_GMX50_bare/1536
$ gmx grompp -f pme.mdp

以下是一些在 1 个或 2 个节点上使用及不使用 GPU 运行 GROMACS 的不同变化,并代表了本节结束时一部分用于收集示例结果的用例。

GPU 示例中使用的 MPI 秩数取决于系统中的 GPU 数以及每个 GPU 的 MPI 秩数。在大多数情况下,每个 GPU 运行多个 MPI 秩可以提高性能。此操作可以通过将线程 MPI 用于单节点示例来实现,也可以通过在多个节点上运行时使用 CUDA MPS 功能实现。本指南中说明了有关 CUDA MPS 的一些其他详细信息。

通常,在使用 GPU 时,建议对每个秩使用 2 到 6 个 OMP 线程。可以使用 -ntomp 或变量 OMP_NUM_THREADS 指定所需的每个秩的 OMP 线程数。通常需要实验来调整 MPI 秩数与每个秩的线程数的相对关系,以确定最适用于特定系统配置和输入数据的设置。

在下面的示例 1、2 和 4 中,使用 2 块 Tesla K80,即每个节点上有 4 个 GPU(2 块 K80 板)。

5 个示例运行于具有 2 个 haswell CPU 插槽的节点

  • 总计 32 核
  • 超线程已禁用

示例 1. 未指定启动参数(ntmpi 和 ntomp),因此 GROMACS 将自动确定每个 GPU 的 MPI 秩数以及要对每个秩启动的 OMP 线程数。

使用线程 MPI 在具有 4 个 GPU 的单节点上运行,允许 GROMACS 自行确定启动参数(ntmpi 和 ntomp)。

$ GROMACS_BIN_DIR/gmx mdrun -resethway -noconfout -nsteps 4000 -v -pin on -nb gpu

如果您有时间进行实验,可以尝试使用每 GPU 的 MPI 秩数与每秩的 OMP 线程数的所有可用组合,以确定最合适的设置。可用选项取决于每个节点的 CPU 核心总数和 GPU 数。例如,如果每个节点有 4 个 GPU 和 32 个 CPU 核心,可以尝试下面的组合以确定提供最佳性能的设置。

-ntmpi 4 -ntomp 8 # 1 rank per GPU with 8 threads per rank
-ntmpi 8 -ntomp 4 # 2 MPI ranks per GPU with 4 threads per rank
-ntmpi 16 -ntomp 2 # 4 MPI ranks er GPU with 2 threads per rank

对于下面的示例 2-5,所选用例提供基准测试系统上的最佳结果。

示例 2. 运行条件:单节点,4 GPU,每秩 4 OMP 线程,8 秩,每 GPU 2 MPI 秩,使用线程 MPI

$ GROMACS_BIN_DIR/gmx mdrun -ntmpi 8 -ntomp 4 -resethway -noconfout -nsteps 4000 -v -pin on -nb gpu

示例 3.运行条件:单节点,仅 CPU 核心,每秩 1 OMP 线程,32 秩,使用线程 MPI

$ $GROMACS_BIN_DIR/gmx mdrun -ntmpi 32 -ntomp 1 -resethway -noconfout -nsteps 4000 -v -pin on -nb cpu

示例 4.运行条件:2 节点,每节点 4 GPU,每秩 2 OMP 线程,每节点 16 秩,每 GPU 4 MPI 秩,使用 CUDA MPS 以允许每个 GPU 运行多个 MPI 秩:

$ OMP_NUM_THREADS=2 mpirun -np 32 $GROMACS_BIN_DIR/gmx_mpi mdrun -resethway -noconfout -nb gpu -nsteps 8000 -v -pin on

示例 5.运行条件:2 节点,仅 CPU 核心,每秩 1 OMP 线程,每节点 32 秩

$ OMP_NUM_THREADS=1 mpirun -np 64 $GROMACS_BIN_DIR/gmx_mpi mdrun -resethway -noconfout -nb cpu -nsteps 8000 -v -pin on

基准

本节将介绍单个节点上的多 GPU 性能。此外,基准测试将展示每节点两块 Tesla P100 GPU 卡的一个、两个、三个和四个节点的对应性能。每块 P100 卡都有一个 Pascal GPU。此运行使用描述大小为 0768、1536 和 3072 的水数据所需的命令行变体完成。

768K Water 单节点性能
1.5M Water 单节点性能
3M Water 单节点性能
3M Water 可扩展性能

推荐的系统配置

硬件配置

PC

参数
规格

CPU 架构

x86

系统内存

16-32 GB

CPU 数

8 核,8 GHz
10 核,2.2 GHz
16 核,2GHz

GPU 型号

NVIDIA TITAN X

GPU 数

1-2 块 TITAN X

服务器

参数
规格

CPU 架构

x86

系统内存

32 GB

CPU 数/节点数

2(16 核以上,2 GHz 以上)

GPU 型号

NVIDIA® Tesla® P100

GPU 数/节点数

1-2 块 Tesla GPU 卡

互联

InfiniBand

软件配置

软件堆栈

参数
版本

操作系统

Linux

GPU 驱动程序

352.79 或更高版本

CUDA 工具包

7.5 或更高版本

编译器

GCC 5.0

立即构建理想的 GPU 解决方案。