【发布时间】:2016-02-16 07:04:07
【问题描述】:
在任何快速回答之前,我想解释一下我的需求。我正在从事一个 C-Posix 项目,专注于使用 Pthreads 进行并行计算。我做了研究,发现了几十种算法来计算 Pi:Bailey-Borwein-Plouffe 公式、Machin-like 公式、Leibniz 公式、Chudnovsky 算法、蒙特卡罗、Ramanujan 等。 问题是在速度收敛或每次迭代的数字方面我不需要“最佳”算法,因为获得 pi 不是项目的目标本身。该项目的真正目标是比较使用 pthread 解决串行和并行的相同编程问题的性能。 例如,在项目结束时,我希望得到一个这样的比较表:
说了这么多之后,我需要一个尽可能简单的算法,在 pthreads 中进行简单的编码(不是 MPI、OpenMP 或类似的)(令人尴尬的并行将是一个完美的选择),最后但并非最不重要的是算法必须适合显示对并行化的巨大影响
PD:如果有人可以提出任何其他适合该项目的并行计算,我也将不胜感激。
谢谢!
【问题讨论】:
-
至于“其他并行计算”,想想一个程序,它需要对大量输入记录进行某种操作(pfff,比如,字符串反转?)。
-
质数计算可以并行化。不是为了一个单独的数字[不值得],但你可以做 master/worker 并让 master 保持喂食范围(例如 2-1000 --> 线程 0、1000-2000 --> 线程 1)。当一个线程完成它的范围时,它会向 master 请求一个新的范围。或者,只是让每个线程根据线程数计算它。但是,话又说回来,也许一个单独的数字并行可能会很有趣。
-
听起来不错。在等待该线程的响应时,我将研究这些类型的算法。谢谢。
-
你的桌子一开始就有缺陷。您必须考虑创建和删除线程所需的时间,否则您的基准测试是无稽之谈。这意味着像 10 次甚至 1000 次迭代这样的情况在并行时可能会慢得多。
-
另外,“吸血鬼数字”怎么样。请参阅stackoverflow.com/questions/32834843/… 另请参阅:reddit.com/r/dailyprogrammer/comments/3moxid/… 您可以比“4 2”和“6 3”订单高得多,甚至可以进入多精度数学。不像看起来那么容易
标签: c algorithm parallel-processing pthreads pi