首页 > 其他分享 >常见核内核外并行机制

常见核内核外并行机制

时间:2024-08-23 19:53:28浏览次数:8  
标签:缓存 常见 并行 内核 ILP 流水线 上下文 单元

广义来说并行分为俩种,提高单元效率是时域并行,一般是通过提高 utilization,而增加单元数量则是空域并行。现代处理器中往往各种并行机制混合存在,本文旨对不同的并行机制分析归类。大部分并行机制都是针对俩个问题:1)解耦单元之间的依赖关系提高并行度 [1],以及2)访存问题,后续并行机制大都可以围绕这俩点分析,后文以问题一问题二概括之。

ILP:Core 内并行

Pipeline

流水线属于时域并行的一种。相比非流水化架构,不考虑额外引入的寄存器,硬件实际执行单元没有变化,抛开时钟在时间层面提高了硬件的 utilization。划分流水线的依据在于问题一:减少流水线上不同 stage 之间依赖关系,否则就要插入气泡或者停住流水线降低 utilization,比如 CISC 指令集复杂指令带来复杂的依赖关系,进而导致难以划分 stage,即使 RISC 中需要处理冒险问题[2]

Superscalar Pipeline

超标量属于空域并行,直接添加流水线的数量。个人理解超标量的名称来自寻址特点,即寻址到多个 scalar 粒度,这与向量处理器 SIMD 寻址到单个 vector 粒度相对应。

TLP:Core 外并行

Multi-Core

因为线程和硬件之间隔了一个操作系统,一般来说线程没有直接对应的硬件单元概念,下文为理解清晰,假设没有操作系统,线程直接对应 core。多核并行也同于空域并行,但和超标量的区别是什么?

ILP 虽然做到同时跑多条指令,但指令之间的距离是相邻或相近的,就像有一个指令窗口在慢慢滑动。这是因为每个 core 用一个缓存,所有 ILP 都基于时间局部性共用同一个缓存的数据。而 TLP 不同的 core 之间有各自不同的缓存,就像好几个窗口(上下文)在程序中同时前进一样。TLP 和 ILP 的区别在于缓存。[3]

Hyper Thread

超线程一个物理核掰俩个逻辑用属于从另一个角度挖掘局部性。相邻指令对应的数据可能复用,但某个数据不一定对应相邻指令。当某个上下文窗口的数据用完,但这个数据还有其他上下文需要复用,便切换到另一个上下文状态复用缓存数据,同时 prefetch 内存。与真正的 multi-core 在于不同的线程共享了一个缓存,时间上分别复用执行和控制单元,同时附之额外存储单元恢复和还原现场完成上下文切换。

空域 时域
ILP Superscalar Pipeline
TLP Multi-Core Hyper Thread

  1. 单元互作用的讨论可见 https://www.cnblogs.com/devil-sx/p/18351623 ↩︎

  2. https://www.cnblogs.com/devil-sx/p/18314034 ↩︎

  3. 缓存也并非完全独立,L1、L2、L3层层缓存,这几个窗口仍分布在某一个大窗口内。 ↩︎

标签:缓存,常见,并行,内核,ILP,流水线,上下文,单元
From: https://www.cnblogs.com/devil-sx/p/18376977

相关文章

  • D5 kubernetes 中pod资源常见字段及值类型(yaml)
    》pod资源包含许多配置字段,以提供更多的功能。以下是一些常见的配置字段和作用apiVersion:v1#api版本king:Pod#资源类型metadata:<Object>#资源元数据lables:......
  • 六西格玛与5S管理体系并行落地,实现生产事件精益管理
    在现代制造业中,六西格玛管理和5S管理体系是提升生产效率和质量控制的重要工具。六西格玛以其严格的数据分析方法帮助企业减少过程中的变异和缺陷,而5S管理则通过优化工作环境和流程,确保生产线的整洁、有序和高效。如何将这两大管理体系成功落地,成为许多制造企业面临的挑战。构建一......
  • 常见的通信名词
    1、单工,半双工,全双工 例如,在进行代码调试的时候,就可以只接一根线,将单片机发送的数据通过烧录工具传输给上位机。2、同步和异步    异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。    同步:发送方发出数据后,等接收方发回响应以......
  • Java核心API——collection类的常见方法
    1、数组与集合之间的转换*集合转换为数组*Collection提供了一个方法toArray。可以将当前集合转换为一个数组Collection<String>array=newArrayList<>();array.add("1");array.add("2");array.add("3");array.add("......
  • 常见的架构原则
            如果您不应使用应用组件存储应用数据和状态,那么您应该改为如何设计应用呢?随着Android应用大小不断增加,您定义的架构务必要能允许应用扩缩、提升应用的稳健性并且方便对应用进行测试。应用架构定义了应用的各个部分之间的界限以及每个部分应承担的职责。为了......
  • C语言常见概念
    1.编译器1.1编译和链接C语言是一门编译型计算机语言,C语言源代码是文本文件,文本文件本身无法执行,必须通过编译器翻译和链接器的链接,生成二进制的可执行文件,可执行文件才能执行。C语言代码放在.c为后缀的文件中,经过编译和链接2个过程,才能得到可执行程序。•每个源文件(.c)......
  • 常见问题解决 --- 为什么我们常常发现服务器没有管理的端口
    我们在扫描一台主机全端口,发现没有开放管理端口,比如windows远程桌面或者是linux的ssh登陆。我列举一下常见的原因。常规管理方式:1.管理口不是常见的3389和22端口,而改为了高位端口号,避免被人发现。2.在管理端口上加上了安全策略导致无法直接连接,比如私钥登陆方......
  • C常见面试问题
    “零”值比较boolflag;if(flag){}intflag;if(0==flag){}floatflag;constfloatEPSINON=0.000001;if(flag>=-EPSINON&&flag<=EPSINON){}sizeof和strlen区别sizeof是操作符,strlen是库函数;sizeof参数可以是变量类型,也可以是变量,strlen......
  • element plus el-table 合并行或列(根据列表数据动态合并第一列重复的单元格)
    http://element-plus.org/zh-CN/component/table.html#%E5%90%88%E5%B9%B6%E8%A1%8C%E6%88%96%E5%88%97 <scriptsetup>import{onMounted,ref}from'vue'import'./index.css'constobjectSpanMethod=({row,column,rowInde......
  • 《Linux设备驱动开发》:深入掌握Linux内核的必备指南
    文章目录......