{ SIMD }

  • ARM ASIMD & SVE 向量数学库接口

    |

    学校的 A64FX 机器上最近装了 ARM 官方的编译器和加速库套件,我摸了一下。令我无语的是 ARM 的手册里并没有说如何为向量数据类型使用数学函数,只是说他们的编译器可以做自动向量化。我找了一下,反而是从华为鲲鹏的网站上找到了他们的数学库函数说明(顺带吐槽一点华为的数学库也叫 SVML,和英特尔的 Short Vector Math Library 一样),其中列出的接口和此前 GCC 在 x86 平台上的 libmvec 接口命名方式相同。我又查了一下 ARM 加速库里的 libamath 的符号表,果然在里面找到了对应的 SVE 版本接口。下面是我试验过的 ASIMD & SVE 向量数学库接口列表。

  • 比起C++性能榨汁机,你可能更需要的是 -O3 和 ICC

    |

    前两天看到一个文章系列:《C++性能榨汁机》,其中前面四篇(第四篇)在讲分支预测和如何避免分支预测带来的性能下降问题。文章大体的思路是对的,只是我觉得手写条件传送代码实在是有点奇技淫巧,在绝大部分的情况下是不应该提倡的。我觉得比起条件传送代码,用 SIMD 加上掩码才是更直观的操作。我还是用原文的代码来说明这个问题。

  • 使用 AVX 系列指令集进行向量化

    |

    最近上课讲到了向量化的内容,我顺便整理了一下自己手头以前相关的资料。下面内容的主要关注点是在 x86 平台上让编译器进行自动向量化,但是第二部分所提到的一些原则在各个平台上都适用。

  • CPU Case Study - Optimizing DGEMM

    |

    Yet Another GEMM Study.

    两年前我按 Ref. 1 的页面(以前还没有 GitHub Repo 和 Markdown pages 呢)做过一次 DGEMM Optimization,当时做的效果其实不是很好。去年叶老师给我看了一下 BLIS 这个项目,说里面分块和分级 Cache 的思路值得一看。前两天一搜,居然出了 Ref. 2 这个 Repo,有如此详细的指导和参考代码,不自己造一次轮子简直说不过去了。我最后撸出来的代码在 这里