3

我正在研究并行编程,并且正在研究 mapreduce 和其他分布式算法。最好只是学习 mapreduce 还是有更通用的算法可以更好地为我服务?

4

4 回答 4

4

这取决于您打算使用算法的目的。

MapReduce是一种通用且非常有用的编程模型。(谷歌的许多内部索引过程都基于它)。学习它当然不会对您造成任何伤害。

MapReduce 是一种用于处理和生成大型数据集的编程模型和相关实现。用户指定一个处理键/值对以生成一组中间键/值对的 map 函数,以及一个合并与同一中间键关联的所有中间值的 reduce 函数。如论文所示,该模型可以表达许多现实世界的任务。

要学习的最重要的并行处理概念非常简单:如果您想获得有效的加速,则需要尽量减少同步。

争取:

  • 大粒度的工作块
  • 保持大小工作块的大小相似
  • 最小化同步步骤的数量
于 2010-03-09T08:31:49.293 回答
2

如果你想学习一些关于并行处理的知识,我不相信选择一种算法会给你带来深刻的见解。

Mapreduce 是 amap和 areduce操作的组合。这些是函数式语言提供的典型高阶函数。

我建议首先学习一门函数式语言,例如 Scheme 或 Clojure。对于 Scheme,“计算机程序的结构和解释”似乎风靡一时。

于 2010-03-09T11:00:23.217 回答
2

对于许多“常规”串行算法,有并行版本,其中一些可以用 MapReduce 建模。当然学习 MapReduce,因为它是新的和令人兴奋的,但它只是您工具箱中的另一个工具,您当然可以学习更多,因为 MapReduce 存在限制(您将了解它们)。

于 2010-03-09T13:10:05.127 回答
1

要真正了解并行编程,您应该学习几种并行编程模型,而不仅仅是一个并行编程框架。您应该研究并行编程的共享内存(例如 pthreads)和消息传递(例如 MPI 和 MapReduce)方法。

MPI 是一个非常通用的工具,用于创建消息传递应用程序。如果您广泛使用 MPI,您会发现 MPI 程序的某些元素会一遍又一遍地重复出现,例如设置一个“主”进程,将工作划分为“工作”进程,并汇总结果。MapReduce 是消息传递框架的特定实现,并提供比 MPI 更简单的编程模型。它处理并行应用程序中频繁出现的代码,更重要的是,处理故障恢复和数据局部性等问题。开源 Hadoop 试图模仿 MapReduce。

I think you will be better able to appreciate what MapReduce does and how it might be implemented by writing several MPI programs of your own. It can't hurt to learn Hadoop, but when it comes to general knowledge of parallel programming, it is good to be familiar with the basics like pthreads, OpenMP, and MPI.

于 2010-03-10T08:07:20.650 回答