基准测试 - 考虑或不考虑程序的初始化和输入/输出部分

时间:2018-01-18 00:50:04

标签: benchmarking openmpi

我正在对一个简单的MPI程序进行基准测试,该程序使用每个元素的递推公式计算2D数组上的值:此迭代模式实现为主循环,其中对于每次迭代,2D数组具有新值。通过将2D域划分为若干子计算域来获得MPI实现增益。

在此主循环之前,我进行MPI初始化,例如派生数据类型声明或计算2D域上的进程等级。

在此主循环之后,我使用 MPI_Gather 收集所有子阵列数据,并使用输出操作将数据保存到文件中。

你建议我为这个基准测试做些什么:将缩短时间放在循环开始和循环结束之间(当达到收敛时,我就离开了这个主循环)?

还是考虑到代码开头的所有MPI初始化并考虑到代码的输出部分?

我希望只关注拓扑和流程之间通信的纯粹方面的运行时增益(即通过在此循环之前设置开始时间来仅关注主循环和紧接着结束时间。)

我认为“MPI初始化和I / O操作”是无用的,因为我将基准测试作为2D数组和进程数的函数进行了测试:但是使用这种方法,运行时的增益将被所有MPI Init和Output存储器缩小。 。实际上,当2D阵列非常大时,这些操作将花费很长时间,因此我将无法比较和突出MPI与顺序版本的代码相比带来的增益。

对于经典基准测试,您如何看待这种方式?

在此类型的MPI程序中实现基准测试的最佳通用方法是什么? (先验我认为我不应该考虑启动和I / O操作,但我希望有人确认它。)

欢迎任何评论,谢谢

0 个答案:

没有答案