【发布时间】:2014-12-10 20:19:24
【问题描述】:
我正在尝试使用 C++11 和 MPI 构建分布式应用程序。我想通过 MPI_send() 调用将 lambda 闭包发送到集群上的另一台计算机。
例如,假设我有以下 lambda
auto x = [x, y] () { return x + y; };
我想定义一个函数,比如pack(),这样我就可以调用 MPI 发送 -
MPI_Send(pack(f_xy), SOMESIZE, MPI_CHAR, 1, 0, MPI_COMM_WORLD);
谁能告诉我如何定义pack 函数(在接收器端也是unpack 函数?)。我一直在网上四处寻找,但没有成功找到任何方法。
【问题讨论】:
-
确实没有办法在 C++ 中序列化一般函数或特别是 lambda - 例如,this question 或 this one。
-
@JonathanDursi an answer 对后一个问题似乎表明闭包实际上可以序列化。
-
@DmitriChubarov - 据我所知,这个答案似乎依赖于序列化函数指针或表示要执行哪个 lambda 的依赖于实现的不透明对象。但这不是函数本身,即使目标进程的内存中已经存在该函数,也没有明显可靠的方法可以将它们转换为相关函数。
标签: c++ c++11 serialization mpi openmpi