core-circuit-separate-computer
核与执行电路的分离,最初是为了省电。
用寄存器实现这种分离。
V寄存器控制着执行电路的供电,V=0则不供电,进入省电模式;V=1则供电,进入工作模式。
P寄存器是parameter-register,
R寄存器是return-value-register。
用VPR寄存器,实现核与电路的分离。
当引入多核后,情况变得复杂起来,需要一个矩阵来记录哪个核正在用哪片执行电路。而且,有些电路因为经常使用,需要做多片备用着。这使得调度算法更加复杂。
多核与多电路的关系矩阵,决定了系统的效率。
假设已经解决了调度算法的问题,一个核里的代码应该是这样的:
(核1的代码)
申请使用指令3
返回电路3_5,同时电路3_5的V寄存器置1
向电路3_5的P寄存器写入参数
等待电路3_5的V寄存器恢复0,这表明执行完毕
从电路3_5的R寄存器读取返回值
已知的调度算法包括“电梯调度算法”,把执行电路看做电梯,把核看做楼层。不同的楼层不确定地出现请求,由电梯决定怎么办。
“排队链算法”,例如,在电路6,核1等待核2,核2等待核3,形成链式的队列。具体来说,核1等待矩阵中“核2和电路6的交点处的寄存器”。
对于备用电路,可以采用轮换方式,电路3_1之后是电路3_2,然后是电路3_3,等。或者是医院、银行里的“排队机算法”,凭票排队。
如果有10个核,则总共1024种情况,查表决定策略。每片执行电路都搭配这一功能,显得有些奢侈?这个功能由一片执行电路实现,称为“调度专用指令法”。
核里边的指令集可以很简单了,但是要有一个“等待某寄存器为特定值”的指令,和一个“在寄存器间移动数据的指令”。