编译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.mzph.cn/diannao/67254.shtml

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

相关文章

智汇云舟参编《城市轨道交通安全防范系统技术要求》国标正式发布

近日&#xff0c;根据国家标准化管理委员会官网&#xff0c;全国标准信息公共服务平台发布的公告&#xff0c;国家标准《城市轨道交通安全防范系统技术要求》&#xff08;GB/T 26718-2024&#xff09;已由全国城市轨道交通标准化技术委员会上报国家标准化管理委员会&#xff0c…

Unity解决滑动条的value值的滑动条消失问题

在这里我们看到原本的value的滑动条消失了 解决办法 把编辑器的边框往外面拉一下就可以了&#xff08;之前遇到这个问题还重启了几次unity没想到居然是这个问题&#xff09;

HarmonyOS应用开发者初级认证最新版– 2025/1/13号题库新版

1.欢迎各位读者&#xff0c;本文档来自鸿蒙开发学员亲测&#xff0c;最新版。&#xff08;考试时直接Ctrlf进行搜索&#xff0c;一定要认真比对答案&#xff0c;有的答案相似度很高&#xff09;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 欢迎…

kubernetes v1.29.XX版本HPA、KPA、VPA并压力测试

序言&#xff1a; 在大型电商、购物、直播活动期间&#xff0c;对于火爆流量的激增&#xff0c;如何保障业务稳定并且做到资源不浪费&#xff0c;自动回收。 场景&#xff1a;kubernetes 原生容器化承载业务流量&#xff08;非云环境&#xff09; 方案&#xff1a;kubernetes自…

HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (五、电影详情页的设计实现)

在上一篇文章中&#xff0c;完成了电影列表页的开发。接下来&#xff0c;将进入电影详情页的设计实现阶段。这个页面将展示电影的详细信息&#xff0c;包括电影海报、评分、简介以及相关影人等。将使用 HarmonyOS 提供的常用组件&#xff0c;并结合第三方库 nutpi/axios 来实现…

Vulnhub DC-8靶机攻击实战(一)

导语   Vulnhub DC-8靶机教程来了,好久没有更新打靶的教程了,这次我们在来更新一期关于Vulnhub DC-8的打靶训练,如下所示。 安装并且启动靶机 安装并且启动靶机,如下所示。 开始信息采集 进入到Kali中,通过如下的命令来查找到靶机的IP地址。 arp-scan -l根据上面的结…

神经网络基础-正则化方法

文章目录 1. 什么是正则化2. 正则化方法2.1 Dropout正则化2.2 批量归一化(BN层) 学习目标&#xff1a; 知道正则化的作用掌握随机失活 DropOut 策略知道 BN 层的作用 1. 什么是正则化 在设计机器学习算法时希望在新样本上的泛化能力强。许多机器学习算法都采用相关的策略来减小…

【Linux】12.Linux进程概念(1)

文章目录 1. 冯诺依曼体系结构2. 操作系统(Operator System)概念设计OS的目的胆小的操作系统定位如何理解 "管理"总结 3. 进程基本概念task_struct-PCB的一种task_ struct内容分类组织进程查看进程通过系统调用获取进程标示符通过系统调用创建进程-fork初识 1. 冯诺依…

【Linux网络编程】序列化与反序列化

目录 一&#xff0c;序列化和反序列化的说明 二&#xff0c;Jsoncpp库的介绍 三&#xff0c;Jsoncpp库的使用 3-1&#xff0c;Json::Value类 3-2&#xff0c;Json::StreamWriter类 3-3&#xff0c;Json::CharReader类 一&#xff0c;序列化和反序列化的说明 序列化与反…

Oracle报错ORA-01078、LRM-00109

虚拟机异常关机后&#xff0c;rac数据库备机无法启动数据库&#xff0c;报错如下 解决方法&#xff1a; 找到如下路径文件 执行&#xff1a; cp init.ora.016202516818 /u01/app/oracle/product/19.3.0/db/dbs/ mv init.ora.016202516818 initplm2.ora 再次进入命令行sqlpl…

