2011-06-14 133 views

回答

6

目前最简单的界面是由thrust::reduce提供的。

如您所述,还有Mars

+0

什么推力::减少并不是我所说的map-reduce。 thrust :: reduce是许多函数式编程语境中的reduce函数,它们将序列,起始值和二进制运算转换为单个值。在Scala中,它被称为“foldLeft”或“foldRight”,但在大多数函数式编程语言中,它被称为“reduce”。 map-reduce算法的reduce阶段对一组与key关联的值执行一些操作,但该操作不是必需的二进制,并且不必将该序列转换为单个值。 – 2013-06-26 00:41:32

0

多年前,我已实施cumar。当我使用Mac OS X和'nvcc'编译器对苹果的'clang'不满意时,我设计了这个库纯粹的C++(以及lambda的味道)。

一个典型的地图操作是这样的:

//A = B + C, all of length 'n' 
cumar::map()("[](double a&, double b, double c){ a = b+c; }")(A, A+n, B, C); 

为了减少操作,它看起来像这样:

// x = min(A), A of size 'n' 
cumar::reduce()("[](double a, double b){ return a < b ? a : b; }")(A, A+n);