【问题标题】:What are canonical examples of parallel computation?并行计算的典型例子是什么?
【发布时间】:2011-03-17 23:32:15
【问题描述】:

我正在写一篇论文来测试一个新应用程序,该应用程序将展示并行计算的好处(与该应用程序的传统序列化版本相比)。我想在我的论文中使用canonical examples 进行并行计算。

我的第一个例子是the parallel computation of pi。理想情况下,我想要一个每次迭代都非常耗时的示例(因为与并行化相关的额外开销);我的第一个想法是使用 MCMC 和 Gibbs 采样进行贝叶斯模拟。

在这种情况下通常会讨论哪些其他问题?大型embarassingly parallel 问题有哪些好的示例?

【问题讨论】:

  • 您提供的维基百科文章包含一组示例。他们怎么了?
  • 它们很好,尽管我不认为它们会被视为“标准示例集”(例如 pi 示例不包括在内)。我不只是想要任何例子:我想要最著名的例子。
  • @Shane:那你为什么在最后一句话中要求“好例子”?好人未必总是出名。
  • @Jon:公平点;这就是为什么我在标题中包含“规范”,这应该意味着著名/重要。
  • 是什么让你认为有任何规范的例子?

标签: parallel-processing mpi


【解决方案1】:

还有一些 -

  • 矩阵乘法
  • 求逆矩阵
  • FFT
  • 字符串匹配
  • 渲染 3D 场景(通过扫描线转换或光线追踪)

【讨论】:

    【解决方案2】:

    我在过去使用的一个令人尴尬的并行问题示例是可视化曼德布罗集。每个像素都可以独立计算。

    康威的生活也很有趣,因为“下一个”棋盘的每个值都可以独立计算,但将取决于“当前”棋盘的相关位已经完成。

    【讨论】:

      【解决方案3】:

      我建议并行计算的典型示例令人尴尬的并行问题如果不完全,那么几乎是不相交的集合。换句话说,从事并行计算工作的人不会对令人尴尬的并行问题感到非常兴奋。我们之所以这么称呼它们是因为我们会很尴尬地为它们工作。

      如果我是你,我会看这些(不完全是原始列表):

      • 大型密集矩阵上的线性代数,包括直接方法和迭代方法;
      • 大型稀疏矩阵上的线性代数
      • 线性规划(及相关)问题的分支和绑定方法;
      • 生物信息学的序列匹配(在我的领域之外,我可能错误地表达了这一点);
      • 持续优化。

      我希望还有更多。

      编辑:您可能对this list of problems 感兴趣,它已被选为对下一代欧洲(学术)超级计算机进行基准测试。它会让您了解该利基市场的发展方向。

      【讨论】:

      • +1 感谢您提供此列表。我认为“令人尴尬”确实意味着容易分裂的事情(即迭代之间没有依赖关系),而不是它们本身就是令人尴尬的问题。
      • @Shane:我不敢苟同,它们被称为尴尬,因为我们这些从事并行计算工作的人会因为处理如此简单的问题而感到尴尬;更糟糕的是,继续工作并犯错误。可能它们很容易并行化,因为任务之间没有依赖关系,但这是另一回事。
      • +1 以获得 PRACE 基准套件的链接。出于同样的原因,我还将添加 SpecMPI 基准:spec.org/mpi
      【解决方案4】:

      分子动力学模拟允许您更改问题的大小,直到您的计算机资源耗尽(即 256 个粒子与 256,000,000 个粒子)。如果您在 NVT 条件下运行 MD 模拟,它确实是一个“规范”示例;-)

      【讨论】:

        【解决方案5】:

        我最喜欢的例子是蒙特卡罗模拟。

        【讨论】:

          【解决方案6】:

          字数统计似乎是 MapReduce 的典型示例。

          http://en.wikipedia.org/wiki/MapReduce#Example

          【讨论】:

            【解决方案7】:

            使用 Paul C. van Oorschot 和 Michael J. Weiner 的 method (PDF) 发现哈希函数中的冲突经常出现在各种加密设置中。

            【讨论】:

              【解决方案8】:

              我使用 Mandelbrot 集演示向我妈妈解释了并行编程是什么:http://www.ateji.com/px/demo.html

              您提到的所有示例大多是大量数据并行代码。您可能还想提及面向任务的代码,例如并行响应许多请求的服务器,以及数据流或流编程示例(MapReduce 是此类的一个很好的代表)。

              【讨论】:

                猜你喜欢
                • 2021-11-12
                • 2010-11-21
                • 1970-01-01
                • 2012-05-05
                • 2010-09-26
                • 1970-01-01
                • 2019-02-01
                • 2012-09-15
                相关资源
                最近更新 更多