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