您的位置:首页 > 理论基础

计算机系统漫游

2017-04-10 16:22 218 查看
2017年4月趁着临近毕业时间比较充裕,就买了一本深入理解计算机系统(第三版),这本书的第二版之前浅浅的读过一遍只对里面的编译与链接章节印象深刻,其他章节对我来说完全陌生,我深知这本书的好,于是重新拾起这本书。为了加深自己的记忆就开始写博客记录自己的读书笔记。

第一章: 计算机系统漫游

信息就是位+上下文,相同的二进制位在不同的上下文有着不同的含义

Amdahl定律(阿姆达尔定律),其主要思想是当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度。通过Amdahl定律可以快速的得到某个部分升级所得到的加速比。



加速比的公式如上,它等于执行升级前后的整个任务的执行时间比,而Amdahl定律提供了一种快速的方法来计算加速比,他认为加速比取悦于二个因素:

升级的部分在整个任务中所占的比例

通过升级得到改进后,改部分任务的加速比时多少



例: 我们希望升级一个用于提供web服务器的处理器,新处理器执行Web服务应用程序的计算速度时原处理器的10倍。假定原处理器有40%的时间忙于计算,60%的时间等待I/O,进行这次升级后所得到的总加速比为:



超线程有时称为多线程,是一项允许在一个CPU上执行多个控制流的技术,通过给CPU某些硬件提供多个备份,比如程序计数器,部份寄存器等,而其他的硬件部分只有一份,这样就从逻辑上提供了多个核的能力。此外常规的处理器在线程之间切换的时候需要耗费大量时钟周期,但是超线程处理器只需要一个时钟周期就可以完成线程间切换,这使得CPU能够更好的利用它的处理器资源。

超标量处理器指的是一个时钟周期可以运行多条指令的处理器

单指令、多数据并行(SIMD),允许一条指令产生多个可以并行执行的操作。



​ GCC已经内置了对SIMD指令的支持,下面这段代码通过使用SIMD指令来对两个向量(数组)进行计算,代码如下:

#include <stdio.h>
// 定义了一个包含四个元素的向量
typedef int int4 __attribute__((vector_size(sizeof(int) * 4)));

int main() {
int4 i = {1, 2, 3, 4};
int4 j = {3, 5, 7, 9};

int4 k = i * 3 + j;   // 向量之间直接运算
printf("%d, %d, %d, %d\n", k[0], k[1], k[2], k[3]);
return 0;
}


计算机系统中的抽象: 文件是多IO设备的抽象,虚拟内存是对程序存储器的抽象,进程是对一个正在运行的程序的抽象,虚拟机是对整个计算机的抽象。

参考文献

计算机体系结构:量化研究方法(第5版)

SIMD guide

simd
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息