Freeway:Maximizing MLP for Slice-Out-of-Order Execution

2023-12-11 06:40

本文主要是介绍Freeway:Maximizing MLP for Slice-Out-of-Order Execution,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Freeway: Maximizing MLP for Slice-Out-of-Order Execution

  1. 摘要:

    • 问题:
      • 为了能够掩盖内存和LLC的长访问延迟,充分的利用MLP将非常重要。尽管当前OOO处理器中能够有效的利用MLP,但是硬件复杂,能效低,能耗大
      • 之前的工作:sOOO(slice-out-of-out)是一种相对于OOO核能效更高的,能够利用MLP的微架构。这种结构将存储指令和相关指令构建成为代码片段,并且相对于剩余的指令,乱序的执行(slice内部和剩余指令都是按序,两者相对乱序)
      • sOOO的问题:在存储指令代码片中的指令由于是按序执行,会出现不相关的的指令阻塞后面的代码片中后面的指令执行(不同的slice之间,由于按序执行,导致slice之间的阻塞)
    • 论文工作:Freeway,一种新的sOOO微结构,设计了一种新的可感知相关(dependence-aware)的slice执行策略,这种策略可以跟踪相关的slices,并使它们不受MLP提取的影响
    • 结果:Freeway相对于之前的sOOO的性能提升了12%
  2. 介绍:

    • 乱序执行可以提取MLP,因为可以同时将不相关的ready的多个存储操作同时发射执行,但是这种架构的能耗也非常大。例如OOO中的指令队列的结构通常是CAM结构(content addressable memory),这种结构的功耗随着队列长度和发射宽度成超线性(super-linearly)增长
    • Runahead execution:当OOO停顿时,能够继续提取MLP,但是需要额外的资源用于checkpointing,恢复状态,追踪有效和无效的结果,伪提交和一个runahead cache,即也会增加更多的能耗
    • slice out-of-order:LSC(load slice core)
      • 构建代码片,包括load和store指令,以及相关的地址生成指令
      • slices和非slice中的指令,两类之间乱序执行,但是两类内部仍旧按序执行
      • LSC在原本的按序,stall-on-use的核中,增加一些很少的硬件,完成上述两个功能(bypass-queue用于作为slices指令的指令窗口,一些表结构用于识别slice指令)
    • inter-slice dependencies limit MLP extraction opportunities(slices之前的相关会限制MLP的提取)
      • 当一个相关的slice代码到达了bypass队列的头部,会由于producer没有结束,将会阻塞bypass队列中后面的slice执行(可能是不相关的)
      • 论文通过分析,发现这种情况最多占执行时间的83%,平均23%</

这篇关于Freeway:Maximizing MLP for Slice-Out-of-Order Execution的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/479785

相关文章

MapReduce算法 – 反转排序(Order Inversion)

译者注:在刚开始翻译的时候,我将Order Inversion按照字面意思翻译成“反序”或者“倒序”,但是翻译完整篇文章之后,我感觉到,将Order Inversion翻译成反序模式是不恰当的,根据本文的内容,很显然,Inversion并非是将顺序倒排的意思,而是如同Spring的IOC一样,表明的是一种控制权的反转。Spring将对象的实例化责任从业务代码反转给了框架,而在本文的模式中,在map

兔子--Android Studio出现错误:Error:Execution failed for task ':myapp:dexDebug'. com.android.ide.common.pro

重点在:finished with non-zero exit value 2. 这里表明了有重复的内容存在。 由于:Android Studio中引入包的方式有如下2种:    compile 'com.android.support:support-v4:22.0.0'    compile files('libs/support-v

兔子-(PHP 5.3 and above) Please set 'request_order' ini value to include C,G and P (recommended: 'CGP'

由于在PHP最新的版本中增加了一个配置项目“request_order”,默认值为“GP”,这个存在一定的安全风险。这里我们建议用户将配置更改为“CGP” 可以在php的安装目录下找到php.ini配置目录,找到下面选项: request_order = "GP"  更改为 request_order = "CGP"   重启服务器后即可。 此

Hive中order by,sort by,distribute by,cluster by的区别

一:order by order by会对输入做全局排序,因此只有一个Reducer(多个Reducer无法保证全局有序),然而只有一个Reducer,会导致当输入规模较大时,消耗较长的计算时间。关于order by的详细介绍请参考这篇文章:Hive Order by操作。 二:sort by sort by不是全局排序,其在数据进入reducer前完成排序,因此,如果用sort

切片Slice,每日一记

切片Slice 截取整个数组: s1 := arr[:] 等同于 arr[0:len(arr)],表示截取整个数组。 从索引 1 开始的部分: s2 := arr[1:] 等同于 arr[1:len(arr)],表示从索引 1 开始直到数组末尾。 到索引 4 结束的部分: s3 := arr[:4] 等同于 arr[0:4],表示从索引 0 开始到索引 4 结束(不包括 4)。 从索引 1 到 4

MySQL - 关于 Order By 乱序问题

一、问题     在 Order By 的查询语句中, 如果 Order By 的字段存在较多相同数据时,可能会出现乱序的问题,即多次查询的返回结果顺序不一致 二、方案     添加第二个 Order By 的字段,且该字段尽量唯一 三、示例 -- 原始语句SELECT * FROM detail ORDER BY type ASC-- 调整语句SELECT * FROM detai

group by和order by

order by  是按字段排序       (排序查询asc升序desc降序) group by  是按字段分类    (分组查询having只能用于group by子句,作用于组内,having条件子句可以直接跟函数表达式)       order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。

【论文分享】MyTEE: Own the Trusted Execution Environment on Embedded Devices 23‘NDSS

目录 AbstractINTRODUCTIONBACKGROUNDARMv8 ArchitectureSecurity statesTrustZone extensionsVirtualization Communication with Peripherals MOTIVATIONATTACK MODEL AND ASSUMPTIONSYSTEM DESIGNOverviewExecu

Go-Slice

要点 一个区间:[low:high]两个概念:length, capability 三个函数:make(), append(), copy() 概念 Array是在声明的时候都确定了长度,之后不可更改。Slice和数组类似,也是表示一个有序元素,但这个序列的长度可变。 在Go中,Slice序列中各元素的数据类型必须一致,因为在声明slice的时候即要指定类型。 可以在Python中找到S

MyBatis排序时使用order by 动态参数时需要注意,用$而不是#, #{}和${}的区别以及order by注入问题

ORDER BY ${columnName} 这里MyBatis不会修改或转义 字符串 。 重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。 #{}相当于jdbc中的preparedstatement ${}是输出变量的值 简单的说就是#{}传过来的参数带