假设我的三维触发网格需要与所有最近邻居通信二维数组。我可以简单地将2d数组存储为1d数组,以使数据连续并使用send / recv。如果我使用例如,我可以期待任何性能优势改为Mpi_type_vector?
答案 0 :(得分:1)
基本上,您可以手动将数据打包/解压缩到连续缓冲区或使用派生数据类型。
手动打包/解压缩需要更多代码,更多内存,但打包/解包时间可以减少OpenMP
。
派生数据类型需要更少的代码,更少的内存,但数据通常在引擎盖下打包/解包,这通常由单个线程执行。
使用派生数据类型的底线可以节省您从缓冲区复制数据,但可能并不总是最快的选择。