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

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

Read More

2D Poisson 方程与 Finite Element Method

上周上 Advanced Scientific Computing 的时候老板讲了 2D Poisson 的有限元法,用的是四边形等参数单元。他布置的作业是写第一类边界条件的求解器。由于我印象中 FEM 用三角网格比较多,因此自己又对照着写了三角形等参数单元的版本,以及把第三类边界条件的情况也做了出来。下面是一点笔记,主要包括计算用到的公式和方法。

Read More

HPCG 3.0 reference implementation 阅读笔记

HPCG (High-Performance Conjugate Gradient) 是如今主要的 HPC 系统性能测试基准之一,是一个精简的大型稀疏方程组并行求解器,包含了区域分解(Domain Decomposition)、多重网格(Multigrid)和预条件子(Preconditioner)这些重要的线性方程组求解技术。我在学完 MATH 6644 这门课以及自己动手写了 3D Multigrid 以后,我便一直想看看 HPCG 是如何实现的(虽然我还没学过 DD)。下面的记录是我阅读 HPCG 3.0 官方参考实现的源代码的笔记,源代码参见 GitHub .

Read More