MPI派生数据类型性能期望与集群互连分析
1. MPI派生数据类型性能期望
在MPI(Message Passing Interface)中,派生数据类型的使用十分常见。对于可以用五种构造函数表达的布局,有如下自然的性能期望。对于任意函数 ( f(n) \leq n )(例如常数),有:
[
MPI A(n, contig(f(n), T )) \preceq MPI A(n, vector(f(n), T )) \preceq MPI A(n, index block(f(n), T )) \preceq MPI A(n, index(f(n), T )) \preceq MPI A(n, struct(f(n), T ))
]
这表明,如果一个给定的布局可以用更少的参数(更低的代价)来表达,那么对于任何MPI函数 ( A ),使用这种低代价的表达应该不会比使用高代价的数据类型构造函数更差,理想情况下会更好。
非平凡准则
非平凡准则对MPI实现进行约束或提出要求。并非所有的MPI库都能满足这些准则,但为了性能可移植性,实现遵循这些准则是有益的。自一致性原则要求MPI库将用户定义的数据类型进行类型归一化,转换为“最有效”的表示形式。例如,一个 ( struct(n, mn, T) )(其中所有 ( n ) 个块具有相同的基类型)可以简单地转换为一个索引类型,其代价从 ( 3n ) 变为 ( 2n )。
以下是一些准则和要求的形式:
[
MPI A(n, struct(n’, mn’, Tn’)) \approx MPI A(n, index(n’, mn’, T ))
]
对于