Nvidia CUDA初级教程4 GPU体系架构概述

Nvidia CUDA初级教程4 GPU体系架构概述

视频:https://www.bilibili.com/video/BV1kx411m7Fk?p=5
讲师:周斌

本节内容:

  • 为什么需要GPU
  • 三种方法提升GPU的处理速度
  • 实际GPU的设计举例:
    • NVDIA GTX 480: Fermi
    • NVDIA GTX 680: Kepler
  • GPU存储器设计

名词解释

  • FLOPS - Floating-point OPerations per Second
  • GFLOPS - One billion (10e9) FLOPS
  • TFLOPS - 1000GFLOPS

为什么需要GPU

  • 应用的需求越来越高
  • 计算机技术由应用驱动 Application Driven
    • 石油勘探
    • 气象预报

GPU图示

结构略图

GPU是一个异构的多处理器芯片,为图形图像处理优化

在这里插入图片描述

执行单元 Execute Shader

在这里插入图片描述

CPU类型的内核

在这里插入图片描述

可以看到,在常规的CPU类型的芯片中,真正进行运算的部分(左侧)所占的面积并不大,而是大缓存和上节提到的乱序执行控制逻辑、分支预测器等优化部分占了很大一部分面积。

思路1:精简、减肥

移除掉那些来帮助单个指令流执行的更快的组件。

两个核,同时执行两个程序片元

在这里插入图片描述

16个核,同时执行16个程序片元

在这里插入图片描述

指令流共享:多个程序片元共享指令流。因为如果要执行不同的指令流的话,就需要复杂的控制机构。

思路二:增加ALU,SIMD

在这里插入图片描述

  • 处理单元ALU改进
  • 指令变化
  • 多数据并行

128(16*8)个程序片元同时执行,并发16路指令流

在这里插入图片描述

这16路可以共享相同的指令流,也可以不共享。

注意:

  • SIMD处理并不总是需要显式的SIMD指令:
    • 选项一:显式的向量运算指令
      • SSE等
    • 选项二:标量指令,但是硬件进行矢量化
      • 硬件进行指令流共享
      • NVIDIA等架构
      • 多个片元共享指令流

分支处理怎么办?

在这里插入图片描述

由于共享相同的指令流,故按照根据逻辑,某些数据在分支被执行时,另一些在其他分支的数据只能等待。因为它们共享指令流,同一时间必须做相同的事情。

停滞怎么办?

指令有时需要等待其依赖的数据

思路三:片元切换,掩藏延迟

上面提到,很多时候(如分支处理、停滞等),会出现大量片元等待的情况,这无疑会大大降低效率。对此,我们有思路三:

  • 大量的独立片元相互切换
  • 通过偏远切换来掩藏延迟

给单个片元设置多个(彼此独立的)任务,当某个任务停滞时,去执行其他任务。

获得较高的吞吐 throughput。

上下文存储空间

在这里插入图片描述

18个小的上下文:更好的延迟掩藏的效果

在这里插入图片描述

12个中等大小的上下文

在这里插入图片描述

四个大的上下文:延迟隐藏效果较差

在这里插入图片描述

每个上下文更大,但是延迟隐藏能力较差

注意:

  • 上下文切换可以使软件管理也可以是硬件管理,也可以是结合管理。

总结

“我”的设计

根据上面的三个思路,我们得到了一种芯片设计:

在这里插入图片描述

  • 16个核
  • 每个核8个乘加ALU
  • 16个同时指令流
  • 64路并发指令流
  • 512 (16*4*8) 个并发程序片元
  • 256GFLOPS,1GHz

三个关键思路

  1. 保留每个核的计算部分,将其他部分尽量移除
  2. 将每个核填满 ALU (通过共享指令流)
    • 选项1:显式的 SIMD 向量指令
    • 选项2:隐式的共享,由硬件管理
  3. 通过在多组任务间切换避免停滞

不同GPU架构举例

