文章16
标签10
分类5

cmh的期末大作业随想

cmh程序设计 期末大作业

概述

对n by n个三维格点进行积分,实际上是一个五层的循环,在第三层以后加上#pragma omp for collapse(3) reduction(+, sum)其实就有尚可的效率了。

注意到每个三维格点的数据只集中在以分布函数的截断长度r为半径,以对应三维空间的点为球心的球中,我们只需要对这一部分(或者是2r by 2r by 2r的一个盒子)的格点进行积分。这是一个很强的优化。

只考虑效率因素,不是很必要使用MPI。

困难

并行的设计本身不是难点,难点在于ScaLAPACK的使用。

可以参考的是一个Github项目:ScaLAPACK Example。名义上是C++项目,实际上除了输入输出外,几乎都是C代码。把他改成一个并行加速的对角化函数(C语言)留作练习(雾)。

ScaLAPACK函数相关的文档,我找到的最好的是IBM Parallel ESSL的文档,里面给出了详细的参数解释和样例。

Netlib的文档基本上约等于没有,文档写在注释里面,并且非常难读,我也没有找到示例。ScaLAPACK是一个Fortran 77库,类似函数的功能叫subroutine。Fortran的传参都是实参,对应C/C++都是指针,在函数内部就可以对传入参数进行修改。这一点在调用参数时需要注意。

先说这些,可能以后聊聊Fortran吧(不要让我真的写Fortran 77代码)。

(被正态了,悲)

">