通过MPI发送Lambda闭包

Sending a Lambda Closure Over MPI

本文关键字:闭包 Lambda 发送 MPI 通过      更新时间:2023-10-16

我正在尝试用C++11和MPI构建一个分布式应用程序。我想通过MPI_send()调用将lambda闭包发送到集群上的另一台计算机。

例如,假设我有以下lambda

auto x = [x, y] () { return x + y; };

我想定义一个函数,比如pack(),这样我就可以调用MPI send-

MPI_Send(pack(f_xy), SOMESIZE, MPI_CHAR, 1, 0, MPI_COMM_WORLD);

有人能告诉我如何定义pack函数(也是接收器端的unpack函数吗?)。我一直在网上四处寻找,但没有成功找到任何方法来做到这一点。

我能想到三种方法,既不简单也不好。

第一种方法是编译一个dll并序列化它并发送它,在另一端写出它并加载和执行它。这需要与您的构建系统交互。它对函数对象的效果要比lambdas好得多。

第二种方法是使用类似boost phoenix的东西来编写伪C++,使解析树在C++中可见。然后通过连线发送带有绑定的解析树,并在另一端对其进行解释。

第三种方法是将脚本引擎连接到两端,并通过连线发送脚本(同样带有绑定和绑定数据)。

没有一个是容易的,也没有一个真正通过电线发送lambda。通常,lambda是类型,而不是数据,MPI不支持传输类型。