CUDA从入门到精通(二)——NVCC编译器介绍

1. NVCC

1.1 nvcc 是什么?

nvcc(NVIDIA CUDA Compiler)是 NVIDIA CUDA 编程工具链中的编译器驱动程序。它负责将基于 CUDA C/C++ 编写的代码编译成能够在 NVIDIA GPU 上执行的程序。

nvcc 会将 CUDA 内核代码 和普通 C/C++ 代码 编译在一起,生成最终的可执行文件或对象文件,供 CPU 和 GPU 协同运行。


1.2 nvcc 的主要功能

  1. 编译 CUDA 程序
    nvcc 处理标识为 GPU 的代码段(通常是 __global____device__ 修饰的函数),并将这些代码编译成 GPU 能够理解的 PTX(并行线程执行)代码或二进制代码(SASS)。

  2. 支持混合代码
    它可以将 CPU 代码GPU 代码 混合编译,从而实现 CPU 和 GPU 的协同计算。

  3. 生成目标代码

    • PTX(Parallel Thread Execution):GPU 中间表示代码。
    • CUBIN(CUDA Binary):可直接在 GPU 上运行的二进制代码。
    • 主机代码:用于 CPU 执行的部分。
  4. 跨平台支持
    支持多个操作系统,包括 LinuxWindowsmacOS


1.3 nvcc 的基本用法

打开x64 Native Tools Command Prompt for VS 2019
在这里插入图片描述

1. 编译 CUDA 程序

假设有一个名为 example.cu 的 CUDA 源文件,可以使用以下命令进行编译:

nvcc example.cu -o example
  • example.cu:输入的 CUDA 源文件。
  • -o example:生成的可执行文件名称。

#include<stdio.h>

int main(int argc, char const *argv[])
{
    printf("hello world!\n\n");
    return 0;
}

nvcc helloworld.cu -o main

在这里插入图片描述

2. 生成 PTX 代码

要查看 CUDA 内核编译成的 PTX 代码,可以使用 -ptx 参数:

nvcc -ptx example.cu
  • 输出文件为 example.ptx
    在这里插入图片描述

3. 指定 GPU 架构

CUDA 支持不同的 GPU 架构(例如 sm_70sm_80 等),你可以使用 -arch 参数指定 GPU 目标架构:

nvcc -arch=sm_70 example.cu -o example
  • sm_70 表示为 NVIDIA Volta 架构生成代码。
  • 不同的 GPU 架构标识可以在 NVIDIA 官方文档 中找到。

4060ti,这里采用sm_86

nvcc -arch=sm_86 helloworld.cu -o main

在这里插入图片描述


4. 查看 nvcc 版本
nvcc --v
  • 输出结果会显示当前安装的 CUDA 编译器版本,例如:
    Cuda compilation tools, release 11.8, V11.8.89
    Build cuda_11.8.r11.8/compiler.31833905_0
    

在这里插入图片描述

nvcc 的工作流程

  1. 预处理nvcc 将源代码中的 CPU 和 GPU 代码区分开。
  2. 编译
    • CPU 部分:交给标准的 C/C++ 编译器 处理(如 gcccl)。
    • GPU 部分:编译为 PTXCUBIN,以便在 GPU 上执行。
  3. 链接:将 CPU 和 GPU 代码重新组合,生成可执行文件。

nvcc 的典型输出文件

  • 可执行文件.out.exe
  • PTX 文件.ptx
  • CUBIN 文件.cubin
  • 对象文件.o.obj

总结

  • nvcc 是 NVIDIA CUDA 工具链中的编译器驱动,用于编译 CUDA C/C++ 代码。
  • 它将 GPU 部分的代码转换为 PTX 或二进制代码,CPU 部分的代码交由标准 C/C++ 编译器处理。
  • 使用 nvcc 可以轻松编译 CUDA 程序,实现 CPU 和 GPU 的协同计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小陈phd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值