(一)GPU与CUDA概述

news/2025/10/16 23:43:53/文章来源:https://www.cnblogs.com/sarpl6/p/19145963

前言

  GPU的发展起源可追溯至20世纪80-90年代,其核心驱动力来自游戏对浮点运算(FPU)的爆炸性需求。早期CPU的FPU性能仅为游戏需求的1/20,迫使英特尔通过MMX、SSE等向量处理单元提升并行计算能力,但仍无法满足需求。制造商随后开发了外接浮点运算网卡,这类“插入式卡”逐渐演变为现代GPU的雏形。
1999年,NVIDIA推出了GeForce 256,首次提出了“GPU”这一概念,标志着GPU作为通用计算平台的开始。GeForce 256具备了实时图形处理的能力,支持可编程性,使得GPU不仅限于图形显示,还能用于科学计算。
GPU技术市场:在2016年,NVIDIA凭借Pascal架构的发布和VR技术的支持,首次超越AMD和Intel,成为全球最大的GPU制造商

1、什么是GPU?

  GPU是graphics processing uint,图像处理器,与CPU(中央处理器)相对应。 显卡实际是GPU和显存共同构成的。

  GPU和CPU设计目标不同:

  • CPU旨在尽可能快的速度执行几十个线程,有少数几个可快速计算的物核心,有更多的晶体管用于数据缓存和流量控制;
  • GPU旨在尽可能多的并行执行数千个线程,有几百到几千个不那么快速计算的核心,有更多的晶体管用于算术逻辑单元;所以,GPU是靠众多的计算核心获得较高的计算性能的。如下图cpu和gpu核心对比

