编译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的强大计算能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/955208.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

光谱相机的光谱分辨率可以达到多少?

多光谱相机 多光谱相机的光谱分辨率相对较低&#xff0c;波段数一般在 10 到 20 个左右&#xff0c;光谱分辨率通常在几十纳米到几百纳米之间&#xff0c;如常见的多光谱相机光谱分辨率为 100nm 左右。 高光谱相机 一般的高光谱相机光谱分辨率可达 2.5nm 到 10nm 左右&#x…

案例 —— 怪物出水

目录 一&#xff0c;Ocean Setup 二&#xff0c;Water Setup 解算前设置 解算设置 解算后设置 三&#xff0c;Meshing Setup Meshing 剔除外围边界mesh 应用低频频谱变形并添加变形速度 为whitewater创建自定义的surface、vel 清理属性和组并缓存 四&#xff0c;Wh…

怎么在iPhone手机上使用便签进行记录?

宝子们&#xff0c;在这个快节奏的时代&#xff0c;灵感的火花总是一闪而过&#xff0c;待办事项也常常让人应接不暇。好在咱们的 iPhone手机便签超给力&#xff0c;能满足各种记录需求&#xff01;今天就来给大家分享一下&#xff0c;如何在 iPhone 手机上巧用便签&#xff0c…

2025宝塔API一键建站系统PHP源码

源码介绍 2025宝塔API一键建站系统PHP源码&#xff0c;对接自己的支付&#xff0c;虚拟主机也能搭建&#xff0c;小白式建站系统&#xff0c;基于宝塔面板搭建的建站系统&#xff0c;功能丰富&#xff0c;多款模板&#xff0c;每日更新 上传源码到服务器&#xff0c;浏览器访问…

【C++】拷贝构造函数与运算符重载

写在前面 拷贝构造函数、赋值运算符重载、取地址运算符都是属于类的默认成员函数&#xff01; 默认成员函数是程序猿不显示声明定义&#xff0c;编译器会中生成。 在程序编写中&#xff0c;我们也经常使用拷贝的方式来获取到对应的值&#xff0c;例如整形变量拷贝int a 0; i…

Linux:SystemV通信

目录 一、System V通信 二、共享内存 代码板块 总结 三、信号量 信号量理论 信号量接口 一、System V通信 System V IPC&#xff08;inter-process communication&#xff09;&#xff0c;是一种进程间通信方式。其实现的方法有共享内存、消息队列、信号量这三种机制。 …

2025.1.15——七、cookie注入

题目来源&#xff1a;ctfhub技能树 目录 一、打开靶机&#xff0c;整理已知信息 二、解题步骤 step 1&#xff1a;按F12查看cookie信息&#xff0c;见上 step 2&#xff1a;bp抓包修改cookie信息&#xff0c;确认注入类型 step 3&#xff1a;查看字段数 step 4&#xff…

【简博士统计学习方法】第2章:3. 感知机——学习算法之原始形式:算法解说

3. 感知机——学习算法之原始形式&#xff1a;算法解说 3.1 学习问题 给定训练数据集&#xff1a; T { ( x 1 , y 1 ) , ( x 2 , y 2 ) ⋯ , ( x N , y N ) } T\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right) \cdots,\left(x_{N}, y_{N}\right)\right\} T{(x…

【Flink系列】10. Flink SQL

10. Flink SQL Table API和SQL是最上层的API&#xff0c;在Flink中这两种API被集成在一起&#xff0c;SQL执行的对象也是Flink中的表&#xff08;Table&#xff09;&#xff0c;所以我们一般会认为它们是一体的。Flink是批流统一的处理框架&#xff0c;无论是批处理&#xff08…

web漏洞扫描有什么作用?web漏洞扫描原理

Web漏洞扫描在网络安全领域中扮演着至关重要的角色&#xff0c;web漏洞扫描有什么作用&#xff1f;Web漏洞扫描能够自动化地检测Web应用中的潜在安全漏洞&#xff0c;包括但不限于SQL注入、跨站脚本&#xff08;XSS&#xff09;、跨站请求伪造&#xff08;CSRF&#xff09;、文…

