编译pytorch——cuda-toolkit-nvcc

ops/2025/1/17 0:19:21/

链接

  1. https://blog.csdn.net/wjinjie/article/details/108997692
  2. https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#switching-between-driver-module-flavors
  3. https://forums.developer.nvidia.com/t/can-not-load-nvidia-drivers-on-ubuntu-22-10/239750
  4. https://blog.csdn.net/WCH_TechGroup/article/details/134943308
  5. https://linuxconfig.org/how-to-install-the-nvidia-drivers-on-ubuntu-22-04
  6. https://kimi.moonshot.cn/chat/cu3k0v495ebbjepepv70

ubuntu22.04-nvidia

  • ubuntu22.04安装时添加Nvidia显卡驱动,仍然显示
    在这里插入图片描述
  • 查看
$ nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
  • 查看nvcc
$ nvcc -V
找不到命令 “nvcc”,但可以通过以下软件包安装它:
sudo apt install nvidia-cuda-toolkit
  • 安装后

cuda

CUDA(Compute Unified Device Architecture)是NVIDIA推出的一种并行计算平台和编程模型,允许开发者使用NVIDIA GPU(图形处理单元)进行通用计算任务。CUDA通过提供一系列的API和工具,使得开发者能够编写在GPU上高效运行的程序,从而显著提高计算密集型任务的性能。
CUDA的核心概念

GPU架构:CUDA程序运行在NVIDIA的GPU上,这些GPU具有高度并行的架构,能够同时处理成千上万个线程。每个GPU由多个SM(Streaming Multiprocessor)组成,每个SM又包含多个CUDA核心。
线程和线程块:CUDA程序中的计算任务被分解为多个线程(thread)。线程被组织成线程块(block),线程块又被组织成网格(grid)。线程块内的线程可以协作完成任务,而网格中的线程块则独立运行。
内存层次结构:CUDA提供了多种内存类型,包括全局内存(global memory)、共享内存(shared memory)、寄存器(register)和常量内存(constant memory)。开发者需要合理管理这些内存,以优化程序性能。
CUDA核心和指令:CUDA核心是GPU的基本计算单元,能够执行简单的算术和逻辑操作。CUDA程序中的指令被编译成GPU能够理解的指令集,由CUDA核心执行。

CUDA程序的结构
CUDA程序通常包含两部分:主机代码(host code)和设备代码(device code)。

主机代码:主机代码运行在CPU上,负责初始化GPU、分配内存、传输数据、启动设备代码(kernel)和同步设备操作。主机代码通常使用C或C++编写。
设备代码(Kernel):设备代码是运行在GPU上的并行计算任务,通常用__global__关键字修饰。Kernel函数由主机代码调用,并在GPU上并行执行。每个线程执行一次Kernel函数。

cuda-toolkit

