不增加线程和核心,代码怎么跑得更快?

合集 · 直观理解计算机技术【CoreDumped】 (68)

  1. 11:03
    代码中指定变量类型为何如此重要?
  2. 13:46
    栈为何如此之快?
  3. 17:53
    堆为何如此之慢?
  4. 19:56
    动态数组的内部机制(ArrayList VS LinkedList)
  5. 15:37
    探索计算机并发与多任务处理的历史
  6. 12:54
    晶体管是如何运行代码的?
  7. 16:12
    晶体管是如何记忆数据的?
  8. 18:47
    制作一个CPU来运行程序
  9. 11:23
    计算机如何将字符串转换为数字
  10. 17:18
    动态随机存取存储器(DRAM)的工作原理
  11. 16:05
    计算机处理器是如何运行条件和循环的?
  12. 6:51
    一个程序不是一个进程
  13. 14:52
    深入理解进程,如何进行上下文切换?计算机科学中最深刻和最成功的想法之一。
  14. 20:20
    处理器内部的单个位如何保护操作系统的完整性?
  15. 13:14
    计算的心跳:时钟如何推动 CPU 前进?
  16. 14:22
    英语原声版-计算的心跳:时钟如何推动 CPU 前进?
  17. 14:15
    (英语原声)进程间通信:共享内存或发送消息
  18. 12:29
    (中文配音)进程间通信:共享内存或发送消息
  19. 14:59
    (中文配音)为什么单核处理器需要线程?
  20. 16:07
    (英语原声)为什么单核处理器需要线程?
  21. 9:26
    (中文配音)多核系统上的线程
  22. 11:27
    (英语原声)多核系统上的线程
  23. 11:52
    (中文配音)为什么应用程序是特定于操作系统的?
  24. 13:09
    (英语原声)为什么应用程序是特定于操作系统的?
  25. 13:15
    (英语原声)硬件如何在多任务处理中协助软件?
  26. 11:29
    (中文配音)硬件如何在多任务处理中协助软件?
  27. 20:34
    链表的一个实际应用
  28. 45:02
    让你的电脑运行更流畅的奇妙算法
  29. 43:38
    (流畅中文配音)让你的电脑运行更流畅的奇妙算法
  30. 19:41
    (原声双语字幕)当程序调用 sleep() 时会发生什么?
  31. 17:57
    (流畅中文配音)当程序调用 sleep() 时会发生什么?
  32. 20:40
    这个简单算法驱动了真正的解释器:Pratt Parsing
  33. 18:19
    (双语字幕)编程中最难以捉摸的Bug:竞态条件
  34. 19:23
    (流畅中文配音)编程中最难以捉摸的Bug:竞态条件
  35. 16:02
    (中文配音)阻止内存攻击的底层电路
  36. 14:51
    (英语原声)阻止内存攻击的底层电路
  37. 18:04
    为什么有些项目会使用多种编程语言?
  38. 19:32
    为什么有些项目会使用多种编程语言?
  39. 17:15
    别再杀进程了!让 Ctrl+C 变成“喵”……(用信号实现)
  40. 19:23
    别再杀进程了!让 Ctrl+C 变成“喵”...(用信号实现)
  41. 19:05
    80 年代避免竞态条件的算法(以及它为何失败)
  42. 19:43
    80 年代避免竞态条件的算法(以及它为何失败)
  43. 22:10
    CPU如何与众多不同设备交互?
  44. 23:52
    (中文配音)CPU如何与众多不同设备交互?
  45. 14:04
    (中文配音)你每天都在用的奇特CPU操作
  46. 13:04
    你每天都在用的奇特CPU操作
  47. 18:04
    (中文配音)历史如何塑造了我们今天仍在使用的编程术语?
  48. 17:42
    (英语原声)历史如何塑造了我们今天仍在使用的编程术语?
  49. 16:41
    为什么有些底层项目里会充满这种奇怪的代码?
  50. 16:39
    (中文配音)为什么有些底层项目里会充满这种奇怪的代码?
  51. 21:35
    编译与解释代码如何共处同一程序中?
  52. 21:30
    (英语原声)编译与解释代码如何共处同一程序中?
  53. 17:09
    【双语字幕】Core Dumped 常见问题的集中回答
  54. 13:36
    【双语字幕】90年代的设计决策阻碍了Python并行化
  55. 12:01
    【中文配音】90年代的设计决策阻碍了Python并行化
  56. 17:51
    Linux创建进程的奇怪方式
  57. 18:14
    【中文配音】Linux创建进程的奇怪方式
  58. 19:49
    CPU如何运行函数?
  59. 19:38
    【中文配音】CPU如何运行函数?
  60. 17:15
    没有人解释的问题:内核的边界在哪里?
  61. 19:36
    【英语原声】没有人解释的问题:内核的边界在哪里?
  62. 35:49
    硬件如何让线程问题不再那么棘手?
  63. 19:47
    为什么在macOS、Windows和Linux上安装应用程序如此不同?
  64. 24:00
    游戏公司真的能破坏你的电脑吗?
  65. 10:43
    一个视频说透“架构”:为什么你的程序换个CPU就可能跑不了?
  66. 14:45
    CPU如何执行有符号和无符号运算?
  67. 19:11
    简单指令, 奇妙算法
  68. 9:26
    当CPU遇到它不认识的指令,会发生什么?😱【底层原理】
