sherecho的个人博客

弱小和无知不是生存的障碍,傲慢才是

多核处理器

消息传递与共享存储

共享存储与消息传递的编程复杂度

任务划分与数据划分 :

  • 共享存储编程只需划分任务
  • 消息传递编程除了划分任务外,还需划分数据和考虑通信 (类似于微信与短信)

传递复杂的数据结构较困难

  • 多个指针组成的结构 :struct {int pa; int pb; int *pc}

动态通信

  • {for (i,j){ x=…; y=…; a[i][j]=b[x][y];}}

  • 进程迁移及进程数目的变化

阅读全文 »

软流水解析

基本思想:将有真相关的指令分隔到不同的循环周期内执行。

软流水后,循环体会变成装入、主体循环、排空三个部分

软流水解题思路

例子:将以下代码使用软流水优化:

image-20231105140817405
1
2
3
4
5
6
L1: LDC1  F0, 0(R1)
ADD.D F2,F0,F1
SDC1 F2,0(R1)
ADDIU R1,R1,-8
BNE R1,R2,L1
NOP

首先确定循环主体:

1.执行顺序确定

暂时不需要考虑循环控制部分,分析依赖关系画出数据流图:

阅读全文 »

存储管理

TLB基本原理

TLB实际上是操作系统中页表的Cache

TLB主要负责完成用户空间到物理空间的转化

  • 一般与Cache访问同时进行
  • TLB内容:虚地址(Cache的Tag),物理地址(Cache的 Data),保护位(Cache的状态)
  • TLB失效处理 • TLB失效时需要把相应页表内容从内存取到TLB
  • TLB失效时硬件(如X86的page walker)和软件(如MIPS的特殊例外)来填充TLB

TLB例外类型

  • Refill :

    • 如果查找TLB没有找到一个虚地址匹配(VPN2+ASID/G)

    • 例外入口:80000000 (除非exl=1) (由于TLB失效比较频繁,这里是一个单独的例外入口,不用查找,比较快

  • TLB invalid

    • 如果找到一个虚地址匹配项,但其v=0(无效)
    • 例外入口:80000180
    • 细分为两种:TLBL for loads, TLBS for stores
  • TLB modify :

    • 如果找到一个虚地址匹配项,其v=1,但D=0且访问为store

    • 例外入口80000180

mips tlb

阅读全文 »

运算部件

定点补码加法器设计

全加器

全加器的S有三级门延迟,cout端有两级门延迟。

串行进位加法器

先行进位加法器

进位的传递

\(g_i\) 是进位生成因子。当相加的两位为1的时候才会产生进位因此:\(g_i=a_i*b_i\)

阅读全文 »

转移猜测

转移指令的控制相关

以单发射为例:

  • 如果转移指令计算下一条指令地址在EX阶段计算,下一条指 令等2拍

  • 如果使用专门的地址运算部件把地址计算提前到译码阶段可以少等一拍

  • 使用一个delay slot可以不用等待

​ 但是多发射情况下延迟槽成为需要专门照顾的负担

转移指令对性能的影响

第10级产生结果,如果等待,前9级流水线stall-》4*9=36个气泡。总容量是:36+8(8是执行的8条指令,因为每8条遇到一个转移指令 )

如何减少控制相关

阅读全文 »

多发射数据通路

指令级并行的关键技术

  • 指令流水线: 时间重叠

  • 多发射: 空间重复

  • 乱序执行(有序结束): 充分利用资源

  • 动态调度:前面指令因相关而等待时,后面的可继续前进。

  • 转移猜测:在转移条件确定前,猜测某个分支取指并执行

  • 非阻塞访存:提高访存指令执行效率,减少访存阻塞

指令缓存(保留站)结构

  • 独立保留站:每个功能部件一个保留站
  • 分组保留站:多个功能部件共享保留站
  • 全局保留站:所有功能部件共享保留站
独立保留站
分组保留站
全局保留站

寄存器与保留站的关系

阅读全文 »

动态流水线

编译器静态调度

静态调度

循环展开技术

会造成代码膨胀,可以减少转移指令执行的次数,可以通过换位置消除一定的相关

硬件动态调度

动态调度基本思想

动态调度基本思想

名字相关:

名字相关
阅读全文 »

静态流水线

标准五级静态流水线

五级静态流水线

按照上面的设计,指令流水线是五级流水线如下图所示。

标准指令流水线

IF 取指

IF阶段pc取指,从上图中可以看出,pc取值有俩个来源:pc+4即顺序取值。和来自转移指令计算得到的地址。从下图中可以看出,当为转移指令时,地址是立即数的有符号扩展(有符号表明PC指针可以往前跳也可以往后跳)。这个MUX2的控制逻辑由两部分组成:判断指令是不是条件转移指令(C1),以及是否满足跳转条件(由cond产生)。

IF的PC

转移指令是否跳转如果在EX执行阶段才能算出来的话,会导致流水线堵塞两拍(下级的IF要到EX执行完以后才能完成)。因此为例减少堵塞,转移指令的地址在cond也就是ID阶段就完成了判断。这样后面只需要卡一拍。MIPS为了解决这个问题,设计了转移指令延迟槽,也就是不管指令要不要跳转,转移指令的下一条指令都要执行,这样就避免了流水线阻塞。一般可以通过调度,填充NOP提高效率,如下所示。

延迟槽
阅读全文 »

Linux 信号

什么是信号

linux系统中无时无该产生着信号.信号在linux上又称软件中断,用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。信号机制除了基本通知功能外,还可以传递附加信息。

发送信号处理信号

linux下通过kill函数由一个进程向另一个进程发送信号

1
2
3
#include <sys/types.h>
#include <signal.h>
int kill(pid_d pid,int sig)

SIG_DFL 使用信号的默认处理方式。SIG_IGN 表示忽略目标信号

中断系统调用:

当程序(处于阻塞状态)执行系统调用时收到信号,且已经为信号设置了信号处理函数,则默认情况下系统调用将被中断。可以使用sigaction 函数设置标志以自动重启被信号中断的系统调用。对于LINUX来说:如果默认行为是暂停进程的信号(SIGSTOP,SIGTTIN)就算我们不设置信号处理函数,这类信号也可以中断模型系统调用例如:(connect,epoll_wait)

阅读全文 »

cache索引结构和页着色问题

cache 结构

Cache的特征 :

Cache的内容是主存储器内容的一个子集 ,Cache没有程序上的意义,只是为了降低访存延迟 ,处理器访问Cache和访问存储器使用相同的地址。由于cache是子集而且cache和内存不一样不能天然的寻址,所以cache索引里面需要保留地址。

Cache的结构特点 :

  • 同时存储数据和地址
  • 通过地址的比较判断相应数据是否在Cache中
  • 需要考虑所需要的数据不在Cache中的情况
    • 替换机制,写策略等
cache结构

全相联

全相连中内存单元可以映射到任意块中,offset是块内偏移。这种连接方法命中率高,但是需要遍历所有的tag来搜索复杂度较高

全相连结构
阅读全文 »
0%