CUDA Toolkit 是 NVIDIA 提供的一套开发工具和库,用于在 NVIDIA GPU 上进行并行计算。它为开发者提供了一系列的工具和API,使得开发者能够编写、编译、调试和优化在 GPU 上运行的 CUDA 程序。以下是 CUDA Toolkit 的主要功能和组成部分:

  1. 编译器和构建工具
    nvcc:CUDA 编译器驱动程序,用于编译 CUDA 源代码(.cu 文件)并生成可执行文件或中间文件。
    CUDA 构建工具:包括链接器、归档器等,用于构建复杂的 CUDA 项目。
  2. 运行时库
    libcudart:CUDA 运行时库,提供了 CUDA 程序运行时所需的基本功能,如内存管理、设备管理、流和事件等。
    libcudadevrt:CUDA 设备运行时库,提供了设备端的运行时支持。
  3. 数学和科学计算库
    cuBLAS:CUDA 基本线性代数子程序库,提供了高效的线性代数运算,如矩阵乘法、向量运算等。
    cuFFT:CUDA 快速傅里叶变换库,用于高效的傅里叶变换计算。
    cuRAND:CUDA 随机数生成库,提供了多种随机数生成算法。
    cuSOLVER:CUDA 稀疏线性代数库,用于解决稀疏线性系统和特征值问题。
    cuSPARSE:CUDA 稀疏矩阵运算库,提供了高效的稀疏矩阵运算。
  4. 调试和分析工具
    cuda-gdb:CUDA 调试器,用于调试 CUDA 程序,支持单步执行、断点设置、变量查看等功能。
    nsight:NVIDIA 的性能分析工具,用于分析和优化 CUDA 程序的性能。
    cuda-memcheck:内存检查工具,用于检测 CUDA 程序中的内存错误,如内存泄漏、越界访问等。
  5. 其他工具和库
    NVIDIA Management Library (NVML):用于管理和监控 NVIDIA GPU 设备的库。
    CUDA Samples:提供了一系列示例程序,帮助开发者快速上手 CUDA 编程。
    CUDA Documentation:详细的文档和编程指南,帮助开发者理解和使用 CUDA Toolkit。
    主要用途
    高性能计算:
    CUDA Toolkit 使开发者能够利用 NVIDIA GPU 的并行计算能力,显著提高计算密集型任务的性能。例如,物理模拟、气象预测、分子动力学模拟等。
    机器学习和深度学习:
    许多深度学习框架(如 TensorFlow、PyTorch)依赖 CUDA Toolkit 提供的高性能计算支持,加速神经网络的训练和推理过程。
    图像和视频处理:
    CUDA Toolkit 提供的库和工具可以用于实时图像处理、视频编码和解码,提高处理效率和性能。
    数据分析:
    大规模数据处理和分析任务可以利用 CUDA Toolkit 的并行计算能力,加速数据处理和分析过程。

nvcc

nvcc(NVIDIA CUDA Compiler Driver)是NVIDIA提供的CUDA编译器驱动程序,用于编译和链接CUDA代码。CUDA(Compute Unified Device Architecture)是NVIDIA推出的并行计算平台和编程模型,允许开发者使用NVIDIA GPU进行通用计算任务。
主要功能

  • 编译CUDA源代码:
    nvcc可以将CUDA源代码(.cu文件)编译成中间表示(IR)或直接编译成GPU可执行的二进制代码。
    例如,编译一个简单的CUDA程序hello_world.cu:
nvcc hello_world.cu -o hello_world
  • 链接CUDA对象文件:
    nvcc可以链接多个CUDA对象文件(.o文件)生成可执行文件。
    例如,链接多个对象文件:
nvcc -o my_program file1.o file2.o
  • 支持多种编译选项:
    nvcc提供了丰富的编译选项,用于优化代码、指定GPU架构、生成调试信息等。
    例如,指定GPU架构(如sm_80表示Ampere架构):
nvcc -arch=sm_80 hello_world.cu -o hello_world
  • 与主机编译器集成:
    nvcc可以与主机编译器(如gcc、clang)集成,编译主机代码部分。
    例如,编译包含主机代码和CUDA代码的程序:
nvcc -Xcompiler -fPIC hello_world.cu -o hello_world
  • 基本用法
    编译CUDA源文件:
nvcc -o output_file source_file.cu
  • 编译并链接多个源文件:
nvcc -o output_file source1.cu source2.cu
  • 生成中间文件:
nvcc -dc source_file.cu  # 生成.ptx文件
nvcc -dlink source_file.o -o output_file  # 链接.ptx文件
  • 指定GPU架构:
nvcc -arch=sm_80 source_file.cu -o output_file  # 指定Ampere架构
  • 生成调试信息:
nvcc -g -G source_file.cu -o output_file  # 生成调试信息

常见编译选项
-arch:指定GPU架构(如sm_35、sm_80)。
-o:指定输出文件名。
-dc:仅编译CUDA源文件,生成中间文件(.o)。
-dlink:链接中间文件生成可执行文件。
-g、-G:生成调试信息。
-Xcompiler:传递编译器选项给主机编译器。
示例
假设你有一个简单的CUDA程序hello_world.cu,内容如下:

