【发布时间】:2016-04-22 16:03:38
【问题描述】:
我正在开发一个 C++ 应用程序,我使用 MPI C 绑定通过网络发送和接收数据。我明白发送
const int VECTOR_SIZE = 1e6;
std::vector<int> vector(VECTOR_SIZE, 0.0);
通过
// Version A
MPI_Send(const_cast<int *>(vector.data()), vector.size(), MPI_INT, 1, 0, MPI_COMM_WORLD);
比
更有效率// Version B
for (const auto &element : vector)
MPI_Send(const_cast<int *>(&element), 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
由于MPI_Send 引入的延迟。但是,如果我想发送内存中不连续的数据结构(例如 std::list<int>),我不能使用版本 A,但必须求助于版本 B 或将列表的内容复制到连续容器(如 @987654326 @,例如)首先使用版本 A。由于我想避免额外的副本,我想知道 MPI 中是否有任何选项/其他函数可以有效使用版本 B(或至少类似的循环- like 构造)而不会在每次调用 MPI_Send 时产生延迟?
【问题讨论】:
-
你可以看看 Boost MPI,因为它支持 STL 容器。