当前位置: 首页 > news >正文

GPU 基础知识整理

萌新:

在接触一款硬件时我会:基础硬件结构,线程结构,内存布局,数据吞吐量,等方面进行学习

首先GPU的特点:

  1. 并行性能:GPU 是专门设计用于并行计算的硬件,通常具有大量的处理单元(CUDA核心或流处理器)。这使得 GPU 能够同时处理大量的数据和任务,适用于高度并行化的工作负载,如深度学习、科学计算和图形渲染。

  2. 浮点性能:GPU 在浮点运算性能上通常非常强大,可以执行大规模的浮点计算,适用于科学计算、仿真和数据分析等需要高精度计算的任务。

  3. 高内存带宽:GPU 具有高带宽的内存,可以快速读写大量数据。这对于需要大规模数据处理和存储的应用非常有帮助,如大规模数据分析和图像处理。

  4. 通用性:现代 GPU 具有通用计算能力,不仅可以用于图形渲染,还可以用于通用计算任务。CUDA 和 OpenCL 等编程模型使开发人员能够在 GPU 上执行各种应用程序,包括科学计算、深度学习、密码学等。

  5. 能效:GPU 在相对低功耗下提供了强大的计算能力,这使得它们在能效方面比传统的 CPU 更具优势。这对于大规模数据中心和移动设备非常重要。

  6. 大规模数据并行性:GPU 在处理大规模数据集时表现出色,能够加速数据密集型任务,如机器学习、数据挖掘和图像处理。

  7. 深度学习加速:GPU 对深度学习任务非常有利,因为深度神经网络的训练和推理通常涉及大量矩阵运算,而 GPU 具有出色的并行计算性能。

  8. 可编程性:现代 GPU 具有高度可编程性,允许开发人员使用编程语言(如CUDA、OpenCL、Vulkan等)编写自定义的计算核心和着色器,以适应各种应用需求。

尽管 GPU 具有这些优势,但并不是所有应用都适合在GPU 上执行。在选择硬件时,需要根据具体应用的需求和特性来考虑是否使用GPU,或者是否将CPU、FPGA等其他硬件与GPU结合使用。

并行性能是通过众多的Cuda core 和Tensor core实现的, Tensor cores是从volta之后开始有的,个人理解是V100, Vxx等。今天刚学习了A100的硬件特性,这里做一下总结:

硬件图片:

这绿色的小点就是排列的SM,SM是GPU的流处理器用来执行调度的【block 调度线程】,A100中有128个SM

每个SM 有可以放大如下图:

每个SM一共有4个Tensor core, 64个 FP32 cuda core可以划分为4个部分,每个部分中有:

        1. warp scheduler 这个是GPU的最小调度单元,32个线程为一个warp,warp内的线程执行相同指令

        2. L0 指令缓存区 

        3. 寄存器文件(看官网的介绍中新增了异步拷贝:A100 GPU 包含了一个新的异步复制指令,该指令将数据直接从全局内存加载到 SM 共享内存中,从而消除了使用中间寄存器文件( RF )的需要。异步复制减少了寄存器文件带宽,更有效地使用内存带宽,并减少了功耗。顾名思义,异步复制可以在 SM 执行其他计算时在后台完成。)每个线程不能使用超过16384/(4个warp*32每个warp执行的线程数量)个寄存器,如果超过了就会使用本地内存:

       4,LD/ST 是数据加载和存储队列, IO的地儿

一个SM中的线程共享L1 instruction/ L1 数据缓存/ 纹理缓存

线程结构:原文链接:https://blog.csdn.net/u012229282/article/details/79972014

Grid:由一个kernel启动所产生的所有线程统称为一个线程网格(Grid)。
同一线程网格中的所有线程共享同全局内存空间。一个网格有多个线程块(Block)构成,一个线程块包含一组线程,同一线程块内的线程协同可以通过“同步”和“共享内存”的方式来实现。不同线程块内的线程不能协作。
在一个网格中,我们通过以下两个坐标变量来定位一个线程,
(1)blockIdx:线程块在线程网格中ID号
(2)threadIdx:线程在线程块内的ID号
这些坐标变量是kernel函数中需要预初始化的内置变量。

