• OpenMP fork-join cost 测试

    |

    前两天和基友讨论问题的时候,想起来此之前先后在几个场合遇到过什么场合开 OpenMP 多线程的加速能抵过开线程的 overhead 这个问题。

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

    |

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

  • 2D Poisson 方程与 Finite Element Method

    |

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

  • 代数多重网格(Algebraic Multigrid)简介

    |

    代数多重网格(AMG)是利用几何多重网格(Geometric Multigrid, GMG)的一些重要原则和理念发展起来的不依赖于实际几何网格的多重网格方法。它继承了几何多重网格的主要优点,并且可以被用于更多类型的线性方程组。本文将介绍 Classic AMG 的基本算法并忽略数学推导过程。

  • 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 .

  • 泊松方程的中心差分格式与多重网格法

    |

    这个学期上 MATH 6644 接触了多重网格(Multigrid, MG)法,觉得这是一个很有意思的方法。课程作业和期末项目的选项之一就是用 MG 加速泊松方程中心差分格式的求解。虽然我期末项目选了另一个题目,然而我也写了一下这个。这篇东西算是一点小的总结。