Nvidia CUDA初级教程1 CPU体系架构综述

Nvidia CUDA初级教程1 CPU体系架构综述

视频:https://www.bilibili.com/video/BV1kx411m7Fk?p=2

讲师:周斌

本节内容:了解现代CPU的架构和性能优化:

  • 流水线 Pipelining
  • 分支预测 Branch Prediction
  • 超标量 Superscalar
  • 乱序执行 Out-of-Order (OoO) Excution
  • 存储器层次 Memeory Hierarchy
  • 矢量操作 Vertor Operations
  • 多核处理 Multi-Core

CPU

什么是CPU?

  • 执行指令、处理数据的器件

    • 完成基本的逻辑和算术指令
  • 现在增加了复杂功能

    • 内存接口
    • 外部设备接口
  • 包含大量的晶体管

    非常大(上亿…)

什么是指令?

  • 算术:add r4, r4 -> r4
  • 访存:load [r4] -> r7
  • 控制:jz end

对于一个编译好的程序,最优化目标:
cyclesinstruction×secondscycle\frac{cycles}{instruction}\times \frac{seconds}{cycle} instructioncycles×cycleseconds
CPI(每条指令的时钟数)&时钟周期

这两个指标彼此并不独立,会存在 trade-off。

桌面应用

桌面应用有以下特点:

  • 轻量级进程,少量线程
  • 大量分支和交互操作
  • 大量的存储器访问
  • 真正用于数值计算的指令很少

IO密集型程序

CPU性能优化

流水线

取指、译码、执行、访存、写回,逻辑上是串行的,但是在实际的CPU实现中,有大量并行优化的部分。流水线利用指令级并行 (instruction-level parallelism, ILP)

Pros: 极大地减小时钟周期

Cons: 但是会增加一些延迟和芯片面积

流水线带来的其他的问题:

  1. 具有依赖关系的指令怎样处理
  2. 分支怎么处理
  3. 流水线的长度,14级/20级?并不是越高越好

其他一些优化:

  • 旁路 Bypassing

  • 停滞 Stalls

  • 分支 Branches

分支预测

基于果蛆的分支记录,猜测下一条指令

现代分支预测器的准确度大于90%

Pros: 提升性能及能量效率

Cons: 面积增加、可能会增加延迟

分支断定

用条件语句替换分支

Pros:不适用分支预测器,减小面积,减少错误预测

超标量

常规 IPC (instructions/cycle) 受限于 1 instuction / clock

超标量:增加流水线的宽度

峰值IPC为N(N路超标量),但实际中,会有分支和调度产生的开销,需要一些技巧来接近峰值

Pros: 提升IPC

Cons: 增加了面积、N倍资源占用、旁路网络 N^2、需要更多寄存器和存储器带宽

指令调度

考虑如下指令:

xor r1, r2 -> r3
add r3, r4 -> r4
sub r5, r2 -> r3
addi r3, 1 -> r1
  • xor与add互相依赖 (Read-After-Write, RAW)
  • sub与addi互相依赖 (RAW)
  • xor与sub不依赖 (WAW) ,但是它们会用到同一个寄存器 r3

寄存器重命名

替换寄存器:

xor p1, p2 -> p6
add p6, p4 -> p7
sub p5, p2 -> p8
addi p8, 1 -> p9

现在xor与sub可以并行执行

乱序执行

重排指令,获得最大的吞吐率

  • 重排缓冲区 Reorder Buffer,记录所有执行中的指令状态
  • 发射队列/调度器 Issue Queue/Scheduler ,选择下一条执行的指令

Pros: IPC接近理想状态

Cons: 面积增加、功耗增加

存储器层次

  • 存储器越大越慢

缓存 caching

  • 将数据放在尽可能接近的位置
  • 利用:
    • 时间临近性:刚刚使用过的数据很可能会被再使用
    • 空间临近性:倾向于使用周围的临近的数据

缓存层次:

  • 硬件管理

    • L1、L2、L3缓存
  • 软件管理

    内存、磁盘

存储器的另外的考虑

  • 分区 banking
    • 避免多端口
  • 一致性 coherency
  • 控制器 memory controller
    • 多个通道,增加带宽

CPU内部的并行性

  • 指令级并行 ILP
    • 超标量
    • 乱序执行
  • 数据级并行 DLP
    • 矢量计算
  • 线程级并行 TLP
    • 同步多线程 SMT
    • 多核

向量运算

for (int i=0; i<N; i++) {A[i] = B[i] + C[i];
}

数据级并行

  • 单指令多数据 Single Instruction Multiple Data (SIMD)
    • 执行单元(ALU)很宽
    • 寄存器也很宽
for (int i=0; i<N; i+=4) {// 并行 同时计算A[i] = B[i] + C[i];A[i+1] = B[i+1] + C[i+1];A[i+2] = B[i+2] + C[i+2];A[i+3] = B[i+3] + C[i+3];
}

x86的向量运算

  • SSE2
  • AVX

线程级并行

线程

  • 线程组成
    • 指令流 instruction streams
    • 私有寄存器,程序计数器,栈
    • 共享全局变量
  • 程序员可以创建和销毁
  • 程序员或者OS都可以调度

多核

  • 将流水线完整复制
  • Sandy Bridge-E: 6 cores
    • 完整的核,除了最后一级缓存外,不共享其他资源
    • 继续保持摩尔定律
  • 多核程序核利用率的问题

锁、一致性和同一性

