Skip to content

搞英语 → 看世界

翻译英文优质信息和名人推特

Menu
  • 首页
  • 独立博客
  • 专业媒体
  • 名人推特
  • 邮件列表
  • 关于本站
  • Product Hunt
  • Visual Capitalist
  • Elon Musk
Menu

SIMD 与标量:释放并行处理的力量

Posted on 2025-01-10

介绍

这是我上一篇文章“数组结构”的后续文章,该文章是面向数据设计实现系列的一部分。

索A-1

SIMD – 单指令多数据

一种并行处理技术,同时对多个数据元素执行单个指令,提高计算速度和效率。

为什么选择SIMD?它使我们能够实现数据级并行,而C和Rust中讨论的多线程则提供线程级并行。

与线程级并行相比,数据级并行被认为是更低级的。现代术语也称为矢量化,尽管两者并不完全相同,但它们具有相似的主要特征:对多个数据元素并行执行操作。

语言:C – Zig – Rust

与往常一样,实施将使用我最喜欢的 3 种语言来完成。在这篇文章中,我想做一些不同的事情,我将展示 C 和 Zig 之间的 Neovim 差异,希望能够向您展示这两种语言有多么相似 ~ 如果您了解 C,那么您已经了解 Zig!

==[更新]:您需要“在新选项卡中打开图像”,然后双击图像进行放大==

为了方便复制,我将在 Pastebin 存储库中提供完整的代码。

粒子模拟

第 1 部分 – 常量、结构和分配器

图像1请注意,在 ParticleData 结构中,我正在实现数组结构 (SoA),而不是上面简介中提到的结构数组 (AoS)。

第 2 部分 – 初始化程序和可用内存

图像-2请注意 Zig 中的 freeParticleData 函数是多么简洁,特别是因为它使用 std.meta.fields,它可以自动在相关结构(ParticleData)中应用该过程。

第 3 部分 – 使用 SIMD 更新粒子

图像3注意我在 Zig 版本中添加了两个辅助函数:loadVector 和 storeVector。这些都是为了减少冗长。冗长是我不喜欢 Zig 的一件事,但正如你所看到的,我们可以通过辅助函数“破解它”。

第 4 部分 – 主要功能

图像4这里没有什么特别有趣的,打印语句是为了确保编译器不会优化所有进程。

矩阵乘法

第 1 部分 – 使用 SIMD 的常量、初始化器、矩阵乘法

matmul-1

第 2 部分 – 主函数、标量函数片段

matmul-2

基准

我们已经到达基准部分,准备好接受一些数字吧!

长椅

==[更新]:正如一位读者在我的 X/twitter 帐户中提到的,请注意,在 Rust 矩阵乘法中,列以秒为单位,而其他列以毫秒为单位==

结论

从基准数据中可以看出,无论我们使用哪种编程语言,在各种程序中应用 SIMD 的性能都显着优于标量处理。

Pastebin 仓库

  • 粒子模拟:
  1. Rust: SIMD
  2. 齐格: SIMD
  3. C:单指令多数据流
  • 矩阵乘法:
  1. Rust: SIMD
  2. 齐格: SIMD
  3. C:单指令多数据流

我如何编译不同的程序

  • C: gcc-14 -o c_particle_sim_simd -O3 c_particle_sim_simd.c -march=native -std=c23
  • Zig: zig build-exe -O ReleaseFast zig_particle_sim_simd.zig
  • Rust: cargo rustc --release --bin rust_particle_sim_simd -- -C opt-level=3 -C target-cpu=znver2 -C target-feature=+avx2

原文: https://hwisnu.bearblog.dev/simd-vs-scalar-unlocking-the-power-of-parallel-processing/

本站文章系自动翻译,站长会周期检查,如果有不当内容,请点此留言,非常感谢。
  • Abdisalan Mohamud
  • Addy Osmani
  • Aeon
  • Ahoy There! on THT's den
  • Alec Muffett
  • Andreas
  • anhvn
  • Ankaph
  • Annie
  • Armin Ronacher
  • Ask Hacker News Weekly
  • Astro Blog
  • Austin White
  • Backlinko
  • Better Dev Link
  • Building Pika Out Loud
  • Caleb Hearth
  • Cédric Aellen
  • Chip Huyen
  • Colossal
  • Cooltools by KK
  • CoRecursive
  • Craig Mod
  • Curt Merrill
  • Dan Abramov's Overreacted Blog RSS Feed
  • Daniel Lemire
  • Daniel Stenberg
  • Daring Fireball
  • David H
  • David Heinemeier Hansson
  • Dayu | 大宇
  • Ed Zitron
  • Ersei
  • Ersei 'n Stuff
  • Evan Martin
  • First Page Sage
  • Founder Weekly
  • FuzzyGrim
  • Gabriel
  • Good Enough
  • Gregory Hammond
  • Habib
  • How They Make Money
  • I Love Charts
  • Ian Betteridge
  • Ivaylo Durmonski
  • Jason Kottke
  • Jason Kratz
  • Jeff Perry
  • John D. Cook
  • Jonas Hietala
  • Jonathan Snook
  • jwb
  • Kevin Kelly
  • Kevin Yank
  • Kirsty
  • Kush
  • Loris Cro
  • Maarten van Gompel
  • Manas J. Saloi
  • Mandy Brown
  • Matt Fantinel
  • Matt Mullenweg
  • Mere Civilian
  • Ness Labs
  • News Letter
  • Nicholas Carlini
  • Nicolas F. R. A. Prado
  • Niko
  • Nir Eyal
  • Noah Smith
  • Pedro Lopes
  • Positive News
  • Predrag Gruevski
  • Rachel Kroll
  • Recomendo by KK
  • rendezvous with cassidoo
  • Rest of World
  • Ruben Schade
  • Scott Galloway
  • Sébastien Etter
  • SEMrush Blog
  • Seth Godin
  • Shariq Raza Qadri
  • Simon Willison
  • Six Colors
  • Slashdot
  • Spectre Collie
  • Spyglass
  • storytelling with data
  • Streamline Blog
  • Tableau Blog
  • tekphloyd
  • The Alchemy of Money
  • The Independent Variable
  • The Marginalian
  • thriftmac
  • Tim Bray
  • Tim Ferriss
  • Tim Kellogg
  • TLDR
  • Topslakr
  • Track Awesome list
  • Trump
  • Victor Kropp
  • Vincent Ritter
  • Vox
  • Westenberg
  • Xe Iaso
  • xkcd
  • Yuri Cunha
  • Zarar
  • 未分类
  • 英文媒体
  • 英文推特
  • 英文独立博客
  • 读写错误
©2025 搞英语 → 看世界 | Design: Newspaperly WordPress Theme