通过示例理解 WASM SIMD:每条指令将 16 个 RGB 像素转换为灰度

发布日期:2026-06-13 10:03:43   浏览量 :5
发布日期:2026-06-13 10:03:43  
5

通过编写一个真实的内核,我终于理解了 WASM SIMD:将 RGB 转换为灰度亮度,每条指令处理 16 个像素,而非一次一个。数学运算相同,但在单核上速度提升约 4 倍。这是精简版——完整文章包含了将每个操作符反糖化为纯 TypeScript 代码、逐通道的 ASCII 图表,以及可选的底层进位线路详解。

先剧透结论,后讲理论。只有一个文件,除了 Deno 无需安装任何东西——它在启动时会自行编译 AssemblyScript:

🪄 代码 A → 代码 B,可运行且已基准测试(点击自我剧透)
// luma_bench.ts,完全自包含:AssemblyScript 会即时自行编译。
// 运行:deno bench -A luma_bench.ts
import asc from "npm:assemblyscript/asc";

// ---------- 代码 A:任何人都会编写的循环 ----------

function rgbToLumaNaive(rgb: Uint8Array, out: Uint8Array): void {
  const pixelCount = out.length;
  for (let i = 0; i < pixelCount; i++) {
    const r = rgb[i * 3];
    const g = rgb[i * 3 + 1];
    const b = rgb[i * 3 + 2];
    out[i] = Math.round(0.2126 * r + 0.7152 * g + 0.0722 * b);
  }
}

// ---------- 代码 A.5:相同的循环,但用 Q15 整数替换浮点运算 ----------

function rgbToLumaScalar(

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 订阅 数据