STM32-keil安装时遇到的一些问题以及解决方案

前言&#xff1a; 本人项目需要使用到STM32,故需配置keil 5&#xff0c;在配置时遇到了以下问题&#xff0c;并找到相应的解决方案&#xff0c;希望能够为遇到相同问题的道友提供一些解决思路 1、提示缺少&#xff08;missing&#xff09;version 5编译器 step1&#xff1a;找…

【Hive】海量数据存储利器之Hive库原理初探

文章目录 一、背景二、数据仓库2.1 数据仓库概念2.2 数据仓库分层架构2.2.1 数仓分层思想和标准2.2.2 阿里巴巴数仓3层架构2.2.3 ETL和ELT2.2.4 为什么要分层 2.3 数据仓库特征2.3.1 面向主题性2.3.2 集成性2.3.3 非易失性2.3.4 时变性 三、hive库3.1 hive概述3.2 hive架构3.2.…

mqtt详细介绍及集成到springboot

mqtt详细介绍及集成到springboot 1.mqtt发布/订阅消息参数详细介绍2. mqtt客户端连接参数介绍3. docker-compose搭建mqtt服务端4. springboot集成mqtt实现发布订阅5. 测试注意事项 1.mqtt发布/订阅消息参数详细介绍 1.1. qosQoS0 &#xff0c;Sender 发送的一条消息&#xff0…

基于springboot的租房网站系统

作者&#xff1a;学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”&#xff0c;支持远程部署调试、运行安装。 项目包含&#xff1a; 完整源码数据库功能演示视频万字文档PPT 项目编码&#xff1…

自动化办公|xlwings简介

xlwings 是一个开源的 Python 库&#xff0c;旨在实现 Python 与 Microsoft Excel 的无缝集成。它允许用户使用 Python 脚本自动化 Excel 操作&#xff0c;读取和写入数据&#xff0c;执行宏&#xff0c;甚至调用 VBA 脚本。这使得数据分析、报告生成和其他与 Excel 相关的任务…

概率函数,累计分布函数

四. 累计分布函数 1. 累计分布函数&#xff08;CDF, Cumulative Distribution Function&#xff09; 累计分布函数是用来描述随机变量取值小于或等于某个给定值的概率。它适用于离散型和连续型随机变量&#xff0c;并且能够通过概率质量函数&#xff08;PMF&#xff09;或概率…

Flutter项目适配鸿蒙

Flutter项目适配鸿蒙 前言Flutter项目适配鸿蒙新工程直接支持ohos构建新项目编译运行 适配已有的Flutter项目 前言 目前市面上使用Flutter技术站的app不在少数&#xff0c;对于Flutter的项目&#xff0c;可能更多的是想直接兼容Harmonyos&#xff0c;而不是直接在重新开发一个…

链家房价数据爬虫和机器学习数据可视化预测

完整源码项目包获取→点击文章末尾名片&#xff01;

【20250113】基于肌肉形变测量的连续步态相位估计算法,可自适应步行速度和地形坡度...

【基本信息】 论文标题&#xff1a;Continuous Gait Phase Estimation by Muscle Deformations with Speed and Ramp Adaptability 发表期刊&#xff1a;IEEE Sensors Journal 发表时间&#xff1a;2024年5月30日 【访问链接】 论文链接&#xff1a;https://ieeexplore.ieee.or…

【全套】基于分类算法的学业警示预测信息管理系统

【全套】基于分类算法的学业警示预测信息管理系统 【摘 要】 随着网络技术的发展基于分类算法的学业警示预测信息管理系统是一种新的管理方式&#xff0c;同时也是现代学业预测信息管理的基础&#xff0c;利用互联网的时代与实际情况相结合来改变过去传统的学业预测信息管理中…