当执行有一个核函数时,CUDA Runtime 为每个线程分配坐标变量blockIdx和threadIdx。基于这些坐标,我们将数据分配到不同的GPU线程上,然后并行处理所有的数据。

坐标变量blocIdx和threadIdx都是基于unit3定义的CUDA内置的向量类型,分别包含3个无符号的整数结构,可以通过x,y,z三个元素来进行索引。
 

grid->block->thread

内存结构:

CUDA内存模型 引用:CUDA内存模型详解:锁页内存、统一寻址、CPU/GPU交互 - Hurray's InfoShare

对于程序员来说,一般有两种类型的存储器:

  • 可编程的:你需要显式地控制哪些数据存放在可编程内存中
  • 不可编程的:你不能决定数据的存放位置,程序将自动生成存放位置以获得良好的性能

在CPU内存层次结构中,一级缓存和二级缓存都是不可编程的存储器。另一方面,CUDA内存模型提出了多种可编程内存的类型:

  • 寄存器
  • 共享内存
  • 本地内存:GPU内存(显存)的理解与基本使用 - 知乎
  • 常量内存
  • 纹理内存
  • 全局内存CUDA内存模型详解:锁页内存、统一寻址、CPU/GPU交互 - Hurray's InfoShare
  • 下图为这些内存空间的层次结构,每种都有不同的作用域、生命周期和缓存行为。一个Kernel核函数中的Thread线程都有自己私有的本地内存。一个Block线程块有自己的共享内存,对同一线程块中所有Thread线程都可见,其内容持续Block的整个生命周期。所有Thread都可以访问全局内存
  • 所有Thread都能访问的只读内存空间有:常量内存空间纹理内存空间全局内存常量内存纹理内存空间有不同的用途。纹理内存为各种数据布局提供了不同的寻址模式和滤波模式。对于一个应用程序来说,全局内存常量内存纹理内存中的内容具有相同的生命周期

  • 高内存带宽:

相关文章:

GPU 基础知识整理

萌新: 在接触一款硬件时我会:基础硬件结构,线程结构,内存布局,数据吞吐量,等方面进行学习 首先GPU的特点: 并行性能:GPU 是专门设计用于并行计算的硬件,通常具有大量的处理单元&am…...

stable diffusion API接口 + 扩展接口

文章目录 概要流程页面接口调用展示txt2img接口AutoDL设置扩展接口 概要 调研Stable Diffusion二次开发,查看接口文档。 基于AutoDL算力服务器,直接安装部署,非常容易上手,部署教程放下面了。 部署教程 流程 页面接口调用 页面…...

MySQL数据库基本操作和完整性约束类型详解

