第118章 大杀器(2 / 4)
局部原语的证明可以像搭积木一样被復用。
底层子网络的正確性证明,可以直接作为更大规模网络组成部分的前置证据。
mps-kernel开始发生蜕变。
它不再像一个每次都从头推到尾的笨拙搜索器,开始像一台拥有记忆,会自动积累中间定理的智能证明机器。
第十三年,江临將庞大而混沌的证明系统挥刀斩断,清晰地拆分成三层。
第一层,抽象原语层。
排序、选择、求秩、中位数、top-k等微內核,首先在纯粹的数学语义上被定义得滴水不漏。
输入的数据分布是什么?
输出的排序稳定性要求是什么?
是否允许数组中存在重复值?
算法边界是否存在哨兵机制?
最重要的是,整数比较、浮点运算中的非数字以及带符號零的特殊值处理,必须在这一层就明確分流。
第二层,源码与中间表示层。
到了这一层,无论是c代码、llvm ir,还是手工编写的intrinsic內联函数,都绝对不允许用一句轻飘飘的它看起来等价糊弄过去。
c语言標准中恶名昭彰的未定义行为、有符號整数溢出的未定义行为、无符號整数的模迴绕语义、不同宽度整数转换时的截断规则、浮点比较中的nan传播、正负零排序、捨入模式、异常標誌,以及不同平台对denormal数的处理,全都要在这一层被数学逻辑无情地拆开揉碎,確保ir在被声明的语义子集內,与上层抽象语义保持一致。
第三层,机器码层。
这是最贴近金属的领域。
最终生成的二进位指令序列,必须能够逆向回连到上层语义。
无论是高效率的条件传送cmov、向量混合blend,还是用於打包求最小值的pminsd,甚至是几条为了避开流水线冒险而看似绕远路的逻辑指令组合,都必须由系统自动给出严格的逻辑等价证明。
裴礪在办公室里那个关於规模化的刁钻问题,直到这一年,才在废土的黄沙中,得到了江临用代码堆砌出的工程回答。
零一验证器从来都不是终点,它不过是一条通向微內核工业化的坚固证明链的第一环。
第十九年,江临迎来了另一个巨大的挑战。
代价评估后端重写。
旧版本的代价模型天真得可笑,它只会根据静態的指令周期给出一个冰冷的排名。
第一名,理论上看起来最快。
第二名,看起来慢一点。
但在真实的冯·诺依曼架构机器上,硅片不是乾净的数学纸面,它充满了物理世界的狂躁与不確定。
l1/l2缓存命中率会隨著上下文波动。
作业系统的线程调度会隨时引发中断。
cpu的睿频机制会因为热量的累积而动態改变工作频率。 ↑返回顶部↑
底层子网络的正確性证明,可以直接作为更大规模网络组成部分的前置证据。
mps-kernel开始发生蜕变。
它不再像一个每次都从头推到尾的笨拙搜索器,开始像一台拥有记忆,会自动积累中间定理的智能证明机器。
第十三年,江临將庞大而混沌的证明系统挥刀斩断,清晰地拆分成三层。
第一层,抽象原语层。
排序、选择、求秩、中位数、top-k等微內核,首先在纯粹的数学语义上被定义得滴水不漏。
输入的数据分布是什么?
输出的排序稳定性要求是什么?
是否允许数组中存在重复值?
算法边界是否存在哨兵机制?
最重要的是,整数比较、浮点运算中的非数字以及带符號零的特殊值处理,必须在这一层就明確分流。
第二层,源码与中间表示层。
到了这一层,无论是c代码、llvm ir,还是手工编写的intrinsic內联函数,都绝对不允许用一句轻飘飘的它看起来等价糊弄过去。
c语言標准中恶名昭彰的未定义行为、有符號整数溢出的未定义行为、无符號整数的模迴绕语义、不同宽度整数转换时的截断规则、浮点比较中的nan传播、正负零排序、捨入模式、异常標誌,以及不同平台对denormal数的处理,全都要在这一层被数学逻辑无情地拆开揉碎,確保ir在被声明的语义子集內,与上层抽象语义保持一致。
第三层,机器码层。
这是最贴近金属的领域。
最终生成的二进位指令序列,必须能够逆向回连到上层语义。
无论是高效率的条件传送cmov、向量混合blend,还是用於打包求最小值的pminsd,甚至是几条为了避开流水线冒险而看似绕远路的逻辑指令组合,都必须由系统自动给出严格的逻辑等价证明。
裴礪在办公室里那个关於规模化的刁钻问题,直到这一年,才在废土的黄沙中,得到了江临用代码堆砌出的工程回答。
零一验证器从来都不是终点,它不过是一条通向微內核工业化的坚固证明链的第一环。
第十九年,江临迎来了另一个巨大的挑战。
代价评估后端重写。
旧版本的代价模型天真得可笑,它只会根据静態的指令周期给出一个冰冷的排名。
第一名,理论上看起来最快。
第二名,看起来慢一点。
但在真实的冯·诺依曼架构机器上,硅片不是乾净的数学纸面,它充满了物理世界的狂躁与不確定。
l1/l2缓存命中率会隨著上下文波动。
作业系统的线程调度会隨时引发中断。
cpu的睿频机制会因为热量的累积而动態改变工作频率。 ↑返回顶部↑