Fermi架构

Kepler架构

存储和数据访问

CPU类型的缓存

在这里插入图片描述

CPU通常会有多级缓存

GPU型的吞吐处理核

GPU中有更多的ALU,没有传统的分级缓存,需要更高的带宽

在这里插入图片描述

带宽是非常宝贵的资源

减少带宽需求

  • 减少不必要的数据请求,做更多的计算
  • 每次访存多取数据,从而减少访存次数

现代GPU的存储器结构

在这里插入图片描述

总结

GPU的特点

GPU是异构、众核的处理器

针对吞吐优化

高效的GPU任务具备的条件

  • 具有成千上万的独立工作
    • 尽量利用大量的ALU单元
    • 大量的片元切换掩藏延迟
  • 可以共享指令流
    • 适用于 SIMD
  • 最好是计算密集的任务
    • 通信和计算的开销比例合适
    • 不要受制于访存带宽

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

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

相关文章

Nvidia CUDA初级教程5 CUDA/GPU编程模型

Nvidia CUDA初级教程5 CUDA/GPU编程模型 视频:https://www.bilibili.com/video/BV1kx411m7Fk?p6 讲师:周斌 本节内容: CPU和GPU互动模式GPU线程组织模型(需要不停强化)GPU存储模型基本的编程问题 CPU与GPU交互 各自…

Nvidia CUDA初级教程6 CUDA编程一

Nvidia CUDA初级教程6 CUDA编程一 视频:https://www.bilibili.com/video/BV1kx411m7Fk?p7 讲师:周斌 GPU架构概览 GPU特别使用于: 密集计算,高度可并行计算图形学 晶体管主要被用于: 执行计算而不是 缓存数据控制指令…

由前中后遍历序列构建二叉树

由前/中/后遍历序列构建二叉树 基础 首先,我们需要知道前中后序三种深度优先遍历二叉树的方式的具体顺序: 前序:中左右中序:左中右后序:左右中 另外,要知道只有中序前/后序可以唯一确定一棵二叉树&…

目标检测综述

目标检测综述 转自:https://zhuanlan.zhihu.com/p/383616728 论文参考:[Object Detection in 20 Years: A Survey][https://arxiv.org/abs/1905.05055] 引言 目标检测领域发展至今已有二十余载,从早期的传统方法到如今的深度学习方法&#x…

Nvidia CUDA初级教程7 CUDA编程二

Nvidia CUDA初级教程7 CUDA编程二 视频:https://www.bilibili.com/video/BV1kx411m7Fk?p8 讲师:周斌 本节内容: 内置类型和函数 Built-ins and functions线程同步 Synchronizing线程调度 Scheduling threads存储模型 Memory model重访 Matr…

详解优酷视频质量评价体系

万字长文 | 详解优酷视频质量评价体系 分享嘉宾|李静博士,阿里巴巴文娱集团资深算法专家,阿里巴巴大文娱摩酷实验室视频体验与质量团队负责人 整理出品|AICUG人工智能社区 本文地址:https://www.6aiq.com/article/1617…

视频质量评价:挑战与机遇

视频质量评价:挑战与机遇 转自:https://zhuanlan.zhihu.com/p/384603663 本文整理自鹏城实验室助理研究员王海强在LiveVideoStack线上分享上的演讲。他通过自身的实践经验,详细讲解了视频质量评价的挑战与机遇。 文 / 王海强 整理 / LiveVi…

关于二分法的边界问题及两种写法

关于二分法的边界问题及两种写法 二分查找法大家很熟悉了,对于一个有序序列,我们可以通过二分查找法在 O(logN)O(logN)O(logN) 的时间内找到想要的元素。但是,在代码实现的过程中,如果没有仔细理解清楚,二分法的边界条…

Segmentaion标签的三种表示:poly、mask、rle

