返回介绍

第二十二章 SIMD

发布于 2025-02-22 14:00:48 字数 1160 浏览 0 评论 0 收藏 0

SIMD 是 Single Instruction, Multiple Data 的首字母。简单说就是单指令多数据流。

就像 FPU,FPU 看起来更像独立于 x86 处理器。

SIMD 开始于 MMX x86。8 个新的 64 位寄存器 MM0-MM7 被添加。

每个 MMX 寄存器包含 2 个 32-bit 值/4 个 16-bit 值/8 字节。比如可以通过一次添加两个值到 MMX 寄存器来添加 8 个 8-bit(字节)。

一个简单的例子就是图形编辑器,将图像表示为一个二维数组,当用户改变图像的亮度,编辑器必须添加每个像素的差值。为了简单起见,将每个像素定义为一个 8 位字节,就可以同时改变 8 个像素的亮度。

当使用 MMX 的时候,这些寄存器实际上位于 FPU 寄存器。所以可以同时使用 FPU 和 MMX 寄存器。有人可能会认为,intel 基于晶体管保存,事实上,这种共生关系的原因是:老的操作系统不知道额外的 CPU 寄存器,上下文切换是不会保存这些寄存器,可以节省 FPU 寄存器。这样激活 MMX 的 CPU+旧的操作系统+利用 MMX 特性的处理器=所有一起工作。

SSE-SIMD 寄存器扩展至 128bits,独立于 FPU。

AVX-另一种 256bits 扩展。

实际应用还包括内存复制(memcpy) 和内存比较(memcmp) 等等。

一个例子是:DES 加密算法需要 64-bits block,56-bits key,加密块生成 64 位结果。DES 算法可以认为是一个非常大的电子电路,带有网格和 AND/OR/NOT 门。

Bitslice DES2—可以同时处理块和密钥。比如说 unsigned int 类型变量在 X86 下可以容纳 32 位,因此,使用 64+56 unsigned int 类型的变量,可以同时存储 32 个 blocks-keys 对。

我写了一个爆破 Oracle RDBMS 密码/哈希(基于 DES)的工具。稍微修改了 DES 算法(SSE2 和 AVX)现在可以同时加密 128 或 256block-keys 对。

http://conus.info/utils/ops_SIMD/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文