体系结构复习3——数据级并行

体系结构复习 CH6 数据级并行


6.1 数据级并行DLP和SIMD

数据级并行(Data Level Parallel,DLP)是指处理器能够同时处理多条数据,属于SIMD模型,即单指令流多数据流模型

继续挖掘传统ILP的缺陷:

  • 提高流水线时钟频率可能导致CPI增加
  • 每个时钟周期很难预取和译码多条指令
  • 大型科学计算、媒体流处理局部性较差,Cache命中率低

并且SIMD模型有以下优点:

  • SIMD可有效挖掘DLP,如矩阵运算、图像声音等多媒体数据处理
  • SIMD比MIMD更节能,对于一组数据相同操作只需要取一次指令
  • (重要)SIMD允许程序员串行思维(串行算法应用到并行体系结构)

因此近年来DLP发展迅速,特别是在超级计算机领域


6.2 向量体系结构

DLP思想:一条指令处理长度为N的一组向量元素的计算

6.2.1 VMIPS

书上引入VMIPS向量体系结构作为MIPS体系结构的向量扩展

(1)VMIPS主要组件

  • 向量寄存器:8个向量寄存器,每个向量寄存器保存64个元素,每个元素的宽度是64位
  • 向量功能单元:包括浮点加/减、浮点乘、浮点除、整数运算、逻辑运算等向量功能单元(流水化)
  • 向量载入/存储单元:从存储器中载入向量或将向量存储到存储器中(流水化)
  • 标量寄存器:即MIPS基础的32个通用寄存器和32个浮点寄存器

(2)VMIPS主要指令

向量指令后缀VV表示两个向量寄存器操作、VS表示一个向量寄存器和一个标量寄存器操作(交换顺序是SV),.D仍然是双精度浮点的后缀,常用指令用:

ADDVV.D     V1,V2,V3
ADDSV.D     V1,F0,V2
MULVS.D     V1,V2,F0

LV          V1,R1
SV          R1,V1

(3)VMIPS程序示例

DaXPY是Linpack的某项标准测试,表示双精度a乘以向量X加上向量Y这一计算过程,用VMIPS表示为:

L.D         F0,a
LV          V1,Rx
MULVS.D     V2,V1,F0
LV          V3,Ry
ADDVV.D     V4,V2,V3
SV          Ry,V4

如果没有循环间相关,编译器可以为一段程序序列生成其VMIPS代码,称这段程序是可向量化的(可以用类似之前提到的代码调度消除循环间相关再向量化)

6.2.2 一些术语

  • 护航指令组Convoy:不包含任何结构冒险的可以在同一周期开始执行的向量指令集合
  • 链接Chain:允许向量操作在其向量源操作数的各个元素可用时立即启动,链接中第一个功能单元的结果被转发给第二个功能单元
  • 钟鸣Chime:执行护航指令组所话费的时间单位;执行m个护航指令组需要m次钟鸣,向量长度为n时需要花费m x n个时钟周期
  • 多车道Multi-Lane:多个功能单元来提高性能;单车道1条向量指令需要64周期完成,若变成4车道则只需16周期完成

6.2.3 条带挖掘——处理长度不为64的循环

若处理下面DaXPY循环:

for (i = 0; i < n; i++) {
    Y[i] = a * X[i] + Y[i];
}

其中n可以不等于向量寄存器最大长度MVL(VMIPS中MVL=64)也可以是根据前面程序动态确定的,此时需要引入一个向量长度寄存器VLR来实现条带挖掘版本的循环来适应MVL

VLR控制所有向量操作(包括运算和载入存储)的向量长度,当然VLR不能超过MVL

此时可以根据MVL把数据划分为条状,一条一条的处理,称之为条带挖掘

low = 0;
VL = n % MVL;

for (j = 0; j < n / MVL; j++) {
    for (i = low; i < low + VL; i++) {
        Y[i] = a * X[i] + Y[i];
    }
    low += VL;
    VL = MVL;
}

上述划分策略为先处理长度不足MVL的单个条带,再处理n / MVL - 1条长度为MVL的整齐条带

6.2.4 遮罩寄存器——处理向量循环中的if语句

如果可向量化的循环中存在if语句,那么有些向量元素执行操作而有些不执行,难以直接向量化:

for (i = 0; i < n; i++) {
    if (X[i] != 0) {
        X[i] -= Y[i];
    }
}

VMIPS中引入向量遮罩寄存器VM来处理if语句,VM用测试语句来测试每位向量元素,元素X[i]满足条件时置VM[i] = 1,否则置0(遮罩寄存器默认全1)

在遮罩寄存器的遮罩下,后续的向量指令只有VM[i] == 1的对应元素才执行

基本块的代码为:

LV          V1,Rx
Lv          V2,Ry
L.D         F0,#0
SNEVS.D     V1,F0       ; 若V1[i] != F0,则置VM[i]为1否则为0
SUBVV.D     V1,V1,V2
SV          V1,Rx

6.3 GPU和CUDA

见另外两篇博文:

6.4 循环级并行

第五章中介绍过循环依赖(循环间相关)和消除循环依赖的办法,循环级并行不仅要消除循环间相关还需要消除名称相关(输出相关、反相关)

6.4.1 GCD测试检测循环间相关

GCD(最大公约数)能够检测一个循环中,对数组的两次访问是否存在相关

假设一个循环中,以索引a * i + b存储一个数组元素,并以索引c * i + d载入同一个数组中的元素,GCD测试表示为:

若GCD(a,c)能够整除d-b,则存在循环间相关

如循环为X[2 * i + 3] = X[2 * i] * 5.0;GCD(a,c) == 2d-b == -3不能整除即不存在循环间相关

GCD测试最大公约数计算就是为了检测某一次循环中load的元素会不会是其他某次循环中store的元素

注:由于GCD测试没有考虑循环范围,因此某些时候GCD测试表明存在相关但实际却没有(比如刚好重合的时候已经不在数组界限范围内了),但可以证明:GCD测试能够确保不存在相关

6.4.2 消除名称相关

消除名称相关的主要方法还是之前介绍的重命名方法,如下面的循环存在输出相关和反相关:

for (i = 0; i < 100; i++) {
    Y[i] = X[i] / c;
    X[i] = X[i] + c;
    Z[i] = Y[i] + c;
    Y[i] = c - Y[i];
}

重命名为:

for (i = 0; i < 100; i++) {
    T[i] = X[i] / c;    // Y -> T,消除输出相关
    X1[i] = X[i] + c;   // X -> X1,消除反相关
    Z[i] = T[i] + c;    // Y -> T,消除反相关
    Y[i] = c - T[i];
}
时间: 2024-11-01 22:51:24

体系结构复习3——数据级并行的相关文章

体系结构复习4——线程级并行

体系结构复习 CH7 线程级并行 7.1 多处理器与线程级并行 7.1.1 多处理器体系结构 线程级并行是多处理器支持多个线程同时并行执行,多处理器体系结构大致分成两种: 对称共享存储器多处理器(SMP):又叫集中式共享存储器体系结构,核心数目较小并共享一个集中式的存储器,所有处理器能够平等地访问它(又称为UMA,一致存储器访问):SMP的存储结构大致分成三层:共享主存.共享缓存和专用缓存,本章最重要的讨论即是专用缓存和共享存储之间的一致性问题. 分布式共享存储(DSM):多处理采用物理分布式存

体系结构复习5——仓库级计算机的并行

体系结构复习 CH8 仓库级计算机的并行 注:本章不做重点要求,简略复习 8.1 仓库级计算机 8.1.1 仓库级计算机WSC 一般把作为商用因特网基础的超大型规模的集群称做仓库级计算机(WSC),WSC的建设主要关心: 成本和性能 能耗效率 可靠性(冗余备份) 网络I/O 工作负载平衡 并?性 运?成本 规模 计算WSC的可靠性(通过软件冗余来屏蔽停用次数): availability =全年宕机时间全年时间=软件故障次数×软件系统重启时间+硬件故障次数×硬件系统修复时间全年时间 8.1.2

体系结构复习1——指令级并行(循环展开和Tomasulo算法)