锁 lock

  • 问题:多个线程读写同一块数据
  • 解决方法:加锁

一致性 coherence

  • 问题:谁的数据是正确的?
  • 解决方法:缓存一致性协议

同一性 consistency

  • 问题:什么样的数据是正确的
  • 存储器同一性模型

新时代的计算技术

  • 能量墙
  • 常规传统单核处理器遇到物理约束,时钟频率 (perf/clock) 无法保持线性增长,免费的午餐要消失了

新摩尔定律

  • 处理器越来越胖,核越来越多
  • 单核的性能不会大幅提升
  • 另外一堵墙:存储器墙

处理器的存储器带宽无法满足处理能力的提升

结论

  • CPU为串行程序优化:

    • 流水线、分支预测、超标量、乱序执行、…
    • 通过高时钟频率和高利用率来降低执行时间
  • 缓慢的内存带宽(存储器带宽)将会是大问题

  • 并行处理是方向

    • Sandy Bridge-E 6-12 活动线程
  • 如果有成千上万的活动线程并发执行呢?

Ref:

https://www.bilibili.com/video/BV1kx411m7Fk?p=2

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

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

相关文章

Nvidia CUDA初级教程2 并行程序设计概述

Nvidia CUDA初级教程2 并行程序设计概述 视频&#xff1a;https://www.bilibili.com/video/BV1kx411m7Fk?p3 讲师&#xff1a;周斌 本节内容&#xff1a; 为什么需要&#xff1f;怎么做&#xff1f;一些技术和概念 串并行计算模式 串行计算模式 常规软件时串行的 设计运行…

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

Nvidia CUDA初级教程4 GPU体系架构概述 视频&#xff1a;https://www.bilibili.com/video/BV1kx411m7Fk?p5 讲师&#xff1a;周斌 本节内容&#xff1a; 为什么需要GPU三种方法提升GPU的处理速度实际GPU的设计举例&#xff1a; NVDIA GTX 480: FermiNVDIA GTX 680: Kepler GP…

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

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

Nvidia CUDA初级教程6 CUDA编程一

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

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

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

手写nms

手写nms 计算宽高的时候加1是为什么&#xff1f; 本文总结自互联网的多种nms实现&#xff0c;供参考&#xff0c;非博主原创&#xff0c;各原文链接如下&#xff0c;也建议大家动手写一写。 Ref&#xff1a; 浅谈NMS的多种实现 目标窗口检测算法-NMS非极大值抑制 一、fas…

目标检测综述

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

Nvidia CUDA初级教程7 CUDA编程二

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

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

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

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

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

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

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

LeetCode上的各种股票最大收益

LeetCode上的各种股票最大收益 对于力扣平台上的股票类型的题目&#xff1a; 121 买卖股票的最佳时机 122 买卖股票的最佳时机 II 123 买卖股票的最佳时机 III 124 买卖股票的最佳时机 IV 309 最佳买卖股票时机含冷冻期 714 买卖股票的最佳时机含手续费 剑指 Offer 63. …

建设专业化运维服务团队必要性

信息系统的生命周期涵盖&#xff1a;设计、开发、测试、部署上线、运行维护。其中&#xff0c;运行维护阶段是信息系统生命周期中的关键环节&#xff0c;其执行效果直接影响系统是否能达到预期的运行目标。为了实现这个目标&#xff0c;我们必须建立一个以业务服务为导向的专业…

docker初探

docker初探 本文旨在介绍 docker 基本的安装、常用命令和常见概念的辨析&#xff0c;方便新手入门和笔者日后查阅&#xff0c;大部分内容整理自互联网&#xff0c;原出处在文中注明。 文章目录docker初探docker安装&#xff08;mac&#xff09;版本、信息相关命令version/info…

ubuntu安装zsh、oh-my-zsh及常用配置

ubuntu安装zsh、oh-my-zsh及常用配置 目前&#xff0c;ubuntu默认的shell是bash&#xff0c;但还有一种shell&#xff0c;叫做zsh它比bash更加强大&#xff0c;功能也更加完善&#xff0c;zsh虽说功能强大&#xff0c;但是配置比较复杂导致流行度不是很高 但是好东西终究是好…

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

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

tensorboard报错:ValueError Duplicate plugins for name projector 问题的出现及解决过程

tensorboard报错&#xff1a;ValueError: Duplicate plugins for name projector 问题的出现及解决过程 记录如题问题的出现及解决过程。 报错命令及信息 笔者在终端调用 tensorboard 时&#xff1a; tensorboard --logdirruns/ --bind_all报错&#xff1a; raise ValueEr…

发布自己的Python包(Pypi)

发布自己的Python包(Pypi) 我们经常使用 Pypi 来安装包&#xff0c;但是有时候我们也想要发布自己的 Pypi 包&#xff0c;有可能我们写了一个特别牛的包&#xff0c;也有可能我们只是想使用自己常用的一些轮子&#xff0c;可能这是我们日常编码中很常用的一些轮子&#xff0c;…

Ubuntu PPA 使用指南

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

如何在 Linux 中快速地通过 HTTP 提供文件访问服务

如何在 Linux 中快速地通过 HTTP 提供文件访问服务 转自&#xff1a;https://linux.cn/article-10205-1.html 如今&#xff0c;我有很多方法来通过 Web 浏览器为局域网中的其他系统提供单个文件或整个目录的访问。我在我的 Ubuntu 测试机上测试了这些方法&#xff0c;它们如下面…