我是计算科学课程的一部分,并且来自非编程背景,所以请原谅我的无知。我正在编写一组 C 代码,以数值求解计算流体动力学课程的 Navier Stokes 方程。无论如何,作为我们任务的一部分,我必须编写在单个处理器(串行)上运行的代码,并提供使用 OpenMP 和/或 MPI 并行化相同代码的选择(以利用多个处理器,具体取决于用户输入在运行时间开始时。
我希望社区对此提供建议,但我有几个问题:
- 我应该为我的程序考虑 if/else 结构吗?(程序需要转向串行代码,或启用 MPI 的代码,或 OpenMP 代码,或 MPI+OpenMP 的混合,这意味着大部分代码将被复制)。
- 我是否应该将要复制的操作构造为单独的函数,并在需要它们的运行时调用这些函数?(但据我了解,函数调用通常会增加我的代码的开销,无论选择什么选择)
- 有没有办法隐藏预处理器指令或与 MPI 相关的函数(例如 MPI_Init()),以便它们根据用户在开始或运行时所做的选择方便地出现或消失?
- 最后,此任务的目的是衡量使用串行代码、与 OpenMP、与 MPI、与 MPI+OpenMP 相比的性能优势。我试图避免代码重复是否有意义,因为组合代码(以提高可读性)会不必要地增加我的串行代码的开销?例如与 MPI 相关的函数调用,可能有许多 if/else 条件,这会扭曲我的串行代码的性能测量,而程序开头的 if/else 结构将其引导到完全独立的路径(如第一季度) )。
我希望我已经问了一个明确的问题并遵守了社区的标准。非常感谢你。