nvcc命令

  • nvcc(NVIDIA CUDA Compiler)是 NVIDIA 提供的 CUDA 程序编译器,用于将包含 CUDA C/C++ 扩展的代码编译成可在 GPU 上运行的二进制文件。

  • 它是开发 CUDA 程序的核心工具之一,支持将 .cu 文件编译为支持 GPU 并行计算的程序。

基本使用

🎯 核心作用

  • 编译 .cu CUDA 源代码

  • 生成 CPU 和 GPU 混合执行代码

  • 调用底层的 gcc/g++ 和 NVIDIA 的 PTX 编译器

  • 支持设备(GPU)代码与主机(CPU)代码的无缝集成

安装

通常随 CUDA Toolkit 安装路径提供,例如:

/usr/local/cuda/bin/nvcc

安装:

sudo apt install nvidia-cuda-toolkit

export PATH=/usr/local/cuda/bin:$PATH

可通过命令查看版本:

nvcc --version

📋 常用参数

命令示例

功能说明

nvcc -o a.out main.cu

编译 CUDA 程序

nvcc -arch=sm_86 -o out main.cu

指定目标架构(如 Ampere)

nvcc -c main.cu

仅编译为目标文件 .o

nvcc -ptx main.cu

生成 PTX 汇编代码

nvcc -Xcompiler -fPIC

传递参数给 host 端编译器

nvcc --help

查看所有选项

🧠 编译流程(简化)

  1. 预处理 .cu 文件

  2. 将 CPU 代码交给 gcc 处理

  3. 将 GPU 代码交给 NVIDIA 编译器生成 PTX 或 SASS

  4. 链接生成最终可执行文件

✅ 使用场景

  • GPU 并行计算加速

  • 开发深度学习底层 CUDA 核函数

  • 性能优化场景,如图像处理、物理仿真等

⚠️ 注意事项

  • nvcc 编译的是 CUDA 源码,不适合编译纯 C++ 程序

  • 需搭配 NVIDIA GPU 驱动 + CUDA Toolkit 环境

  • 与 CMake 配合时需配置 FindCUDACMakeLists.txt

📎 相关命令/工具

工具

功能

nvidia-smi

查看 GPU 状态、驱动是否安装

cuda-gdb

GPU 代码调试工具

cuda-memcheck

检查 GPU 内存泄漏/访问越界

nvprof, nsys

CUDA 代码性能分析

🧪 示例代码

Hello CUDA

// hello.cu
#include <iostream>

__global__ void hello_from_gpu() {
    printf("Hello from GPU!\n");
}

int main() {
    hello_from_gpu<<<1, 1>>>();
    cudaDeviceSynchronize();
    return 0;
}
  • 🔧 编译

nvcc hello.cu -o hello
./hello

示例:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243

分析:

nvcc: NVIDIA (R) Cuda compiler driver
    这表明 nvcc  NVIDIA 提供的 CUDA 编译器驱动。
    nvcc(NVIDIA CUDA Compiler)是用于编译 CUDA 代码的工具,能够将 CUDA C/C++ 代码编译成适用于 GPU 的代码。
Cuda compilation tools, release 10.1, V10.1.243
    CUDA 编译工具的版本信息。
    release 10.1 表示 CUDA 工具包的发行版本是 10.1,
    V10.1.243 表示具体的版本号是 10.1.243。