【Idea启动项目报错NegativeArraySizeException】

项目场景&#xff1a; Idea启动项目报错&#xff08;打包不报错&#xff09;&#xff0c;项目在服务器部署运行没有问题&#xff0c;尝试了重启idea、重启电脑、maven clean/install 都不行 maven-resources-production:sample: java.lang.NegativeArraySizeException: -5833…

小程序组件 —— 31 事件系统 - 事件绑定和事件对象

小程序中绑定事件和网页开发中绑定事件几乎一致&#xff0c;只不过在小程序不能通过 on 的方式绑定事件&#xff0c;也没有 click 等事件&#xff0c;小程序中绑定事件使用 bind 方法&#xff0c;click 事件也需要使用 tap 事件来进行代替&#xff0c;绑定事件的方式有两种&…

sparkSQL练习

1.前期准备 &#xff08;1&#xff09;建议先把这两篇文章都看一下吧&#xff0c;然后把这个项目也搞下来 &#xff08;2&#xff09;看看这个任务 &#xff08;3&#xff09;score.txt student_id,course_code,score 108,3-105,99 105,3-105,88 107,3-105,77 105,3-245,87 1…

GIFT ICA 下载记录

1.帮助文档 Group ICA/IVA Of fMRI Toolbox&#xff1b;【GIFT介绍】 Group ICA of fMRI Toolbox (GIFT) Walk Through&#xff1b;【流程介绍】 GIFT v1.3c Functions Srinivas Rachakonda, Eric Egolf and Vince Calhoun【流程解释】 2.下载记录 从官网下载程序包&#xff0…

从零深度学习:(2)最小二乘法

今天我们从比较简单的线性回归开始讲起&#xff0c;还是一样我们先导入包 import numpy as np import torch import matplotlib as mpl import matplotlib.pyplot as plt a torch.arange(1,5).reshape(2,2).float() a 我们利用刚刚导入的画图的包将这两个点画出来&#xff0…

02JavaWeb——JavaScript-Vue(项目实战)

一、JavaScript html完成了架子&#xff0c;css做了美化&#xff0c;但是网页是死的&#xff0c;我们需要给他注入灵魂&#xff0c;所以接下来我们需要学习 JavaScript&#xff0c;这门语言会让我们的页面能够和用户进行交互。 1.1 介绍 通过JS/js效果演示提供资料进行效果演…

【Flink系列】5. DataStream API

5. DataStream API DataStream API是Flink的核心层API。一个Flink程序&#xff0c;其实就是对DataStream的各种转换。具体来说&#xff0c;代码基本上都由以下几部分构成&#xff1a; 5.1 执行环境&#xff08;Execution Environment&#xff09; Flink程序可以在各种上下文…

大模型高并发部署方案探究

版本 内容 姓名 时间 V1.0 新建 xx 2025-01-16 声明&#xff1a;只是进行探究&#xff0c;后续真正实践后&#xff0c;会更新新的内容 前置条件&#xff1a;70B的模型&#xff0c;并发要求200 性能测试参考链接 Benchmarking LLM Inference Backends :表明一台A100(8…

MIAOYUN信创云原生项目亮相西部“中试”生态对接活动

近日&#xff0c;以“构建‘中试’生态&#xff0c;赋能科技成果转化”为主题的“科创天府智汇蓉城”西部“中试”生态对接活动在成都高新区菁蓉汇隆重开幕。活动分为成果展览、“中试”生态主场以及成果路演洽谈对接三大板块。在成果展览环节&#xff0c;成都元来云志科技有限…

pytest-instafail:让测试失败信息即时反馈

pytest-instafail&#xff1a;让测试失败信息即时反馈 前言一、简介二、优势三、安装与使用3.1 未安装时运行情况3.2 安装3.3 已安装时运行情况3.3 pytest.ini 配置选项 四、对比 总结 前言 当测试用例数量庞大时&#xff0c;定位测试失败的原因往往耗时费力。此时&#xff0c;…