【发布时间】:2018-10-11 23:41:56
【问题描述】:
假设我的 3d procs 网格需要与所有最近的邻居通信 2d 数组。我可以简单地将二维数组存储为一维数组以使数据连续并使用发送/接收。如果我使用例如,我可以期待任何性能优势吗?改为mpi_type_vector?
【问题讨论】:
假设我的 3d procs 网格需要与所有最近的邻居通信 2d 数组。我可以简单地将二维数组存储为一维数组以使数据连续并使用发送/接收。如果我使用例如,我可以期待任何性能优势吗?改为mpi_type_vector?
【问题讨论】:
基本上,您可以手动将数据打包/解包到连续缓冲区或使用派生数据类型。
手动打包/解包需要更多代码、更多内存,但打包/解包时间可以减少 OpenMP 等。
派生数据类型需要更少的代码和内存,但数据通常在后台打包/解包,这通常由单个线程执行。
底线,使用派生数据类型可以节省您将数据复制到缓冲区或从缓冲区复制数据,但可能并不总是最快的选择。
【讨论】: