通过MPI发送Lambda闭包
Sending a Lambda Closure Over MPI
我正在尝试用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不支持传输类型。
相关文章:
- 如何使用类模拟 C++11 中的 lambda 函数和闭包?
- 使用带有闭包的 lambda 的回调
- C++中的 Lambda <-> 闭包等价性
- Lambda闭包左值可以作为右值参考参数传递
- 关于函数模板中定义的 lambda 闭包类型可以说些什么?
- Lambda 表达式闭包函数不起作用
- Lambda 闭包类型构造函数
- 当另一个调用 lambda 使用默认捕获时,lambda 的闭包可能会被破坏吗?
- c++11 lambda 真的支持闭包吗?函数变量中存在语义冲突
- 在 lambda 闭包中复制的 const 对象不可变
- 如何将局部引用的变量传递给 lambda 函数,但该函数将在闭包完成后调用
- C++11 Lambda闭包通过引用涉及一个堆栈变量,该变量离开作用域是允许的,但得到了未定义的行为
- C++定义一个使用lambda闭包的函数
- 在 lambda 闭包上应用移动
- 在 C++11 lambda 语法中,堆分配的闭包
- 从函数返回的 C++ lambda 闭包类型
- 通过MPI发送Lambda闭包
- 了解Lambda闭包类型如何删除默认构造函数
- c++编译器会对lambda闭包执行编译时优化吗?
- 给定一个lambda捕获,哪些规则决定结果闭包成员的类型