Video2NAND – 滥用视频编解码器以获取强大计算能力

Hacker News Top 论文

摘要

本文探讨了滥用 VP8 视频编解码器的预测机制来模拟 NAND 门,并构建任意组合逻辑电路,展示了一种奇异的计算基质。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/04 22:48

# Video2NAND | 共享对象 来源:https://sharedobject.blog/posts/vp8-combinatorial-logic/ ## Video2NAND 2026年7月11日关于如何用NAND门构建计算机的文章已经很多了,但如何构建这些NAND门本身的知识却并不那么常见。你可能会认为这属于晶体管和电气工程的领域,但我们将探索一种更奇特的载体:视频编解码器。 具体来说,我们将讨论VP8视频编解码器,以及如何利用其预测机制来模拟组合逻辑。我们的目标是构建一组可组合的“小工具”,它们可以构造任意逻辑电路。 ## 关于视频编解码器的一点知识 视频编解码器是描述将视频(一系列图像)编码成某种比特流,以及如何将该比特流解码回原始视频的标准。它们通常不是明确规定如何编码视频,而是定义一种通用结构和一组可用于编码视频的基元。因此,不同的视频编码器实现(甚至同一编码器使用不同设置)可能会以不同方式编码同一视频,但所有解码器都应能够重建视频,无论采用何种编码方式。 我们不会解释我们选择的视频编解码器VP8的全部内部工作原理,而是专注于与我们的目的相关的子集。此外,以下解释并不完全准确,目的是将预备知识简化为其本质。如果你有兴趣了解更多关于视频编解码器的知识,我推荐阅读Theora规范(https://xiph.org/theora/doc/Theora.pdf),它出奇地易读。 > 你也可以阅读这篇后续文章(https://sharedobject.blog/posts/vp8-nitty-gritty/),其中描述了一些被略过的细节。 从某种意义上说,视频只是一系列图像。在视频编解码器的术语中,这些图像被称为“帧”,每帧是像素的网格。帧通常分为两种:关键帧和中间帧。 一个帧被划分为8x8像素块 关键帧是独立于其他帧进行编码的帧。重建图像所需的全部数据都包含在该帧本身中。像素数据可以直接编码到帧中,也可以使用帧内预测进行预测。帧内预测允许编码器声明图像的某个块可以从附近的另一个块预测出来。 由于VP8逐行解码这些块,从左上角到右下角,它提供的帧内预测基元允许使用上方的行、左侧的列以及它们之间的左上角像素来预测一个块。 左上角 顶部[0] 顶部[1] 顶部[2] 顶部[3] 左侧[0] 左侧[1] 左侧[2] 左侧[3] 一个块及其用于预测的像素 中间帧是利用后续帧变化不大这一事实的帧,并允许基于先前解码的帧来预测像素块。它们提供与关键帧相同的编码基元,同时还允许中间帧预测:通过引用前一帧的块来描述一个块。 我们将纯粹使用关键帧来构建我们的组合电路。部分原因是组合逻辑与时序逻辑的语义很好地映射到关键帧与中间帧,部分原因是工具集受限带来的额外挑战更有趣。 ## 导线与门 组合电路由输入、输出、导线和门构成。在我们的例子中,不是用电流来表示真和假,而是帧中的每个块要么完全是白色(所有像素值设为255),要么完全是黑色(所有像素值设为0),分别表示真与假。 我们将使用H_PRED和V_PRED预测模式来模拟向右或向下延伸的导线。H_PRED代表“水平预测”,意味着块中的每个像素值通过复制其左侧像素的值来预测。类似地,V_PRED代表“垂直预测”,而是从上方复制值。 将帧绘制为块的网格: 输入将被表示为非预测块,设置为恒定值,要么全白,要么全黑。输出只是标记好的导线块: 此时,只差逻辑门了。为了使我们的系统功能完备,即能够描述任何真值表,构建两个门就足够了:NOT和AND。我们也可以选择其他功能完备的门集合,例如只用NAND,但正如我们将看到的,这些门的构建非常容易。 两个门都会使用TM_PRED预测模式。它代表“真实运动预测”,只比我们目前看到的预测模式稍微复杂一点。在TM_PRED块中,每个像素的值计算为上方行中对应像素与左侧列中对应像素之和,再减去左上角像素的值。因此,对于第`i`行第`j`列的像素,其值为`left[i] + top[j] - top_left`。 左上角 顶部[0] 顶部[1] 顶部[2] 顶部[3] 左侧[0] 左侧[1] 左侧[1] + 顶部[2] - 左上角 左侧[2] 左侧[3] 块单元格(2,1)处的TM预测计算 我们所有的块都是均匀的——要么全黑,要么全白。这意味着`top[0] = top[1] = top[2] = ...`,同样地`left[0] = left[1] = left[2] = ...`。这导致TM_PRED块的计算可以简化为:`left + top - top_left`: 左上角 顶部 左侧 左侧 + 顶部 - 左上角 简化的TM预测 由于像素值被限制在0到255之间,NOT门等效于公式`255 - INPUT`(你可以将INPUT替换为0或255来验证)。我们可以使用TM_PRED块来表示这个公式。假设输入是左上角像素,将顶部行设为全255,左侧列设为全0(或反之)。门的输出是TM_PRED块的右侧和底部,可以使用我们上面描述的导线块进一步传播。 类似地,我们可以通过将左上角设为255,第一个输入设为顶部行,第二个输入设为左侧列来构造AND门。在这种设置下,TM_PRED块将表示公式`A + B - 255`。将A和B的所有可能输入值代入,我们可以看到输出正好是一个AND门: 现在我们已经构建了所有基本小工具,可以将它们组合起来创建各种其他门和电路,包括可敬的NAND: ## 总结 希望你喜欢这段跨领域的旅程,并学到了一些关于视频编解码器、组合逻辑或怪异机器(https://projectzero.google/2021/12/a-deep-dive-into-nso-zero-click.html)的知识。我们只是触及了表面,还有很多开放的问题和方向可以探索。我们能优化这些小工具使其更小吗?将这些想法集成到综合工具中,可能实现将Verilog综合为VP8帧?或者,探索时序逻辑,以及我们如何使用中间帧来实现它?

相似文章

Nvidia 的新型长视频生成技术(12分钟阅读)

TLDR AI

NVIDIA Research 推出了 SANA-Video 2.0,这是一种混合视频扩散变换器,能够在单个 GPU 上生成高质量 720p 视频,通过混合线性-softmax 注意力和块注意力残差,实现了相比 Wan 2.2-14B 高达 120 倍的速度提升。

@VincentLogic: NVIDIA 这次真的不讲武德,直接甩出一个开源的视频理解怪兽 Nemotron 3 Nano Omni,处理视频快得离谱:1 小时就能搞定 10 小时的视频内容,比播放速度还快 10 倍 核心靠的是 3D 卷积技术,不再逐帧傻扫,而是成…

X AI KOLs Timeline

NVIDIA 开源了视频理解模型 Nemotron 3 Nano Omni,采用 3D 卷积技术,处理速度比播放速度快 10 倍,擅长音视频分析、监控检索和素材打标,但不适用于代码或文本推理任务。