编译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…

45_Lua模块与包

Lua中的模块系统是该语言的一个重要特性,它允许开发者将代码分割成更小、更易于管理的部分。通过使用模块,你可以创建可重用的代码片段,并且可以降低代码间的耦合度。下面我将详细介绍Lua模块的基本概念、语法以及一些实际案例。 1.Lua模块 1.1 模块的基本概念 从Lua 5.1…

学习华为熵减:激发组织活力(系列之三)

目录 为什么学习华为&#xff1f; 学习华为什么&#xff1f; 一、势&#xff1a;顺势而为&#xff0c;在风口上猪都会飞起来。 二、道&#xff1a;就是认识和利用规律层面&#xff0c;文化和制度创新就是企业经营之道。 三、法&#xff1a;就是一套价值管理的变革方法论。…

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 来实现…

亲测解决CUDA error: device-side assert triggered

这个问题小虎今天刚刚遇到&#xff0c;问题原因有很多。但是由于使用了cuda运行&#xff0c;报错看不出来。解决方法是用cpu运行来看错误出在哪里。 环境 Python version is: 3.10.13 | packaged by Anaconda, Inc. | (main, Sep 11 2023, 13:24:38) [MSC v.1916 64 bit (AMD…

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;序列化和反序列化的说明 序列化与反…

解决 多层跳板机情况下,ssh可以成功连但是VSCode失败

ssh bbbb -p 22 -J aaaa 成功&#xff0c;但是用 VSCode 如下配置连接失败&#xff1f; Host aaHostName aaUser aaHost bbHostName bbUser bbProxyCommand C:\Windows\System32\OpenSSH\ssh.exe -W %h:%p aa同时&#xff0c;VSCode 连接 aa 成功。那么问题出在哪里&#xff1…

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…

MySQL SQL优化技巧与原理

前言 随着业务数据量的不断增加&#xff0c;MySQL查询语句的执行效率对程序的运行效率影响逐渐增大。因此&#xff0c;进行SQL优化变得至关重要。本文将结合SQL的执行语句顺序和各种SQL场景&#xff0c;介绍一些常见的MySQL SQL优化技巧及其背后的原理。 一、MySQL SQL执行语…

移动端H5缓存问题

移动端页面缓存问题是指页面的静态资源&#xff08;如图片、JS 和 CSS 文件&#xff09;在浏览器中被缓存后&#xff0c;用户在下次访问时可以直接从本地获取缓存数据&#xff0c;而不需要每次都从服务器重新获取&#xff0c;不过这样可能会导致页面不能正确地更新或者加载最新…

长安“战疫”网络安全公益赛的一些随想

起因 今年刚进入大学&#xff0c;开始带校队&#xff0c;为了培养校队新成员&#xff0c;也就一直计划着和当地的一些高校合作交流&#xff0c;但是由于种种原因一直被搁置下来。正巧学校信息中心和四叶草有一个培训项目的合作&#xff0c;学校的网安协会也算是沾了光成为了培…

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

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

1.1.1 C语言常用的一些函数(持续更新)

总框架见&#xff08;0. 总框架-CSDN博客&#xff09; &#xff08;1&#xff09;socket (a)分配fd&#xff1b;(b)分配tcp控制块(tcb) int socket(int domain, int type, int protocol);AF_INET IPv4 Internet protocols ip(7)AF_INET6 IP…

CNCF云原生计算基金会

CNCF&#xff0c;全称为云原生计算基金会&#xff08;Cloud Native Computing Foundation&#xff09;&#xff0c;成立于2015年&#xff0c;是一个隶属于Linux基金会的非营利组织。CNCF旨在促进和支持开源技术的发展&#xff0c;特别是那些支持云原生&#xff08;cloud native…