最近在学习计算机的体系架构,学到几个几个提升 CPU 运算能力的关键点:
1 流水线
2 分支预测
3 缓存设计(一级二级缓存)
4 多核
缓存
除了硬件方面有缓存,同样的软件层面也是有缓存的,例如数据库,例如网页加载。缓存的思想就是避免重复的请求资源。这让我想起的算法动态规划中的缓存,动态规划会储存之前计算过的结果,避免重复计算。同样的缓存也一样,通过缓存的方式,们可以对之前已经计算过的结果做到一次计算多次使用。
预加载
这个和 pipline 里面的流水线十分相似,预先加载命令,这样就不用 CPU 来等待分支预测器的预测结果了。尤其是对于那些 IF 阶段也采用了流水线作业的 CPU 来说节省了许多的时间。这点有点像电商公司的「先送货再下单」的策略,通过数据来对用户下单量进行预测,进行提前的备货,然后防止卖断货的出现。
一致性
当一个 CPU 中有个多核的时候,并且有的缓存不是共享的,如何保证各个 CPU 的缓存的数据一致性就成为了一个需要考虑的问题。在 CPU 中,有使用不同的缓存一致性协议。从多核 CPU 的模型可以拓展到分布式计算机,分布式数据库的一致性协议。这些问题的共同特点就是如何保证数据的一致性。从CPU 到分布式计算的前提是每个节点都是可信的。如果我妈进一步拓展,如果节点中的计算机不可信呢?如果其中某个节点伪造数据怎么办?这就让人想到了区块链。比特币是使用的 POS协议,简单来说就是,如果系统中的某个节点存在欺诈行为他将受到惩罚。在bitcion 中就是挖矿失败倒是电费浪费。
网友评论