体系结构复习 CH5 指令级并行 5.1 指令级并行概念 5.1.1 指令级并行 指令级并行(ILP)指通过通过流水线等技术实现多条指令同时并行执行的并行技术 实现ILP主要的方法有: 依靠硬件动态发现和开发并行 依靠软件在编译时静态发现并行 5.1.2 指令间相关性 指令间的相关性限制了指令级的并行度,相关性主要分为(真)数据相关.名称相关和控制相关 (1)数据相关 指令i位于指令j的前面,下面两种情况下称指令j数据相关于指令i: 指令i生成的结果可能会被指令j用到 指令j数据相关于指令k,而

体系结构复习2——指令级并行(分支预測和VLIW)

第五章内容较多,接体系结构复习1 5.4 基于硬件猜測的指令级并行 动态分支预測是在程序运行时.依据转移的历史信息等动态确定预測分支方向.主要方法有: 基于BPB(Branch Prediction Buffer)和BHT(Branch History Table)的方法 高性能指令发送(High Performance Instruction Delivery) 5.4.1 基于BPB和BHT的方法 (1)1-bit BHT 分支指令PC的低位索引1位记录上一次转移是否成功(不是预測是否正确)

体系结构复习2——指令级并行(分支预测和VLIW)

第五章内容较多,接体系结构复习1 5.4 基于硬件推测的指令级并行 动态分支预测是在程序运行时,根据转移的历史信息等动态确定预测分支方向,主要方法有: 基于BPB(Branch Prediction Buffer)和BHT(Branch History Table)的方法 高性能指令发送(High Performance Instruction Delivery) 5.4.1 基于BPB和BHT的方法 (1)1-bit BHT 分支指令PC的低位索引1位记录上一次转移是否成功(不是预测是否正确)

一种适合于大数据的并行坐标下降法

  在机器学习中,模型的训练是一个很重要的过程,它通常是对一个目标函数进行优化,从而获取模型的参数,比较常见的优化算法包括梯度下降法.牛顿法与拟牛顿法等.但在大数据的背景下,尤其对于并行实现来说,优化算法通常是越简单越好,如坐标下降法(CD)和随机梯度下降法(SCG)就比较受欢迎. 本文是阅读完论文 Distributed Coordinate Descent Method for Learning with Big Data 的一则笔记,主要介绍算法 Hydra (一种分布式坐标下降法)的算法

SSAS中CUBE行权限数据级权限控制

原文:SSAS中CUBE行权限数据级权限控制 去年做了一个数据仓库的项目,其中涉及到了CUBE数据级权限的控制.在网上找这方面的资料,找到一个[BI] 通用数据级权限控制解决方案的实现(二):Cube中的角色设置与数据级权限控制.根据这个大牛的思路,做完之后发现有几个问题: 1. 传递给CUBE的用户必须是域用户或者数据库服务器WINDOWS用户.如果BI系统不是用的AD域认证而是传统的FORM认证,那么,BI里的用户需要对应一个WINDOWS用户. 2. 另外的WEB程序里保存对cube的角色

java网络编程——多线程数据收发并行

基本介绍与思路 收发并行 前一篇博客中,完成了客户端与服务端的简单TCP交互,但这种交互是触发式的:客户端发送一条消息,服务端收到后再回送一条.没有做到收发并行.收发并行的字面意思很容易理解,即数据的发送与接收互相不干扰,相互独立.当然,要保证服务端和客户端都能做到收发并行. 业务逻辑 脱离业务逻辑的实践是毫无意义的,先描述一下本实践中的业务逻辑:一个服务端接受多个客户端的连接,连接后,向各个客户端定时发送时间戳数据,同时在并行条件下,接受各个客户端发送来的数据并显示:客户端键盘输入字符串,发送

数据级灾备

(IDC彭帅) 一.灾备保护的什么?对于各行各业而言,用户数据.系统数据均是企业最核心.最重要的财富,但以下种种原因,都可能给数据带来不可逆转的损坏.只有完善的灾备方案,才能最终保障数据安全.业务连续性. 随着互联网市场的蓬勃发展,及用户对数据重视程度的日益提高,据智研数据中心统计数据,灾备行业的市场规模已达百亿规模,且预计会逐年持续增长. 二.什么是灾备?灾备是容灾和备份的简称.灾备方案=容灾方案+备份方案. · 容灾的定义:指在相隔较远的两地(同城或者异地)建立两套或多套功能相同的IT系统,