2、GPU硬件架构

  • 线程组织分层概念:
    线程(thread):一个CUDA的并行程序会被以许多个threads来执行
    线程束(warp):GPU中执行线程的最小单元,一个线程束由32个连续的线程组成。比线程束更小的执行单元没有意义``
    线程块 (block):数个threads会被群组成一个block,同一个block中的threads可以同步,也可以通过shared memory通信
    网格(grid):多个blocks则会再构成grid。

  • GTX550Ti GPU内部架构示意图:

  • GPU硬件部件构成:
    流处理器(SM):包含多个GPU核心、共享内存..等,见下表SM构建模块
    GPU核心:包括FP(浮点执行单元)、INT(整数执行单元)等
    千兆线程调度器:根据SM的可用性来分配每个块
    内存控制器:负责将来自全局寄存器的大块数据送入L2$
    共享高速缓存(L2$):末级缓存(LLC),在所有核心之间共享,是GPU缓存GM的地方。与CPU架构中的末级缓存L3$相比内存非常小。
    主机接口:GPU内部负责连接PCIe总线的控制器,即在CPU和GPU之间控制传输数据的部分
    SM构建模块:

  • NVIDIA不同GPU架构发展: 漫谈英伟达GPU架构进化史:从Celsius到Blackwell
    支持CUDA编程的几个系列:(http://developer.nvidia.com/cuda-gpus)
    Tesla系列:其中的内存为纠错内存
    Quadro系列:支持高速OpenGL(open graphics library)渲染,主要用于专业绘图设

    GeForce系列:主要用于游戏与娱乐,但也常用于科学计算
    Jetson系列:嵌入式设备中的GPU

3、查询我电脑的GPU信息

打开NVIDIA控制面板,查看系统信息:
image

4、统一计算设备架构

GPU自诞生来,定位为CPU监督下工作的“协处理器”,所有数据达到GPU前先到达CPU(PCIe总线连接),所以GPU计算实际是指CPU+GPU的异构计算,CPU为主机(host),而GPU为设备(device)。而CUDA、OpenCL是两种主要的GPU编程语言

  • CUDA语言
    为了运行GPGPU程序员开发的代码而不学习任何使用OpenGL计算图行学知识,nividia于2007年推出的统一计算设备架构,CUDA仅应用于Nvidia平台。

 CUDA基于C语言(CPU端)提供高性能处理,GPU端必须和CPU端一样,只用特定关键字区分主机和设备端代码。有CUDA编译器决定在那个设备上运行,GPU的并行性在GPU端显现。因此nividia设计了NVCC编译器。

  • OpenCL语言
    2009年推出,允许为intel、AMD和其他类型GPU开发GPU代码。OpenCL的设备端不必是一个GPU,可以是FPGA、DSP等具有并行架构的设备

  • CPU与GPU架构差异
    1.GPU环境中,GPU核心负责所有任务的执行,但任务指令来自CPU
    2.GPU环境中,GPU核心总不自己处理获取数据,数据都来自CPU端,计算结果再传回CPU端。因此GPU只在后台扮演计算加速器的角色,为CPU完成外包任务。
    3.CPU+GPU这种体系架构只有存在大量的并行处理单元才非常有效,而不是仅2个、4个单元。GPU在任何时候都不能低于同时执行32个任务。在GPU环境中,称合并在一起的32个线程为“线程束”。GPU将一个 核心完成的任务称为一个线程,而任何时刻执行的线程数都不会低于一个线程束。
    4.线程束概念很重要。数据必须以同样大小的数据块为单位输入GPU。
    5.数据以半个线程束大小传给GPU核心,表示将数据传入GPU核心的存储子系统每次应该输入16个数据,即要求一个能一次传输16个数据的并行存储系统(所以GPU的DRAM是DDR5构成的)
    6.GPU核心和CPU核心是完全不同的处理单元,因此有不同的ISA(指令集架构),所以必须编写两种不同的程序,但都可以用nvcc编译器编译。而CUDA语言将两者结合在一起

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

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

相关文章

实验1 面向对象程序设计C++

实验任务1: 源代码task1.cpp1 #include<iostream>2 #include<string>3 #include<vector>4 #include<algorithm>5 6 template<typename T>7 void output(const T &c);8 9 void test…

练习篇:第一次markdown成果展示

学期2025-2024-1 学号20252332 《网络》第一周学习总结教材学习内容总结思维导图如下: 【金山文档- 网络空间安全导论学习总结】 (https://www.kdocs.cn/l/ciLWfzglzFzW) 教材学习中的问题和解决问题过程问题1:为什…

DirectX RayTracing (3) 程序图元及复杂光照

DirectX RayTracing (3) 程序图元及复杂光照 ​ 离上一篇文章隔的有点久了,在国庆前其实就看完了微软官方的案例并复刻了出来,但是一直懒得写,国庆也全拿去玩了,拖到过完了国庆才动笔。 ​ 在前面两篇中基本把 DX…

微软已停止对 Windows 10 系统的支持

参考https://www.microsoft.com/zh-cn/windows/end-of-support正文博 主 :夏秋初地 址 :https://www.cnblogs.com/xiaqiuchu/p/19146827 如果对你有帮助,可以点一下{$(#green_channel_follow).click()})() "…

NiN模型

NiN模型 import torch from torch import nn from d2l import torch as d2l def NiN_block(in_chanels,out_chanels,kernel_size,padding,stride):#NiN块return nn.Sequential(nn.Conv2d(in_chanels,out_chanels,kerne…

2025秋_13

今天学习了Java

2023 ICPC Hefei

2023 ICPC Hefei J 对于一条路径,维护最大的边权是容易的,但是要求路径上最大和次大的和。于是我们就枚举一条边来作为路径上的最大边权,然后取这条边的两个端点到原点和终点的路径上的最大边权为次大值就好了。只需…

斑马日记2025.10.16

今天学习了面向对象部分的静态成员变量和静态成员函数,其实也没有太大的收获,最近代码部分的状态和学习效率偏低,明天早上先学编程,再学英语; 今天看了一位大佬的直播,也有很多收获: 1.学历永远是最重要的; 2.…

可能是 ICPC2025 西安站游记

也可能不是赛前写游记有 buff,但无所谓了。 忘了哪天 发现可以去西安站,队伍名字沿用了 EC-Fianl。 队友进行了一些微调,从一个 NOI 得分比我高的换成了另一个 NOI 得分比我高的,怎么感觉全世界就我没去 NOI2025。…

知识学报:DP(1)

未完成不是题解不是教学!!! 10.16 ATcoder Educational DP Contest A 题目给了 \(n \leq 1e5\) 个点,每个点有一个权值。从第 \(i\) 个点可以跳到第 \(i + 1\) 或第 \(i + 2\) 个点,花费是两点权值之差。 那么每个…

Active Directory用户账户安全配置与漏洞防范指南

本文详细分析了Active Directory中各类用户账户的安全风险配置,包括闲置账户、可逆加密、密码策略等问题,并提供了PowerShell检测脚本,帮助企业识别和修复账户安全漏洞。Active Directory安全提示 #2:Active Direc…

postgresql第一篇:postgresql收到一条sql语句后做了什么

postgresql第一篇:postgresql收到一条sql语句后做了什么询问chatgpt【在postgresql官方文档中,能不能看到关于postgresql如何执行一条sql语句的描述】,得到答案: The query is parsed by the parser, rewritten by…

day013

今日完成:学习了mysql,了解了一下redis(在服务端与数据库中间建立一个缓存来分担mysql的大量访问的压力). 明日完成:mysql 遇到问题:无

Git SSH 推送完整流程总结

🔑 Git SSH 推送完整流程总结 SSH 流程的核心是:用本地生成的公钥(Public Key)在 GitHub 注册您的身份,然后 Git 通过加密通道进行通信,无需密码。序号 阶段 目标 关键语句/位置1 生成密钥 在本地电脑上创建 SS…

运筹学奖学金项目促进科研多元化发展

某中心供应链优化技术机构宣布2023年INFORMS奖学金获奖名单,该项目旨在扩大运筹学和管理科学领域 underrepresented群体的参与度,涵盖工业工程、系统科学、供应链分析等多个专业方向。项目背景 2021年,某中心供应链…

RAG本地知识库是啥

RAG本地知识库是啥核心概念拆解 RAG全称:检索增强生成。是什么:一种将信息检索 与大语言模型 的生成能力相结合的技术框架。通俗理解:想象一下,你在写一篇专业报告时,不是单凭自己的记忆(就像大模型仅靠训练时的…

非托管内存怎么计算?

这个计算是否准备,或者差不多也行,我理解是差不多的 Process.GetCurrentProcess().WorkingSet64 - Gc.GetGCMemoryInfo().HeapSizeBytes作者:Rick Carter出处:http://pains.cnblogs.com/本文版权归作者和博客园共有…

ubuntu配置镜像源和配置containerd安装源

1、备份配置文件:sudo cp -a /etc/apt/sources.list /etc/apt/sources.list.bak 2、修改sources.list文件,将http://archive.ubuntu.com和http://security.ubuntu.com替换成https://mirrors.aliyun.com/,可以参考如…

dotnet集合类型性能优化的两个小儿科的知识点

比较水的文章,非常的基础,就当是记录下吧! 1.关于在集合中搜索带来的性能问题,建议用字典(Dictionary) 很多时候需要在一个集合如List中按唯一键查找某个对象,如果用Where扩展方法或者find等方法,是很慢的,特…

ABC420 AtCoder Beginner Contest 420 游记(VP)

$40min$ 切掉前五题,后面再无建树。省流 \(40min\) 切掉前五题,后面再无建树。10.16 内含剧透,请vp后再来。 不是题解!!!!!!! 赛时 A B C 均为简单模拟,省略不谈。 D 题给了一个矩阵,矩阵中有空地,墙,关…