#include <stdio.h>__global__ void helloFromGPU() {printf("Hello World from GPU!\n");
}int main() {printf("Hello World from CPU!\n");helloFromGPU<<<1, 1>>>();cudaDeviceSynchronize();return 0;
}

你可以使用以下命令编译并运行这个程序:

nvcc -o hello_world hello_world.cu
./hello_world

输出结果应该是:

Hello World from CPU!
Hello World from GPU!

通过这些步骤,你可以使用nvcc编译和运行CUDA程序,充分利用NVIDIA GPU的强大计算能力。


http://www.ppmy.cn/ops/150671.html

相关文章

Docker常用命令大全

Docker容器相关命令&#xff1a; 创建并启动容器&#xff1a; docker run&#xff1a;创建一个新的容器并运行一个命令。例如&#xff1a;docker run -d -p 8080:80 nginx这将后台(-d)运行一个Nginx容器&#xff0c;并映射宿主机的8080端口到容器的80端口。 列出容器&#x…

ajax与json

目录 1、ajax1.1、什么是ajax1.2、ajax核心AJAX 工作原理示例代码重要属性和方法兼容性 1.3、jQuery ajax什么是jQuery ajaxjQuery AJAX 核心概念基本用法1. **使用 $.ajax() 方法**2. **使用简化方法****使用 $.get() 方法****使用 $.post() 方法** 常用配置选项示例&#xff…

Termora 一个开源的 SSH 跨平台客户端工具

Termora 是一个终端模拟器和 SSH 客户端&#xff0c;支持 Windows&#xff0c;macOS 和 Linux。 功能特性 支持 SSH 和本地终端支持 SFTP 文件传输支持 Windows、macOS、Linux 平台支持 Zmodem 协议支持 SSH 端口转发支持配置同步到 Gist支持宏&#xff08;录制脚本并回放&…

c++ 手写queue循环队列

继承与多态 继承 父子出现同名的成员问题 #include <iostream>using namespace std; //父子类中出现重名成员 //定义一个父类 class Father{ public:string name; protected:int pwd; private:int money; public:Father(){cout<<"Father::构造"<&l…

从玩具到工业控制--51单片机的跨界传奇【2】

咱们在上一篇博客里面讲解了什么是单片机《单片机入门》&#xff0c;让大家对单片机有了初步的了解。我们今天继续讲解一些有关单片机的知识&#xff0c;顺便也讲解一下我们单片机用到的C语言知识。如果你对C语言还不太了解的话&#xff0c;可以看看博主的C语言专栏哟&#xff…

如何通过 Zero Trust 模型防止内外部威胁?

随着网络攻击方式的不断演化&#xff0c;传统的安全防护措施逐渐暴露出明显的不足。无论是企业内部员工的操作失误&#xff0c;还是外部黑客的精心策划&#xff0c;传统的“边界防御”模式已不再能够有效地应对日益复杂的网络威胁。为了应对这些挑战&#xff0c;Zero Trust&…

OpenGL中Shader LOD失效

1&#xff09;OpenGL中Shader LOD失效 2&#xff09;DoTween的GC优化 3&#xff09;开发微信小程序游戏有没有类似Debug真机图形的方法 4&#xff09;射线和Mesh三角面碰撞检测的算法 这是第418篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;涵盖了U…

【编程语言】C/C++语言常见标准和规范

C/C 是两种功能强大且广泛使用的编程语言。尽管它们没有像 Java 那样强制性的命名规则&#xff0c;但为了提高代码的可读性和可维护性&#xff0c;遵循一些普遍认同的编程规范和标准仍然是非常重要的。本文将探讨 C/C 编程中的一些命名规范及标准&#xff0c;以帮助开发者编写更…