计组-实验-P0
电路模块设计
在计算机科学中领域中有一句名言,“在计算机科学中的任何问题都可以通过增加一个间接层来解决”(Any problem in computer science can be solved with another layer of indirection. )。
在搭建功能较为复杂,重复性部件较多的电路(如通用寄存器堆)时,如果全部使用手工搭建会消耗较多时间,过程中也容易产生接线错误等问题。我们可以尝试采用代码生成 XML 文本等自动化方法来辅助进行模块搭建。
ogisim 使用的文件是 .circ 文件,它是使用扩展性标记语言编写的文件,Logisim 通过这种文件来存储电路。这是一种描述性文件,和网页用的语言 HTML 类似,可以通过直接修改文件来更改电路图。作为一种 XML 文件,它主要是被用于传输数据,而非显示数据,这是与 HTML 的不同之处,因此它的标签均是可以自定义的。只需满足如 <foo>bar</foo> 式的格式即可,在 Logisim 中同样也有 Logisim 自行规定的一些标签,通过标签的类型其中比较常见的有:
<c ...
计组-理论-主存储器
存储器概述
1个字节8位,一个字一般2两个或4个字节
性能描述
存取时间TAT_ATA:指读或写操作的时间:
随机访问存储器:从给定地址到完成读写操作的时间
其他类型:将读写机构定位到目标位置所用的时间
存取周期TCT_CTC:对于RAM,指两次访问存储单元之间的最小时间间隔
第一次访问(读/写)-> 第二次访问(读/写)
TC>TAT_C>T_ATC>TA
带宽:单位时间内存取的数据量
一般的随机访问存储器:1/Cycle time1/\text{Cycle time}1/Cycle time
其他类型:TN=TA+N/RT_N=T_A+N/RTN=TA+N/R,TNT_NTN指读写N bits所需的平均时间
层次描述
分类
半导体存储器从访问方式上区分:
RAM:随机存取存储器
SRAM static:静态:用作Cache
DRAM dynamic:动态:用作主存
静态相对而言集成度低
ROM:只读存储器
不可在线改写内容的ROM
快擦除存储器
存储单元电路
存储单元电路用来存储一位二进制信息。拥有两种稳定状态 ...
并行计算-CUDA
CUDA概述
和CPU在设计理念上的不同:GPU有大量ALU,CPU大量面积留作Cache
软件上的名词
CUDA中线程也可以分成三个层次:线程、线程块和线程网络。
线程是CUDA中基本执行单元,由硬件支持、开销很小,每个线程执行相同代码;
线程块(Block)是若干线程的分组,Block内一个块根据不同的GPU规格至多512个线程、或1024个线程,线程块可以是一维、二维或者三维的;
线程网络(Grid)是若干线程块的网格,Grid是一维和二维的。
线程组成线程块,线程块组成线程网络
线程用ID索引,线程块内用局部ID标记threadID,配合blockDim和blockID可以计算出全局ID,用于SIMT(Single Instruction Multiple Thread单指令多线程)分配任务。
硬件上
GPU上有很多计算核心也就是Streaming Multiprocessor (SM),在具体的硬件执行中,一个SM会同时执行一组线程,在CUDA里叫warp(一般32个线程或64线程)。
GPU在管理线程的时候是以线程块为单元调度到SM上执行。每个block中以warp ...
并行计算-MPI
在消息传递程序中,将运行在一个核-内存对上的程序称为一个进程
消息传递的实现称为MPI,调用函数进行通信:一个进程调用发送函数,一个进程调用接受函数
MPI的本质是函数库,用于进行进程之间的通信,故并行运行的实现需要MPI+X,利用MPI辅助并行计算方法(pthread、openmp)来实现
1234567891011121314151617181920212223242526#include<mpi.h>#include<stdio.h>int main(int argc, char** argv){ //Initialize the MPI environment MPI_Init(NULL, NULL); //Get the number of processes int world_size; MPI_Comm_size(MPI_COMM_WORLD, &world_size); //Get the rank of the process int world_rank; MPI_Comm_rank(MPI_COMM_WO ...
并行计算-openMp
OpenMP:共享内存系统编程模型
共享内存:所有人对内存的修改能被其他用户、线程看到
OpenMP可以由编译器管理线程,较pthread实现了自动对线程的管理
并行计算-pthread
Pthread:共享内存系统并行编程模型
所有处理器能看到同样的内存地址空间
因为访问冲突会加重,一般最多32个核
线程:轻量级的进程,多个线程可以共享进程中的空间
基于c和c++,基于类unix系统(linux,windows)
每个线程都有一个在进程中唯一的线程标识符,用一个数据类型 pthread_t 表示,该数据类型在 Linux 中就是一个无符号长整型数据。
常用函数
线程的创建:pthread_create
pthread_create:创建一个线程,在其中执行对应的函数start_routine。线程需要提前利用pthread_t threads[NUM_THREADS];定义
1int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
功能说明:创建一个线程。
参数说明:
thread 是线程标识符,但这个参数不是由用户指定的,而是由 pthread_create 函数在创建时将新的线程的标识符放到这个变 ...
并行计算-硬件软件基础
并行硬件和软件
背景知识
冯诺依曼结构
CPU:控制单元+ALU
控制单元负责决定该执行寄存器中的哪些指令
寄存器:存储CPU中的数据和程序执行时的状态信息
程序计数器:特殊的寄存器,存放下一条指令的地址
冯诺依曼瓶颈:主存和CPU分开,限制了指令和数据访问的速率
进程与线程
进程
OS负责管理计算机的软件和硬件资源,决定程序什么时候能运行。当运行程序时,OS创造一个进程。
进程是运行着的程序的一个实例
可执行的机器语言程序
一块内存空间,包括可执行代码,一个用于跟踪执行函数的调用栈、一个堆,以及其他内存区域
OS分配给进程的资源描述符,如文件描述符
安全信息
进程状态信息
多任务:OS提供对同时运行几个程序的支持。单核上体现为每个进程只运行一个时间片,快速切换。进程切换花费较长的时间
线程
阻塞:进程等待默写资源而停止云不行
线程:将程序划分为多个大致独立的任务,当某个任务阻塞时能执行其他任务
线程相对进程是轻量级的,线程包含在进程中
对于两个线程:
共享绝大多数的资源
各自需要一个私有的程序计数器和函数调用栈
进程和线程的关系
线程开始时,从进程中**派生(fork) ...
计组-理论-时序逻辑设计
在数字电子学中,"级"通常指的是触发器的级数,也就是级联连接的触发器的数量。触发器是用于存储和处理数字信号的元件,通常用于构建计数器、寄存器和其他数字逻辑电路。
例如,8级触发器意味着有8个触发器按顺序连接在一起,形成一个级联的结构。每个触发器都可以存储一个位(0或1),并且它们可以一起用来表示更大范围的二进制数字。
正脉冲宽度为 2 个 CP 周期,这是因为进位信号 C 在从低电平变为高电平时需要两个 CP 脉冲的时间。 这句话能再解释一下码
正脉冲度为 2 个 CP(时钟脉冲)周期的意思是,当进位信号 C 从低电平变为高电平时,需要经过两个连续的时钟脉冲才会完成这个过渡。让我更详细地解释一下:
初始状态:进位信号 C 在低电平(0)。
时钟脉冲 1:在第一个时钟脉冲到来时,C 仍然保持在低电平。
时钟脉冲 2:在第二个时钟脉冲到来时,C 从低电平变为高电平(1)。
所以,在从低电平到高电平的这个过渡期间,需要两个连续的时钟脉冲。这是因为进位信号 C 可能是从低电平变为高电平,以表示在当前的十进制位上已经达到了9,并且需要进位到下一个十进制位。这个 ...
计组-理论-组合逻辑设计
组合逻辑设计
门电路
门电路:能够实现某种逻辑关系的电路,是数字电路中的基本逻辑单元电路。
基本逻辑门:与门、或门、非门(实际上与非门更基本,可直接用MOS管实现)。
分立逻辑门:由电阻、二极管、三极管等分立元件构成
集成门 :把构成门电路的基本元件制作在一小片半导体芯片上
集成反相器、缓冲器,集成与门、与非门,集成或门、或非门,集成异或门,集成三态门
触发器是由多个逻辑门(大多是非门)交叉耦合成的。时序逻辑电路由组合逻辑电路和触发器构成。
二极管/PN结
PN结的导通方向为:正向偏置:正极接P区,负极接N区
二极管的本质就是一个PN结,记作D。
正向开启电压默认为VD=0.7VV_D=0.7VVD=0.7V。一旦导通,则UD=VD=0.7VU_D=V_D=0.7VUD=VD=0.7V不变,称为钳位电压。
当反向电压超过阈值VZV_ZVZ时,二极管被击穿,此时二极管上的电压降为VZV_ZVZ
截止
实际上PN结截止时,总是会有很小的漏电流存在,也就是说PN结总是存在着反向关不断的现象,PN结的单向导电性并不是百分之百。
这主要是因为P区除了因“掺杂”而产 ...
计组-理论-计算机组成概述
基本组成
基本概念
计算机的功能:
数据传送功能
数据存储功能
数据处理功能
操作控制功能
操作判断功能
指令集体系结构ISA:定义了一台机器可以执行的所有指令的集合
字
字长是CPU进行一次整数运算所能处理的二进制数据的位数,字长一般等于内部寄存器的数据位宽大小。由于冯诺依曼结构特点,指令和数据地位相同,故指令位数=数据位数,字长相同
字长一般选取为字节(1byte=8bit,8位)的倍数
字长越大,数的表示范围越大,计算精度越高
存储字长:一个存储单元中二进制代码的位数=MDR位数
数据字长:数据总线一次能并行传送信息的位数
性能指标
运行速度:每秒能执行多少条指令
吞吐量:单位时间内处理请求的数量,取决于信息能多块输入内存
响应时间:用户向计算机发出请求到得到结果所花费的时间,包括CPU运行时间和等待时间(磁盘访问、存储器访问、IO操作等)
CPI:每执行一条指令所花费的时钟周期数
CPU执行时间:运行一个程序所花费的时间。CPU执行时间=指令条数*CPI/主频
MIPS:每秒执行多少10610^6106条指令
FLOPS:每秒执行多少次浮点运算
K ...