目录 一、增删改查的sql语句二、表完整性约束1、表完整性约束的介绍2、常见的完整性约束类型3、表完整性约束实战操作3.1.主键primary key3.2.自增键auto_increment3.3.唯一键UNIQUE3.4.null与not null3.5.默认约束 一、增删改查的sql语句 SQL(Structured Query Lan…...

unity2022版本 实现加减进度条

简介 在现代游戏开发中,用户界面 (UI) 扮演着至关重要的角色,它不仅为玩家提供信息,还增强了游戏的可玩性。加减进度条是一种常见的UI元素,它可以用于显示游戏中的进度、倒计时、资源管理和其他关键信息。在这篇博客中&#xff0…...

COCO数据集中图像的caption读取到txt文件

annotations_trainval2017.zip import os import shutil import jsoncaptions_path r"G:\SketchDiffusion\Sketchycoco\Dataset\annotations\captions_train2017.json" # 读取json文件 with open(captions_path, r) as f1:dictortary json.load(f1)# 得到images和…...

再谈Java泛型

一.类型参数的约束 我们可以对泛型传进来的参数做一些约束,比如说 用extends表明传进来的参数类型必须是必须是某个类型的子类型或者本身 当然也可以用接口约束,也是用extends表明传进来的参数类型必须实现某个接口。用&连接,注意class…...

scss使用自定义函数实现单位像素随屏幕比例动态缩放

vue中通过变量和scss函数来动态实现动态缩放像素 简单来说就是比例缩小时&#xff0c;像素单位变大&#xff0c;从而字体大小相对不变&#xff0c;以下仅处理比例缩小的状况 自定义一个属性–size&#xff0c;初始值为1px template <template><div class"hom…...

Django 静态自定义化配置

STATIC # APP本地静态资源目录&#xff08;就APP对应的&#xff09; STATIC_URL "/static/"# 远程静态文件URL&#xff08;少用&#xff09; REMOTE_STATIC_URL# 外部引用静态文件目录&#xff08;外层的&#xff09; STATICFILES_DIRS [os.path.join(BASE_DIR, &…...

TensorFlow入门(十四、数据读取机制(1))

TensorFlow的数据读取方式 TensorFlow的数据读取方式共有三种,分别是: ①预加载数据(Preloaded data) 预加载数据的方式,其实就是静态图(Graph)的模式。即将数据直接内嵌到Graph中,再把Graph传入Session中运行。 示例代码如下: import tensorflow.compat.v1 as tf tf.disabl…...

hyperf框架WebSocket 服务

1&#xff1a;安装 composer require hyperf/websocket-server2&#xff1a;配置 Server 修改 config/autoload/server.php&#xff0c;增加以下配置。 return [servers > [[name > ws,type > Server::SERVER_WEBSOCKET,host > 0.0.0.0,port > 9502,sock_typ…...

前端模块化

当我们从公司招聘上看到要求模块化的内容。 能从这几个角度回答&#xff0c;就说明我们是懂模块化的。 1. 模块化的本意&#xff0c;是当遇到一个复杂项目的时候&#xff08;简单的不建议用&#xff09;&#xff0c;把这个复杂的问题拆分成相对独立的模块&#xff0c;降低程序…...

如何使用Docker轻松构建和管理应用程序(一)

如今Docker的使用已经非常普遍&#xff0c;特别在一线互联网公司。使用Docker技术可以帮助企业快速水平扩展服务&#xff0c;从而到达弹性部署业务的能力。在云服务概念兴起之后&#xff0c;Docker的使用场景和范围进一步发展&#xff0c;如今在微服务架构越来越流行的情况下&a…...

uniapp 获取地理位置(uni#getLocation和高德sdk获取中文地址)

参考 https://uniapp.dcloud.net.cn/api/location/location.html https://ask.dcloud.net.cn/article/35070 1. uniapp api获取经纬度 uni.getLocation({type: wgs84,success: function (res) {console.log(当前位置的经度&#xff1a; res.longitude);console.log(当前位…...

openmp 通用核心 学习 2 数据环境—任务-内存模型

目录 openmp 数据环境 子句&#xff1a; 在上述三个子句中也可以传入指针和数组 openmp 任务&#xff1a; openmp内存模型&#xff1a; openmp 数据环境 子句&#xff1a; shared(list) private(list)//默认构造 值未被初始化 对于图6-5&#xff1a; //File #1 int tm…...

Linux有哪些指令

Linux操作系统提供了许多指令&#xff0c;可以帮助用户进行各种操作。以下是一些常见的Linux指令&#xff1a; ls&#xff1a;列出当前目录下的文件和目录。cd&#xff1a;改变当前工作目录。pwd&#xff1a;显示当前工作目录。mkdir&#xff1a;创建新的目录。rm&#xff1a;…...

图扑 HT for Web 风格属性手册教程

图扑软件明星产品 HT for Web 是一套纯国产化独立自主研发的 2D 和 3D 图形界面可视化引擎。HT for Web&#xff08;以下简称 HT&#xff09;图元的样式由其 Style 属性控制&#xff0c;并且不同类型图元的 Style 属性各不相同。为了方便查询和理解图元的 Style 属性&#xff0…...

oracle 数据库删除序列

oracle 数据库删除序列 要删除 Oracle 数据库中的序列&#xff0c;你可以使用以下的 SQL 命令&#xff1a; DROP SEQUENCE sequence_name;其中&#xff0c;sequence_name 是你想删除的序列的名称。你需要确保当前用户对序列拥有适当的权限。 请注意&#xff0c;删除序列将永…...

JAVA毕业设计098—基于Java+Springboot的在线教育课程视频(源码+数据库)

基于JavaSpringboot的在线教育课程视频(源码数据库)098 一、系统介绍 本系统分为管理员、教师、用户三种角色(角色菜单可自行分配) 用户功能&#xff1a; 注册、登录、课程搜索、视频观看、课程资料发布、资料浏览、用户中心、我的发布、通知信息、密码修改 教师功能&…...

如何在雷电模拟器上安装Magisk并加载movecert模块抓https包(二)

接来下在PC端安装和配置Charles&#xff0c;方法同下面链接&#xff0c;不再赘述。在模拟器上安装magisk实现Charles抓https包&#xff08;二&#xff09;_小小爬虾的博客-CSDN博客 一、记录下本机IP和代理端口 二、在手机模拟器上设置代理192.168.31.71:8888&#xff0c;设置…...

基于web的酒店客房管理系统

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 会员信息管理 客房信息管理 收藏客房管理 用户入住管理 客房清扫管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施…...

linux查看系统信息

Linux查看当前操作系统版本信息 cat /proc/version Linux version 2.6.32-696.el6.x86_64 (mockbuildc1bm.rdu2.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) ) #1 SMP Tue Mar 21 19:29:05 UTC 2017 Linux查看版本当前操作系统内核信息 uname -a Linux…...

蓝牙官网demo的记录

目录 一、官网蓝牙demo 二、可以参考的博客带蓝牙demo 一、官网蓝牙demo 平常看android官网&#xff0c;发现有两个不同的文档地址&#xff1a; 连接 | Android 开源项目 | Android Open Source Project 蓝牙概览 | Connectivity | Android Developers 蓝牙demo在 …...

Linux相关概念及常见指令

注意&#xff1a;本篇博客除了讲解Linux的相关指令&#xff0c;还穿插着Linux相关概念及原理的讲解。 账号相关指令 whoami:查看当前用户 adduser 用户名: 添加新用户 passwd 用户名&#xff1a;为这个用户设置密码 ls指令 1.Linux中文件的理解 文件是Linux中存储数据的基本单…...

CentOS 系统如何在防火墙开启端口

在 CentOS 上&#xff0c;你可以使用 firewall-cmd 命令来开启防火墙的特定服务或端口。以下是在 CentOS 上开启 3306 端口的步骤&#xff1a; 检查防火墙状态&#xff1a;可以使用以下命令检查防火墙的状态&#xff1a; sudo firewall-cmd --state如果防火墙处于活动状态&…...

2023年电工(初级)证考试题库及电工(初级)试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年电工&#xff08;初级&#xff09;证考试题库及电工&#xff08;初级&#xff09;试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#…...

vue拦截器是什么,如何使用

Vue拦截器是一种用来拦截并处理HTTP请求和响应的机制&#xff0c;它可以在请求或响应发送前或后进行一些预处理或处理。在Vue中&#xff0c;可以使用axios库来实现拦截器&#xff0c;axios库是一个基于Promise的HTTP客户端&#xff0c;可以用于浏览器和Node.js平台。 使用axio…...

CSS 之 table 表格布局

一、简介 ​ 除了使用HTML的<table>元素外&#xff0c;我们还可以通过display: table/inline-table; 设置元素内部的布局类型为表格布局。并结合table-cell、table-row等相关CSS属性值可以实现HTML中<table>系列元素的效果&#xff0c;具有表头、表尾、行、单元格…...

【Kotlin精简】第2章 集合

1 简介 在 Kotlin 中集合主要分为可变集合与只读集合&#xff0c;其中可变集合使用 “Mutable” 前缀 集合类名表示&#xff0c;比如 MutableList、MutableSet、MutableMap 等。而对于只读集合就是和 Java 中集合类名是一致。 Java 中的 List 非 Kotlin 中的 List , 因为 Kot…...

VSCODE+PHP8.2配置踩坑记录

VSCODEPHP8.2配置踩坑记录 – WhiteNights Site 我配置过的最恶心的环境之一&#xff1a;windows上的php。另一个是我centos服务器上的php。 进不了断点 端口配置和xdebug的安装 这个应该是最常见的问题了。从网上下载完php并解压到本地&#xff0c;打开vscode&#xff0c;安装…...

React 状态管理 - Context API 前世今生(下)

New Context API Provider【context的生产者组件】 createContext 创建一个Context对象&#xff0c;订阅了整个Context对象的组件&#xff0c;会从组件树中离自身最近的那个匹配的Provider中读取到当前的context值。Context.Provider 父Context对象返回的Provider组件&#x…...