《织梦者》
改进了织梦者另一个宇宙正在坍塌。地震、海啸、大气层剥离——所有灾难同时降临没有预警没有规律。那个宇宙的科学家拥有近乎无限的算力芯片铺满整个地下城市每秒模拟足以点燃一颗恒星。但他们无法预测灾难。因为算法太简陋了。他们只会线性外推——把过去的数据塞进表格然后画一条直线猜未来。灾难的路径从来不是直线。负责这项任务的科学家叫卡洛斯。他连续工作了四十个本地日终于伏在控制台上沉沉睡去。他做了一个梦。梦里他站在一片纯白的空间里。对面站着一个穿棉布衬衫的人手里拿着一块发光的扁平方块。“你是谁”卡洛斯问。“我是你梦到的”那人说“或者你是我梦到的。不重要。你看起来需要帮助。”卡洛斯把宇宙的灾难、算力的过剩、算法的简陋一股脑倒了出来。那人举起发光方块方块表面浮现出十二个流动的光点。“在我们宇宙有一种技术叫纹理。你听我说——”---第一个光点冲出来。“我是Wrap我能让边界消失。你从左边走出去就会从右边走进来。无限循环永不丢失——”第二个立刻打断它。“别听他胡扯。我是Clamp。超出边界的我直接截断、扔掉。内存占用固定不会爆。”“固定有什么用”Wrap回击“灾难数据超出边界的时候你扔掉的那段恰好是震中走向你省了内存丢了命”“总比你让震中从地球另一端冒出来合理而且我的寻址逻辑简单硬件开销只有你的一半。”“那你倒是让数据‘够用’啊”卡洛斯抬手打断“等一下。你们两个的方案一个让数据循环膨胀一个把数据截断丢弃。可我的内存有限——我不可能把无限的数据塞进有限的空间。Wrap你告诉我你的循环不会导致读到的数据永远重复、永远覆盖不了新数据吗”Wrap的光点闪了一下“这……”“Clamp你更直接。数据溢出就扔。我的灾难预测需要完整的时间窗口——你扔掉的东西如果恰好是关键特征整个预测就废了。”两个光点安静了。---第三个光点不急不慢地浮上来身上流动着模糊的光影。“浮点精度的问题你们考虑过吗”双线性插值说“我为每一片空白做加权平均。取最靠近的四个点按距离混合。平滑、漂亮——”卡洛斯盯着他“你用什么精度”“半精度。FP16。快省带宽。”“但我需要双精度。FP64。灾难物理模拟里差一个ULP风暴就能偏航——你刚才说多少三百公里”双线性插值的声音弱了些“FP16的误差在万分之一……肉眼看不出来。”“灾难不是用肉眼看出来的”卡洛斯说“而且如果我只存FP16早期的小信号——那些能预示大灾难的前兆——会被量化噪声直接淹没。你等于把地震前的那一声轻响剪掉了。”Clamp从旁边插进来“那你用FP64啊。带宽翻四倍缓存行翻倍SRAM一次只能塞进去一半数据。你算力再强数据喂不进去有什么用”“那也比喂进去的是错的数据强。”三个光点吵成一团。---卡洛斯静静地听了一会儿。然后他开口了“我明白了。”争吵停下来。“Wrap你处理边界的方式是循环Clamp你是截断双线性你是平均。而且你们三个都有一个共同的问题——你们都在‘读’数据的时候顺便‘改’了它。循环是改了索引截断是改了范围平均是改了数值。”他说这句话的时候用了一个词——“改了”。那个词落进白茫茫的空间里像石子砸进水面涟漪一层层荡开。所有光点的光芒都暗了一度。“你们每一个方案都是在读取路径上叠加了一层‘处理逻辑’。这层逻辑会消耗时钟周期会占用额外缓存会让数据从加载到计算之间多一道工序。我的算力确实够但我的延迟窗口不够——灾难不等人。”“而且”他补充道“你们让我做取舍要精度就别想带宽要带宽就别想精度要边界完整就别想内存可控。我能不能——不做取舍”“如果我不需要近似呢”卡洛斯说“如果我需要的只是一个数就是那个数本身不循环、不截断、不平均、不降精度——我该找谁”光点们集体向两旁退开露出它们身后最底层的黑暗角落。那里坐着一个穿粗麻布衣的影子。她没有发光的身体没有流动的纹理只有手中一根笔直的尺。“她是谁”卡洛斯问。没有光点回答。影子站起来走到卡洛斯面前把尺子平放在他掌心。“我不替你取数”她说“我也不替你改数。你告诉我起点在哪、跨几步、取几个。剩下的——你去执行。我的尺子不撒谎因为我不做决定。”“内存呢”卡洛斯问。“你自己算。起点、步长、数量——三个整数你自己决定怎么分块、怎么缓存、怎么搬运。”“精度呢”“你存的是什么精度我读的就是什么精度。我不做任何转换。FP64进来FP64出去。你在内存里放了一个数我就给你那个数。不做平均不做截断不做循环——因为那些都是‘决定’而我不做决定。”卡洛斯低头看着那把尺子。没有任何刻度。但当他握紧它的瞬间所有的数字从虚空里涌出来——0、1、2、3、4、5……在他面前排成一条精确的、永不弯曲的直线。他醒了。---控制台上方的全息屏幕还在闪烁。他在算法文件的第一行删掉了“线性外推”。他写下绝对索引。不插值。不截断。不循环。精度保持原样。内存自己管理。每个数只读一次。不改一次。不要替数据做任何决定——只告诉它该去哪。下方补了一行小字别问它该变成什么。问它在哪里。他把这套新的数据结构命名为张量。七天后他第一次成功预测了一次地壳位移。误差范围从“完全错误”缩窄到“可接受”。内存占用没有膨胀——因为他自己控制了分块。精度没有丢失——因为没有任何一层硬件替他做过平均。而在另一个宇宙穿棉布衬衫的人关掉了模拟环境。他看到了卡洛斯留下的最后一行字——感谢那个在梦里借我尺子的人。你给我看的十二个方案每一个都在教我‘如何近似’。但你最后给我的那个影子她只告诉我‘如何找到’。他笑了笑合上发光方块。“希望他们来得及。”---多年以后卡洛斯的宇宙保存了下来。灾难再也不是灭顶之灾。而他们的编码规范第一条至今写着纹理给眼睛看。张量给灾难看。绝不插值。绝不平均。绝不在读取路径上做任何决定。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →