easyLambda C++数据处理框架 项目简介
easyLambda 是一个 C++ 的 MPI 和数据处理框架。该项目旨在满足使用 C++ 进行标准化的数据处理。设计的目标是可组合、易用接口、去耦合 I/O,算法逻辑无需关注数据格式和并行处理代码,减少样板代码数量。可方便的处理类型安全的数据流管道,MapReduce 操作,MPI 并行计算 等等。easyLambda 使用 ezl 来编写数据处理任务,下面是一个示例的 ezl 任务:ezl::rise(ezl::kick(10000)) // 10000 trials in total
.map([] {
auto x = rand01();
auto y = rand01();
return x*x + y*y;
})
.filter(ezl::lt(1.))
.reduce(ezl::count(), 0)
.map([](int inCircleCount) {
return (4.0 * inCircleCount / 10000);
}).colsTransform().dump()
.run();并行计算模型:性能测试结果:数据流:要求:c++14 兼容的编译器和 MPI (mpic++/mpicxx 和 mpirun)支持 gcc-5.1 和 clang-3.5 或者更新版本在 gcc-5.3, gcc-6.0(dev. branch), Apple LLVM version 7.0.0 (clang-700.0.72) 下测试通过boost::mpi, boost::serialization 测试通过的版本是 5.8 和 6.0.MPI 是一个跨语言的通讯协议,用于编写并行计算机。支持点对点和广播。MPI是一个信息传递应用程序接口,包括协议和和语义说明,他们指明其如何在各种实现中发挥其特性。MPI的目标是高性能,大规模性,和可移植性。MPI在今天仍为高性能计算的主要模型。主要的MPI-1模型不包括共享内存概念,MPI-2只有有限的分布共享内存概念。 但是MPI程序经常在共享内存的机器上运行。在MPI模型周边设计程序比在NUMA架构下设计要好因为MPI鼓励内存本地化。尽管MPI属于OSI参考模型的第五层或者更高,他的实现可能通过传输层的sockets和Transmission Control Protocol (TCP)覆盖大部分的层。大部分的MPI实现由一些指定惯例集(API)组成,可由C,C++,Fortran,或者有此类库的语言比如C#, Java or Python直接调用。MPI优于老式信息传递库是因为他的可移植性和速度。下面是一个用于统计单词数量的示例代码:#include <string>
#include <boost/mpi.hpp>
#include "ezl/ezl.hpp"
#include "ezl/algorithms/readFile.hpp"
#include "ezl/algorithms/reduces.hpp"
int main(int argc, char* argv[]) {
using std::string;
using ezl::readFile;
boost::mpi::environment env(argc, argv);
ezl::rise(readFile<string>(argv[1]).rowSeparator('s').colSeparator(""))
.reduce<1>(ezl::count(), 0).dump()
.run();
return 0;
}
.map([] {
auto x = rand01();
auto y = rand01();
return x*x + y*y;
})
.filter(ezl::lt(1.))
.reduce(ezl::count(), 0)
.map([](int inCircleCount) {
return (4.0 * inCircleCount / 10000);
}).colsTransform().dump()
.run();并行计算模型:性能测试结果:数据流:要求:c++14 兼容的编译器和 MPI (mpic++/mpicxx 和 mpirun)支持 gcc-5.1 和 clang-3.5 或者更新版本在 gcc-5.3, gcc-6.0(dev. branch), Apple LLVM version 7.0.0 (clang-700.0.72) 下测试通过boost::mpi, boost::serialization 测试通过的版本是 5.8 和 6.0.MPI 是一个跨语言的通讯协议,用于编写并行计算机。支持点对点和广播。MPI是一个信息传递应用程序接口,包括协议和和语义说明,他们指明其如何在各种实现中发挥其特性。MPI的目标是高性能,大规模性,和可移植性。MPI在今天仍为高性能计算的主要模型。主要的MPI-1模型不包括共享内存概念,MPI-2只有有限的分布共享内存概念。 但是MPI程序经常在共享内存的机器上运行。在MPI模型周边设计程序比在NUMA架构下设计要好因为MPI鼓励内存本地化。尽管MPI属于OSI参考模型的第五层或者更高,他的实现可能通过传输层的sockets和Transmission Control Protocol (TCP)覆盖大部分的层。大部分的MPI实现由一些指定惯例集(API)组成,可由C,C++,Fortran,或者有此类库的语言比如C#, Java or Python直接调用。MPI优于老式信息传递库是因为他的可移植性和速度。下面是一个用于统计单词数量的示例代码:#include <string>
#include <boost/mpi.hpp>
#include "ezl/ezl.hpp"
#include "ezl/algorithms/readFile.hpp"
#include "ezl/algorithms/reduces.hpp"
int main(int argc, char* argv[]) {
using std::string;
using ezl::readFile;
boost::mpi::environment env(argc, argv);
ezl::rise(readFile<string>(argv[1]).rowSeparator('s').colSeparator(""))
.reduce<1>(ezl::count(), 0).dump()
.run();
return 0;
}