美文网首页java学习快到碗里来编程语言爱好者Java 进阶
java并发编程(十四)什么是指令集并行?

java并发编程(十四)什么是指令集并行?

作者: 我犟不过你 | 来源:发表于2021-12-23 14:56 被阅读0次

    本章节主要了解下什么指令集并行,用于理解前面章节多线程场景下出现的指令重排序问题。

    一、基础概念

    Clock Cycle Time (时钟周期时间)

    • cpu主频:即cpu内核工作的时钟频率(CPU Clock Speed)。

      通常看到的cpu参数2.5GHz、3.4GHz等就是指CPU主频。作为cpu性能的重要参数,cpu主频虽然与运算速度之间没有直接关系,但是对运算速度的提升却非常重要。

    • CPU 的 Clock Cycle Time(时钟周期时间),等于主频的倒数,意思是 CPU 能够识别的最小时间单位。

      比如说 4G 主频的 CPU 的 Clock Cycle Time 就是 0.25 ns,作为对比,我们墙上挂钟的Cycle Time 是 1s

    Cycle Per Instruction(CPI,指令平均时钟周期数)

    • 有的指令需要更多的时钟周期时间,所以引出了 CPI (Cycles Per Instruction)指令平均时钟周期数。

    Instruction Per Clock Cycle(IPC)

    • CPI 的倒数,表示每个时钟周期能够运行的指令数。

    CPU的执行时间

    CPU执行时间 = 指令数 * CPI * Clock Cycle Time

    二、指令重排序优化

    在我们小时候,应该都学习过类似的题目:

    小明的妈妈在做饭,烧水需要5分钟,洗菜需要5分钟,做饭需要5分钟,那么总共需要多少分钟?

    实际上述题目,在烧水时不耽误洗菜,可以并行执行的,也就是最后需要10分钟就可以了。

    现代处理器会设计为【一个时钟周期,完成一条执行时间最长的 CPU 指令】,而这条指令还可以划分为更小的阶段。

    一条执行指令通常会分为以下5个阶段:

    • 取指令:instruction fetch (IF)
    • 指令译码:instruction decode (ID)
    • 执行指令:execute (EX)
    • 内存访问:memory access (MEM)
    • 数据写回:register write back (WB)

    如果向上面做饭的例子一样,那么就会变成下面的样子,三道菜,需要执行三次相同的步骤:

    指令重排序.png

    如上的效率一定是不高的,所以CPU也会对其执行方式作出优化。

    • 支持流水线(Pipeline)的处理器

      现在CPU支持多级指令流水线,如上面介绍的,将指令分成5个步骤执行的CPU,我们就称之为五级指令流水线。这样的CPU可以在一个时钟周期内,同时执行5个指令的不同阶段。

      本质上来说,并没有缩短单条指令执行的时间,而是增加了在一个时钟周期内的指令执行吞吐量。

    指令重排序 (1).png
    • 超标量(SuperScalar)处理器

      处理器的内核中一般有多个执行单元(或称功能单元),如算术逻辑单元、位移单元、乘法器等等。

      未实现超标量体系结构时,CPU在每个时钟周期仅执行单条指令,因此仅有一个执行单元在工作,其它执行单元空闲。

      超标量体系结构的CPU在一个时钟周期可以同时分派(dispatching)多条指令在不同的执行单元中被执行,这就实现了指令级的并行。CPU 可以在一个时钟周期内,执行多于一条指令。

    指令重排序 (2).png

    结论

    鉴于CPU对于吞吐量的并行优化,所以带来了指令的乱序执行问题,也可以称之为指令重排序优化。

    相关文章

      网友评论

        本文标题:java并发编程(十四)什么是指令集并行?

        本文链接:https://www.haomeiwen.com/subject/emphqrtx.html