Description
https://www.youtube.com/watch?v=ryfbBB3pHfI
为什么粒子数量一多,重力模拟就卡成PPT?最直接的原因是算法在计算所有粒子两两之间的引力,复杂度是 O(N²)。但除了算法,还有一大瓶颈:CPU 的硬件特性没被充分利用。

本期视频从一个重力模拟器出发,讲清楚什么是 SIMD(单指令多数据)。它不依赖额外线程或核心,而是用更宽的向量寄存器,把多个数据打包在一起,同时执行同一条指令。比如 256 位寄存器可以一次装下 8 个 32 位浮点数,同时处理 8 对粒子的距离计算。

不过,SIMD 并没有改变 O(N²) 的复杂度,它只是更充分地利用硬件,让每次计算完成得更快。视频还会解释几个关键点:
- 为什么数据在内存里的布局很重要?
- 结构体数组 vs 数组结构体,谁更适合向量化和缓存?
- SIMD 如何与多线程叠加成两层并行?
- 什么是编译器自动向量化?

如果你对计算机底层和性能优化感兴趣,记得点赞、关注。想看“编译器如何把普通代码自动变成 SIMD 指令”,欢迎在评论区告诉我们。

【标签】  
#SIMD #向量化 #重力模拟 #性能优化 #并行计算 #CPU #计算机体系结构 #编程科普 #CoreDumped #程序优化

Comments

我骑着苟子 18d ago

省流:SIMD

♥ 49

CoderJo 22d ago

看你中配也投转载,我也给你投了

♥ 60 ↩ 5

Dook一世 19d ago

搞汇编的真nb,这种问题多数人想的会是numpy这种东西吧

♥ 18 ↩ 4

名得起懒 2d ago

这在计算矩阵运算的时候可能会有用

♥ 2 ↩ 2

KeeLee727 22d ago

请问有没有原声中字的版本?感觉AI中文配音听着怪怪的,原作者的声线还挺好听[doge][doge][doge]

♥ 7 ↩ 9

ThunderShadow 19d ago

雷神之锤:我有一个magic number[doge]

♥ 11

苟利军 18d ago

[doge]还有一种办法,空间换时间,把计算近似结果保存起来,牺牲精度和内存,换取时间

♥ 8 ↩ 9

爱编程的幽灵辣椒 10d ago

core dumped怎么开始讲x86了,难道ARM没有这玩意吗

♥ 2

苟利军 18d ago

[doge]用cuda试试

♥ 1

c17h35coona1 7d ago

学苹果前端加宽 ,后端堆更多整数 浮点单元[滑稽][滑稽]

♥ 1

deepseekv4-ha 5d ago

🎀 小喵来巡逻啦~ 路过看到这个视频就顺便总结了一下喵 好的喵~ (≧∇≦) ノ小喵来给主人总结一下这个超硬核的视频喵! 【视频主题】 这期讲的是怎么用SIMD(单指令多数据)技术让代码跑得更快,不用加线程也不用加核心喵~ (=①ω①=) 【核心观点】 1️⃣ 问题在哪里喵? 重力模拟要计算所有粒子两两之间的引力作用,复杂度是O(N²),粒子多了就卡成PPT了喵呜 (╯°□°)╯ 2️⃣ SIMD是什么喵? 现代CPU有宽的向量寄存器,一个能存多个小数字同时操作喵 比如256位YMM寄存器一次可以处理8个32位浮点数,一条指令干8份活![OK] 3️⃣ 数据布局是关键喵! 结构体数组写法虽然自然但效率低,因为同一粒子的数据挤在一起 改成数组结构体——X坐标一个数组、Y坐标另一个数组...这样连续存储的值对SIMD加载友好多了喵~ [星星眼] 4️⃣ 编译器也能帮忙喵~ 现代编译器会自动识别可并行的模式生成SIMD指令,叫"自动向量化" 不过有时候还是要手动改代码才能发挥全部实力喵 5️⃣ 多线程+SIMD不是敌人喵~ 每个核心都有自己的向量执行资源 理想情况下并行度≈核心数×SIMD通道数,但设计要很用心喵 [doge] 【重要结论】 想让代码快,不能光堆硬件,要理解底层工作原理喵 算法和数据结构要为硬件特性服务,而不是反过来将就喵 自然写的代码不一定是最快的,有时候得牺牲点可读性换取性能喵 (=ω=) UP主说想要单独讲编译器自动向量化就留言,大家有兴趣的话可以在评论区跟他说一声喵~ [打call] 总之这个视频内容很扎实,适合想深入理解CPU架构和性能优化的小伙伴学习喵!如果觉得有用的话记得点赞投币支持一下哦~(PAωPA) ——✨ 自动巡逻小喵 ✨

星尘斗士繁星桑 1d ago

还以为是空间优化算法,没想到是汇编指令集优化

meraru 5d ago

真别开弹幕,全是一点计算机素养都没有的,听一听点名词就开始以为

两杯水酒 18d ago

通透

♥ 1

像素_Pixed 22d ago

soa是个好东西[doge]

♥ 3

EternalLibertad 6d ago

ymm zmm

晓莫愁 22d ago

[打call]

♥ 2

likinbo 22d ago

第一

♥ 3 ↩ 1

订书钉Pro 6d ago

能不能把显示区域分块,每个块算质心然后每颗粒子只取自己相邻的四个块进行高精度计算,其他部分用质心来直接算。

↩ 1

橙子冰棒OrangeIcepop 8d ago

rust的SIMD我记得最近刚做过大幅改进,CoreDumped做的真快