当谈及多线程操作时首先需要区分数据并行任务并行。前者主要涉及到了并行归约和交错归约两个算法,而后者则会涉及到临界区等概念。

数据并行的代表手段是 CUDAOpenMp。前者通过利用 GPU 中数千个核心进行并行计算,而后者则使用 CPU 进行计算。

任务并行的手段常常以锁为代表。

任务同步常见的手段有自旋锁、互斥锁、信号量、栅栏等。在锁的基础上又衍生出了读写锁、顺序锁、RCU 等工具。

锁往往会带来很大的开销,因此无锁编程也应运而生,无锁编程的要点是掌握原子指令和内存屏障。无锁编程的集大成者是 RCU,通过延迟删除的方式极大程度地提高了读多写少场景下读侧的性能,并被广泛应用到了 Linux 内核中。

除了上述内容外,性能瓶颈还往往和内存拷贝有关,这时 SIMD 指令就能派上用场了。SIMD 通过一次指令拷贝多次数据来提升性能。现代 CPU 上 avx512 指令集可以一次性拷贝 512 位数据(也就是 64 字节)。

Last moify: 2025-07-01 07:38:05
Build time:2025-07-18 09:41:42
Powered By asphinx