编译pytorch——cuda-toolkit-nvcc

链接

  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.rhkb.cn/news/2350.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何发布自己的第一个Chrome扩展程序

如何发布自己的Chrome扩展程序 只需要六步即可完成Chrome扩展程序的发布 &#xff08;1&#xff09;首先打开google chrome 应用商城注册开发者账号的页面 &#xff08;2&#xff09;现在进行一个绑卡支付5美元的一次性注册费用即可。【不知道如何绑卡的支付的&#xff0c;文…

SpringBoot入门实现简单增删改查

本例子的依赖 要实现的内容 通过get、post、put和delete接口,对数据库中的trade.categories表进行增删改查操作。 目录结构 com.test/ │ ├── controller/ │ ├── CateController.java │ ├── pojo/ │ ├── dto/ │ │ └── CategoryDto.java │ ├─…

electron 如何申请 Mac 系统权限

对于一些使用 Electron开发的app, 需要获取一些系统权限,比如录屏权限, 获取摄像头权限,麦克风等等,类似于以下界面: 那么Electron App 应该如何申请呢? 首先我们明确一下macOS中基础权限的分类,可以分为以下几种: 隐私权限(Private Permissions) : <!-- entitlements.ma…

浅谈云计算02 | 云计算模式的演进

云计算计算模式的演进 一、云计算计算模式的起源追溯1.2 个人计算机与桌面计算 二、云计算计算模式的发展阶段2.1 效用计算的出现2.2 客户机/服务器模式2.3 集群计算2.4 服务计算2.5 分布式计算2.6 网格计算 三、云计算计算模式的成熟与多元化3.1 主流云计算服务模式的确立3.1.…

An FPGA-based SoC System——RISC-V On PYNQ项目复现

本文参考&#xff1a; &#x1f449; 1️⃣ 原始工程 &#x1f449; 2️⃣ 原始工程复现教程 &#x1f449; 3️⃣ RISCV工具链安装教程 1.准备工作 &#x1f447;下面以LOCATION代表本地源存储库的安装目录&#xff0c;以home/xilinx代表在PYNQ-Z2开发板上的目录 ❗ 下载Vivad…

AI智能体实战|使用扣子Coze搭建AI智能体,看这一篇就够了(新手必读)

有朋友看到我使用Coze搭建的AI智能体蛮实用的&#xff0c;也想自己尝试一下。那今天我就分享一下如何使用Coze&#xff08;扣子&#xff09;搭建AI智能体&#xff0c;手把手教学&#xff0c;流程超级详细&#xff0c;学会了的话&#xff0c;欢迎分享转发&#xff01; 一、搭建A…

.NET8.0多线程编码结合异步编码示例

1、创建一个.NET8.0控制台项目来演示多线程的应用 2、快速创建一个线程 3、多次运行程序&#xff0c;可以得到输出结果 这就是多线程的特点 - 当多个线程并行执行时&#xff0c;它们的具体执行顺序是不确定的&#xff0c;除非我们使用同步机制&#xff08;如 lock、信号量等&am…

nginx 实现 正向代理、反向代理 、SSL(证书配置)、负载均衡 、虚拟域名 ,使用其他中间件监控

我们可以详细地配置 Nginx 来实现正向代理、反向代理、SSL、负载均衡和虚拟域名。同时&#xff0c;我会介绍如何使用一些中间件来监控 Nginx 的状态和性能。 1. 安装 Nginx 如果你还没有安装 Nginx&#xff0c;可以通过以下命令进行安装&#xff08;以 Ubuntu 为例&#xff0…

《数据思维》之数据可视化_读书笔记

文章目录 系列文章目录前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 数据之道&#xff0c;路漫漫其修远兮&#xff0c;吾将上下而求索。 一、数据可视化 最基础的数据可视化方法就是统计图。一个好的统计图应该满足四个标准&#xff1a;准确、有…

Linux之进程

