Skip to content

值得一读

这里收集一些值得一读的文章,或者是值得花时间看的视频。

std::simd: How to Express Inherent Parallelism Efficiently Via Data-parallel Types

这是一个 CppCon 上的一个讲座。主要介绍了 std::simd 的思想。 * std::simd is for you - because you care about performance. * 如果工作中需要和性能打交道,那么 std::simd,特别是背后的思想,就值得关注。 * std::smid expresses data-parallelism - compiled to SIMD and ILP. * 数据并行,硬件层面使用了 SIMD 指令和指令级并行的能力。 * Focus on data-parallelism not SIMD instructions/registers! * 关注的焦点应该是数据并行这一思想,而不是 SIMD 指令或寄存器。如果思想不变,只是单纯使用 SIMD 指令,可能性能不会提高,甚至回退。 * std::simd enables separation of (1) serial execution; (2) synchronously parallel execution (SIMD and ILP); (3) asynchronously parallel execution (threads). * std::simd guides you to design scalable and portable parallelization. * std::simd enables high-level & specialized parallelism abstractions with full control where loop-vectorization fails. * 在循环向量化不起作用的情况下,std::simd 是个好选择。 * Consider type-vectorization not only loop-vectorization. * std::simd provides and API & ABI for vectorization across translation units (including library boundaries).

Let's Branch? Unlikely...

最核心的结论:对于现代 CPU 而言,都有动态分支预测的能力,你写 likely 或者不写 likely,没有意义,也不重要,因为对性能没有任何影响。

此外,这个文章中还介绍了一些 CPU、编译器、汇编指令等知识。言而总之,值得一读。