AMD K8 and K10 pipeline

news/2025/2/6 19:43:21/

AMD K8 and K10 pipeline

(The microarchitecture of Intel, AMD and VIA CPUs https://www.agner.org/optimize/)

  1. 流水线结构

    • 指令会尽可能少,尽可能晚地在流水线中被拆分。每一条read-modify宏指令会在执行阶段拆分成read和modify微指令,在提交之前重新合并成宏指令。
    • K8没有执行单元的执行带宽超过64或者80位,K10则支持128位的浮点执行单元。
    • AMD和Intel的最大差别:AMD包括三条并行的流水线。在取指阶段之后,指令就会分布到三个流水线中。在简单的情况下,指令会在相应的流水线提交。
    • K10有stack engine,结构类似于Intel的处理器
    • 流水线的长度估计是12级,因为测量的错误分支预测代价为12周期
    • 流水线的具体结构
      • 指令取指1, K10每周期32B,K7/8每周期16B
      • 指令取指2+转移预测
      • Pick/Scan。能够缓存7条指令,并且会将三条指令分发到三个流水线的译码器中
      • 译码1,分解指令
      • 译码2,决定输入输出寄存器
      • Pack。解码器最多生成六个宏操作,同时被排列成3个执行流水线的三个宏操作行
      • Pack/Decode。寄存器重命名。整数寄存器从“integer future file and register file”中读取。将整数指令发射到整数流水线,浮点指令发射到浮点流水线。
      • Dispatch(整数)。发射宏操作到RS(3*8)
      • Schedule(整数)。乱序调度read-modify和read-modify-write指令会被拆分成多条微操作
      • Execution units and address generation units(整数)。三条整数流水线都有ALU和AGU。整数乘法只能够在其中一条流水线完成
      • Data cache access(整数)。发射读/写请求到数据缓存
      • Data cache response(整数)
      • Retirement(整数)。按序提交宏操作
      • Stack map(浮点)。将浮点栈寄存器映射到虚拟寄存器
      • 寄存器重命名(浮点)
      • Dispatch(浮点)
      • Schedule(浮点)。RS为3*12表项。
      • Register read(浮点)。
      • Execution units(浮点)。FADD,FMUL,FMISC,均为流水化实现,但是延迟超过了1周期。整数向量操作在浮点单元执行
      • 浮点的地址计算,缓存访问,提交可能和整数流水线共用一套。
    • 浮点流水线由于增加了一些新的流水级,因此更长。最小的浮点指令延迟测量为2周期,最大的为4周期。
    • LSQ按序完成所有的内存读操作,写操作也按序完成,但是允许读操作之前的写操作之前完成
    • 作者测量:在段基址为零时,计算地址和从L1-cache读取的操作需要3个周期;否则需要4周期。(大部分情况为零,在16为系统的保护模式和实模式下为非零)
    • Vector path指令:复杂的指令,需要超过两个宏操作的指令。
  2. 指令取指:

    • K10中,取指包以32B对齐,在K7和K8中以16B对齐
    • 分支信息存储在I-cache中。jump和跳转分支的吞吐量为每两个周期一条跳转
  3. Predecoding and instruction length decoding

    • 指令长度范围为1-15B。指令的边界信息会标记在I-cache中,同时会拷贝到L2-cache中。因此指令长度译码不会是一个瓶颈,尽管每周期只能处理一条指令
    • I-cache存储着许多的预译码信息,包括指令的终止位置,操作码的位置,区分(单,双,向量)路径指令和标识jump和call的信息。其中有一部分的信息也会被复制到L2-cache中。(大量的预译码信息可能会导致带宽降低)
    • K8每周期最多可以译码三条指令,不管是否对齐
    • 每个指令译码器每周期只能够处理最多三个前缀,如果多了需要额外的周期。
  4. Single, double and vector path instructions

    • 三种指令的区分:
      • direct path single instruction:只能够产生一条宏操作的指令
      • direct path double instruction:能够产生两条宏操作的指令
      • vector path instruction :能够产生超过两条宏操作的指令
    • 处理器的吞吐量限制为每周期三条宏操作,而不是指令。
    • 向量路径指令比另外两种指令更低效,因为需要独占译码器和流水线,通常也无法进行重排序优化
    • 一条宏操作会存在多个输入相关,例如MOV [EAX+EBX],ECX
  5. 整数执行管道

    • 三条流水线的每一条都有单独的ALU和AGU。但是只有一条流水线能够执行整数乘法操作。
    • 每个周期最多允许进行两条存储操作和一条lea指令,因为D-cache只有两个端口
    • 32位整数乘法需要3周期,在全流水线的情况下仅需要一个周期。
  6. 浮点执行管道

    • 包括三个执行单元称为:FADD,FMUL,FMISC。FMUL处理乘法和除法。FMISC则用于处理写内存和类型转换操作。三个单元都可以完成读内存操作
    • 浮点执行单元有自己的寄存器堆和80位数据总线
    • 加法和乘法操作延迟为4周期,全流水化后为1个周期。除法为11个周期,无法流水化。数据传输和比较操作需要两个周期。
    • SIMD的整数操作同样在浮点流水线完成,FADD和FMUL管道都包括了整数ALU,能够处理加法,布尔运算和以为操作。整数乘法只能够在FMUL中完成。
  7. Store forwarding stalls

    • 如果读操作和前一个写操作的地址相同,但是读的数据宽度更大,则此时无法进行前递

    • 如果起始地址不同,也无法进行前递

    • 如果写操作的数据保存在AH,BH,CH,DH中,则无法进行前递

      ; Example 17.7. Store forwarding stall for AH
      mov [esi],al ; Write 8 bits
      mov bl,[esi] ; Read 8 bits. No stall
      mov [edi],ah ; Write from high 8-bit register
      mov cl,[edi] ; Read from same address. Stall
      
  8. Cache

    • I-cache和D-cache:
      • 64KB,2路组相联,64B。D-cache包括两个端口可以用于读/写。
      • 在K10中,读端口为128位,写端口为64位。在K8中,都为64位。
      • 在I-cache中,64B的cache-line被均分为4块;在D-cache中,被分成8块。在同一个bank,同一个周期无法进行俩个存储操作,除非两个访问相同cacheline的都操作
    • L2-cache:
      • 512KB(可能更多),16路组相联,64B,总线宽度128位,伪LRU替换算法
      • 数据预取只会发生在L2-cache
      • L2-cache包括了用于自动纠错的位,但是只适用于数据,而不包括代码。对于代码,预留的位域将用于保存一些额外的信息,例如指令边界,分支信息等。(代码是只读的数据,因此发生奇偶校验错误时,可以直接从RAM重新加载)

http://www.ppmy.cn/news/912588.html

相关文章

湖南计算机股份有限公司hcc-pr2e,PC台式机电脑如何连接使用HCC PR2E/K10打印机

满意答案 一、本地打印机安装 1.下载驱动 要想连接打印机,首先我们要保证我们的电脑有安装的驱动。如果没有那么我们就要下载驱动(当然如果你有驱动盘就可以直接用)。下载时一定要认真筛选,小编就下了一堆乱七八糟的附属软件。 2.安装驱动 点开软件&…

linux驱动K10运算卡,GPU推动HPC普及,Tesla K10性能揭秘

拼 命 加 载 中 ... 这两天时值国际超级计算大会,Intel推出了MIC多核架构的商品化品牌Xeon Phi,NVIDIA作为GPU计算阵营的代表也没闲着,也向公众展示了GPU计算在HPC领域的成就,并首次公开了Tesla K10的性能。 Top500的性能排名是基…

k8s minio_使用k10和带有minio的kanister变异Web钩子备份和还原k8

k8s minio If you’ve just stumbled upon looking up for ways to backup and restore containerised stateful workload on Kubernetes, then I hope you won’t get disappointed. Before you delve into this more a word of caution this one is for specific use case no…

方法论原则 - SMART原则

介绍: SMART是一个目标设定和管理工具,它有助于确保你的目标是具体、可衡量、可达成、与实际情况相符、以及有明确的时间表。 详细介绍: 以下是SMART原则的详细介绍: 具体性(Specific):目标应该具体明确&#xff0…

Go语言中的JSON库简介

Go 标准库中的 encoding/json 包提供了 JSON 数据的编码和解码功能。 在日常开发中,我们主要使用的函数有解析字符串类型的 Marshal 和 Unmarshal,以及处理流式 JSON 数据的 Encoder 和 Decoder。 一、Marshal 与 Unmarshal json.Marshal:…

Java实现面向对象编程

目录 第1章... 10 抽象和封装... 10 1.1用面向对象设计电子宠物系统... 14 1.1.1为什么使用面向对象... 14 1.1.2使用面向对象进行设计... 15 1.2通过创建对象实现领养宠物功能... 17 1.2.1创建类的对象... 17 1.2.2构造方法及其重载... 23 1.2.3常见错误... 28 1.3使…

机器人Scribit_飞檐走壁的艺术家 Scribit绘画机器人

飞檐走壁的艺术家 Scribit绘画机器人 2019-06-01 10:43:31 1点赞 1收藏 1评论 推荐理由:可以让你的家或办公室不会审美疲劳常看常新 支持在石膏墙面、玻璃面以及白板上等垂直表面作画和书写 具备擦除功能,对墙面不会造成任何损伤 无论是家庭还是办公室&a…

机器人Scribit_每日一品:飞檐走壁的艺术家 Scribit绘画机器人 _什么值得买

飞檐走壁的艺术家 Scribit绘画机器人 2019-05-28 相关品类 3C数码 相关地域 美国 支持平台 iOS&Android 参考价 2600元 推荐理由:可以让你的家或办公室不会审美疲劳常看常新 支持在石膏墙面、玻璃面以及白板上等垂直表面作画和书写 具备擦除功能,对墙…