我已经安装了 nvidia 编译器 (nvcc、nvfortran)。我从NVIDIA HPC SDK v20.7 网站。然后我用 nvfortran 编译了非 cuda 代码,运行良好。但是当我编译第一个基于 cuda 的示例时文档,它会引发错误:
nvcc-Error-CUDA version 8.0 was not installed with this HPC SDK: /opt/nvidia/hpc_sdk/Linux_x86_64/20.7/cuda/8.0/bin
然后我就跑nvidia-smi
了
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.66 Driver Version: 375.66 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Quadro K600 Off | 0000:03:00.0 On | N/A |
| 25% 46C P8 N/A / N/A | 589MiB / 973MiB | 3% Default |
+-------------------------------+----------------------+----------------------+
因此我的 NVIDIA 驱动程序版本是 375.66。根据表格1在 cuda 工具包页面中,此驱动程序版本需要 cuda 8.0(或更低版本)工具包。
所以我的问题是 -
(1)带有 NVIDIA GPU 设备的 Linux 系统是否预装了 CUDA 工具包?这些步骤为了检查 CUDA 是否已安装,我打开了/usr/local
文件夹,但那里没有任何cudaX.Y
文件夹。
(2) 鉴于我有此版本的 NVIDIA 驱动程序,我应该继续下载 cuda8.0 吗?如果我这样做,那么使用 HPC SDK v20.7 安装的 nv 编译器可能仍然无法工作 - 根据安装指南,提供对 cuda10.1、10.2 和 11 的独立支持。这是否意味着它不支持 CUDA8.0?如果是,我应该下载新的驱动程序吗?
(3) 我只想开始 GPU 编程,那么使用我拥有的驱动程序可以实现吗?我可以使用任何编译器。pg 编译器可以工作吗?
有关我的系统的更多信息 -
shell 命令nvfortran --version
:
nvfortran 20.7-0 LLVM 64-bit target on x86-64 Linux -tp sandybridge
NVIDIA Compilers and Tools
Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved.
shell 命令pgfortran --version
:
pgfortran (aka nvfortran) 20.7-0 LLVM 64-bit target on x86-64 Linux -tp sandybridge
PGI Compilers and Tools
Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved.
shell 命令cat /proc/driver/nvidia/version
:
NVRM version: NVIDIA UNIX x86_64 Kernel Module 375.66 Mon May 1 15:29:16 PDT 2017
GCC version: gcc version 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12)
答案1
我相信要解决您的紧急问题,您需要找到或安装与您的驱动程序兼容的 CUDA 环境,然后确保CUDA_HOME
环境变量指向该环境的根目录,然后重试构建。
我的专业不是 Fortran,但我刚刚为我所在机构的一位用户处理了一个相关案例。在我的案例中,系统安装了与 NVidia HPC SDK 分开的 CUDA 9.1,还安装了 SDK 版本 20.9,与 CUDA 10.1、10.2 和 11.0 捆绑在一起,并且系统具有版本 418 NVidia 驱动程序,该驱动程序可与 CUDA 10.1 配合使用,但不能与 10.2 或 11.0 配合使用。
就我而言,该nvfortran
命令不会针对位于 /usr/local/cuda 的 CUDA 9.1 进行构建。
但是,我们可以通过设置CUDA_HOME=/opt/nvidia/hpc_sdk/Linux_x86_64/20.9/cuda/10.1
并重新运行nvfortran
命令来构建东西。
需要额外小心以确保您链接到正确的 Cuda 库,其中许多库(就我而言)位于 中/opt/nvidia/hpc_sdk/Linux_x86_64/20.9/math_libs/10.1/lib64
。
对于您的情况,如果 HPC SDK 20.7 版本与 CUDA 8.0 捆绑在一起,那么CUDA_HOME
正确设置可能是您需要做的全部工作。
不过,SDK 20.7 版本可能与旧版本的 CUDA 不兼容,您可能需要更新的 CUDA 和更新的驱动程序才能nvfortran
工作。
稍微解释一下您的其他一些担忧,配备 NVidia 的 Linux 系统通常不预装 CUDA 工具,尽管我认为有些供应商会这样做。与大多数 Linux 产品一样,详细的答案在某种程度上取决于您的系统配置,正确的路径和环境变量组合通常可以让您实现目标。
如果您刚刚开始,您可能希望跳过 HPC SDK 并从本机 CUDA 开始。它的级别较低,可能不适合 Fortran,但您可能只需安装一个 CUDA 即可获得工作环境。