Segmentaion标签的三种表示:poly、mask、rle 不同于图像分类这样比较简单直接的计算机视觉任务,图像分割任务(又分为语义分割、实例分割、全景分割)的标签形式稍为复杂。在分割任务中,我们需要在像素级上表达的是一张…

Ubuntu PPA 使用指南

Ubuntu PPA 使用指南 转自:https://zhuanlan.zhihu.com/p/55250294 一篇涵盖了在 Ubuntu 和其他 Linux 发行版中使用 PPA 的几乎所有问题的深入的文章。 如果你一直在使用 Ubuntu 或基于 Ubuntu 的其他 Linux 发行版,例如 Linux Mint、Linux Lite、Zorin…

杨宏宇:腾讯多模态内容理解技术及应用

杨宏宇:腾讯多模态内容理解技术及应用 分享嘉宾:杨宇鸿 腾讯 内容理解高级工程师 编辑整理:吴祺尧 出品平台:DataFunTalk 导读: 搜索内容的理解贯穿了整个搜索系统。我们需要从多个粒度理解搜索内容,包括语…

CUDA环境详解

CUDA环境详解 本文主要介绍 CUDA 环境,这一堆东西网上有很多博客介绍过了,我再来一篇:),参考前辈们的文章,看能不能写的更清楚一点。读后仍有问题,欢迎留言交流。 CUDA APIs CUDA是由NVIDIA推出的通用并行计算架构&…

对Docker镜像layer的理解

对Docker镜像layer的理解 转自:https://blog.csdn.net/u011069294/article/details/105583522 FROM python:3.6.1-alpine RUN pip install flask CMD [“python”,“app.py”] COPY app.py /app.py上面是一个Dockerfile的例子,每一行都会生成一个新的l…

机器学习系统:设计与实现 计算图

机器学习系统:设计与实现 计算图 转自:https://openmlsys.github.io/chapter_computational_graph/index.html 在上一章节中,我们展示了用户利用机器学习框架所编写的程序。这些用户程序包含了对于训练数据,模型和训练过程的定义。然而为了…

常见浮点数格式梳理

常见浮点数格式梳理 IEEE 754 标准 浮点数转换网站:https://www.h-schmidt.net/FloatConverter/IEEE754.html IEEE二进制浮点数算术标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值&am…

混合精度训练

混合精度训练 转自:https://zhuanlan.zhihu.com/p/441591808 通常我们训练神经网络模型的时候默认使用的数据类型为单精度FP32。近年来,为了加快训练时间、减少网络训练时候所占用的内存,并且保存训练出来的模型精度持平的条件下&#xff0…

C++面试常考题——编译内存相关

C面试常考题——编译内存相关 转自:https://leetcode-cn.com/leetbook/read/cpp-interview-highlights/e4ns5g/ C程序编译过程 编译过程分为四个过程:编译(编译预处理、编译、优化),汇编,链接。 编译预处…

关键字库函数

关键字库函数 转自&#xff1a;https://leetcode-cn.com/leetbook/read/cpp-interview-highlights/ej3mx1/ sizeof和strlen的区别 strlen 是头文件<cstring> 中的函数&#xff0c;sizeof 是 C 中的运算符。 strlen 测量的是字符串的实际长度&#xff08;其源代码如下&…

memcpy和memmove的区别以及内存重叠问题

memcpy和memmove的区别以及内存重叠问题 转自&#xff1a;https://www.codecomeon.com/posts/89/ 区别 memcpy() 和 memmove() 都是C语言中的库函数&#xff0c;在头文件 string.h 中&#xff0c;作用是拷贝一定长度的内存的内容&#xff0c;原型分别如下&#xff1a; void…

从头搭建一个深度学习框架

从头搭建一个深度学习框架 转自&#xff1a;Build a Deep Learning Framework From Scratch 代码&#xff1a;https://github.com/borgwang/tinynn 当前深度学习框架越来越成熟&#xff0c;对于使用者而言封装程度越来越高&#xff0c;好处就是现在可以非常快速地将这些框架作为…