首页 > 其他分享 >CMU15418(1)- 背景知识

CMU15418(1)- 背景知识

时间:2024-04-16 23:35:55浏览次数:26  
标签:thread 背景 CMU15418 知识 指令 线程 内存 memory ALU

本系列是Prof Kayvon Fatahalian2017年夏季学期在清华开的一门课程,对应的CMU课程是15-418,可以在bilibili找到原始视频。

这门课我是2020年学习的,现在把一部分当时的学习笔记上传博客保存。

不同层次上的并行计算

  • 指令级并行(ILP, e.g. superscalar):由CPU硬件设计实现,在一个时钟周期内解码并执行一个指令流中的两个指令,不需要用户干预
  • 物理多核处理器(Add more cores):每个核比单核处理器速度慢,但是多个核可以共同完成一项工作,得到速度提升,属于thread-level并行
  • SIMD指令(Add more ALUs):对单个指令流中的一条指令广播到多个ALU上,在单个核上并行地执行计算(vector program),例如SSE,AVX,AVX512指令集

例如对于一个一个16核处理器,每个核有8个ALU,可以同时有16个指令流,128个元素在并行执行。

Note: 条件语句的执行(conditional execuation)可能会影响SIMD指令的工作情况,不合适的条件判断会导致多个ALU等待其中一个ALU的条件指令完成,从而引起效率下降。因此instruction coherence很重要。

Kayvon的总结:

 内存访问

指标:

  • memory latency: 进行一条内存读/写指令操作所需要的时钟周期
  • memory bandwidth: 内存系统给处理器提供数据的速度(GB/s)
  • stall: 指令流等待不能进行下一条指令,由于指令间存在依赖关系,而被依赖指令所需的内存数据没及时完成读取

如何优化?

  • cache缓存: 减少memory latency,因为cache数据物理上离CPU更近,使用了更好的存储介质
  • prefetch预读取: 掩盖memory latency,实际读取速度没有变化,但是由于预先读了数据,看起来似乎减少了延迟
  • multi-threading多线程:减少stall来掩盖latency,因为多个HW thread工作,如果一个线程在等待读取,可以切到另一个线程,不会让ALU等待,因此提高了吞吐量(throughput-oriented)

HW上的multi-thread不通过OS管理:

 一个例子

NV的1080:

Nvidia的GPU上的一个SM里面实现了64个硬件级线程(warp),每个warp可以实现32维SIMD指令。因此每个SM上有32*64=2048个并发数据。

理解CPU与GPU的区别——理解BW

GPU是为了高吞吐量而设计的,More threads → larger working set → less cache space per thread,多线程会对memory bandwidth造成压力(maximal latency hiding ability leads to memory bandwidth burden.)

为了避免内存带宽影响,需要注意:

  • 注意程序的逻辑,少从内存读数据,这里有两方面可以作为出发点考虑:
    • intra-thread,重用当前线程上一步计算结果
    • inter-thread,多个线程共享数据
  • 每次尽量做大量数学计算,少做读取/写回频繁的任务,即并行arithmetic intensity大的程序

 

标签:thread,背景,CMU15418,知识,指令,线程,内存,memory,ALU
From: https://www.cnblogs.com/hesun/p/18139537

相关文章

  • Java SE模块 面试知识整理
    基础概念与常识Java语言特点:面向对象(封装、继承、多态)平台无关性(Java虚拟机实现平台无关性,不同版本的操作系统中安装有不同版本的Java虚拟机,Java程序的运行只依赖于Java虚拟机)WriteOnce,RunAnywhere(一次编写,随处运行)支持多线程可靠性(具备异常处理和自动内存管理机制)安全......
  • 概率论基本知识
    条件概率离散情况\[P(B|A)=\dfrac{P(AB)}{P(A)}\]^ff235e[!tip]推论\[P(B|A)P(A)=P(A|B)P(B)=P(AB)\]连续情况\[f_{Y|X}(y|x)=\dfrac{f(x,y)}{f_X(x)}\]条件期望和重期望条件期望\[E(X|Y=y)=\intxp_{X|Y}(x|y)\mathrmdx\]重期望公式\[E(X)=E(E(X|Y))=\sumE(X|Y)......
  • Java架构核心基础知识硬核整理,赶快收藏起来吧
    Java架构核心基础知识硬核整理,赶快收藏起来吧Java架构核心基础lecture:波哥一、数据结构和算法1.数据结构  数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者......
  • JAVA各种系统架构图,终于有人把Java程序员必学知识点全整理出来了
    JAVA各种系统架构图,终于有人把Java程序员必学知识点全整理出来了1.spring架构图Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。Spring框架的功能......
  • 系统架构基础知识入门指南-上
    接上一篇文章《为什么测试要了解系统架构》的内容,这篇聊聊如何掌握基础的系统架构知识。从我个人的角度来说,所谓的系统架构,就是对软件系统整体结构的抽象设计。如何理解这句话呢?举个生活中常见的例子:如何盖一座房子?正常的做法是先勘探地质,然后对房子进行设计(房屋大小朝向、门......
  • 【知识点】常见的SQL优化手段
    问:有哪些常见的SQL优化手段?这也是个高频面试题,并且并非面试造火箭的那种问题,实际项目中也会有非常多的地方需要进行SQL优化避免使用Select*select*中,无用字段会增加网络带宽消耗,特别是varchar、blob、text等大字段select*无法使用Mysql优化器覆盖索引的优化。覆盖索......
  • 知识库系统的功能有哪些,可以为IT管理员解决什么问题?
    在日常工作当中,IT管理员面临着日益繁杂和快速发展的技术挑战。针对这些挑战,知识库系统被广泛应用于企业和组织中,旨在提供一个集中化、结构化的知识管理平台,为IT管理员提供便捷的知识获取和分享渠道。那么,知识库系统的功能有哪些?它又可以为IT管理员解决哪些问题呢?  知识库系统......
  • 实际项目中一般使用到的git知识
    1.项目上线分支管理流程图片压缩太厉害有些模糊700k压缩到20多k清晰些的图片地址https://project.zdzspace.cn/test-vuekey2.一些常用的git命令gitfetch拉取远程仓库最新代码但是不合并到本地分支gitmergefeature-a用于合并本地分支feature-a到当前分支常用gti......
  • 21/10/11 - 21/10/15 零碎知识记录
    1.pc端实现移动端拖动效果思路moveDown记录鼠标按下位置记录当前状态为按下拖动+moveUp记录当前状态为非拖动moseMove根据拖动状态,计算当前拖动距离判断左拖右拖边界值对元素进行移动修改鼠标按下位置,以便下次计算移动距离,不初始化会导致移动距离指数式增加,移......
  • RAG知识库优化之Rerank应用
          前面几篇文章介绍了最基本的RAG实现,也了解了RAG的基本原理。最基本的RAG流程为用户Query问题,RAG应用在向量库查询出Context,然后将Query与Context喂到LLM,LLM生成满足Query的Response答案。      从这里可以存在三元组:Query、Context和Response,如要想进一步......