是否有基于GPU(CUDA)的MapReduce实现?

11

目前我知道的是Mars,但还有其他选择吗?

2个回答

6

目前,最简单的接口由thrust::reduce提供。

正如您所指出的,还有Mars


3
thrust::reduce 的功能与我所谓的“map-reduce”不同。thrust::reduce 是在许多函数式编程环境中发现的 reduce 函数,它将一个序列、一个起始值和一个二元操作转换为单个值。在 Scala 中,它被称为“foldLeft”或“foldRight”,但在大多数函数式编程语言中,它被称为“reduce”。 map-reduce 算法中的 reduce 阶段执行与键关联的一组值上的某些操作,但这个操作不一定是二元的,也不一定会将序列转换为单个值。 - Jim Pivarski

1

多年前,我已经实现了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);

对于reduce操作,它的形式如下:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接