Linux之进程 一.进程进程之形ps命令进程状态特殊进程孤儿进程守护进程 进程创建之创建子进程进程特性优先级进程切换&#xff08;分时操作系统&#xff09; 二.环境变量三.进程地址空间四.进程终止&进程等待五.进程替换六.自定义shell 本篇博客希望简略的介绍进程&#xff…

漫话架构师|什么是系统架构设计师(开篇)

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” 关注犬余&#xff0c;共同进步 技术从此不孤单

在AI智能中有几种重要的神经网络类型?6种重要的神经网络类型分享!

神经网络今天已经变得非常流行&#xff0c;但仍然缺乏对它们的了解。一方面&#xff0c;我们已经看到很多人无法识别各种类型的神经网络及其解决的问题&#xff0c;更不用说区分它们中的每一个了。其次&#xff0c;在某种程度上更糟糕的是&#xff0c;当人们在谈论任何神经网络…

业务幂等性技术架构体系之消息幂等深入剖析

在系统中当使用消息队列时&#xff0c;无论做哪种技术选型&#xff0c;有很多问题是无论如何也不能忽视的&#xff0c;如&#xff1a;消息必达、消息幂等等。本文以典型的RabbitMQ为例&#xff0c;讲解如何保证消息幂等的可实施解决方案&#xff0c;其他MQ选型均可参考。 一、…

【C语言】线程----同步、互斥、条件变量

目录 3. 同步 3.1 概念 3.2 同步机制 3.3 函数接口 1. 同步 1.1 概念 同步(synchronization)指的是多个任务(线程)按照约定的顺序相互配合完成一件事情 1.2 同步机制 通过信号量实现线程间的同步 信号量&#xff1a;通过信号量实现同步操作&#xff1b;由信号量来决定…

Linux内核的启动

一、需求 Linux系统中内核处于硬件和应用层之间。整个系统启动和初始化的过程&#xff0c;Linux内核是在主处理器启动之后才会执行。不同的处理器启动流程并不相同&#xff0c;这就要求内核能支持各种处理器的初始化操作。Liux内核各个模块&#xff0c;大部分设计时做到了体系…

[手机Linux] ubuntu 错误解决

Ubuntu: 1,ttyname failed: Inappropriate ioctl for device 将 /root/.profile 文件中的 mesg n || true 改为如下内容。 vim /root/.profile tty -s && mesg n || true 2,Errors were encountered while processing: XXX XXXX sudo apt-get --purge remove xxx…

Docker的入门

一、安装Docker 本教程参考官网文档&#xff0c;链接如下: CentOS | Docker Docs 这个教程是基于你的虚拟机已经弄好了&#xff08;虚拟机用的CentOS&#xff09;&#xff0c;并且有SecureCRT或者MobaXterm等等任意一个工具 1.1 卸载旧版 如果系统中存在旧版本的Docker&a…

Onedrive精神分裂怎么办(有变更却不同步)

Onedrive有时候会分裂&#xff0c;你在本地删除文件&#xff0c;并没有同步到云端&#xff0c;但是本地却显示同步成功。 比如删掉了一个目录&#xff0c;在本地看已经删掉&#xff0c;onedrive显示已同步&#xff0c;但是别的电脑并不会同步到这个删除操作&#xff0c;在网页版…

机器学习06-正则化

机器学习06-正则化 文章目录 机器学习06-正则化0-核心逻辑脉络1-参考网址3-大模型训练中的正则化1.正则化的定义与作用2.常见的正则化方法及其应用场景2.1 L1正则化&#xff08;Lasso&#xff09;2.2 L2正则化&#xff08;Ridge&#xff09;2.3 弹性网络正则化&#xff08;Elas…

windows 极速安装 Linux (Ubuntu)-- 无需虚拟机

1. 安装 WSL 和 Ubuntu 打开命令行&#xff0c;执行 WSL --install -d ubuntu若报错&#xff0c;则先执行 WSL --update2. 重启电脑 因安装了子系统&#xff0c;需重启电脑才生效 3. 配置 Ubuntu 的账号密码 打开 Ubuntu 的命令行 按提示&#xff0c;输入账号&#xff0c;密…