【问题标题】:Matrix Multiplication multiprocess in CC中的矩阵乘法多进程
【发布时间】:2013-03-12 23:30:27
【问题描述】:

我想通过 fork 使用多个进程进行矩阵乘法,并使用共享内存,每个进程为小型矩阵计算一行,但对于较大的矩阵,不可能为每一行创建一个进程。所以它应该计算一个由大小决定的行块。例如,最多 10 行它应该计算每个进程的一行,然后说对于 20 行,一个进程应该计算每个进程 4 行。我无法对其进行编程,因为我可以将行号作为进程数。假设我将进程数设为 8,那么每个块将有 N/8 行。但是矩阵的大小应该是 8 的倍数,进程数应该是可变的。假设它有 6 个 CPU,我可以采用进程数吗保持不变,即 6。什么是正确的方法?应该怎么写?

【问题讨论】:

  • 我觉得在这里用谷歌搜索一下会有很长的路要走,因为这已经做过很多次了。
  • 我在 C 中找不到任何示例矩阵乘法程序,它可以描述使用进程和共享内存进行矩阵乘法以及优化它的方法

标签: c multiprocessing matrix-multiplication


【解决方案1】:

这是一些演示矩阵 mult 的示例代码。在 pthreads 中。我几乎立即在搜索引擎中找到了它。它显示了一种执行您描述的方法。
http://www.cs.arizona.edu/classes/cs422/spring13/examples/matmult-dyn.c

您可能需要对其进行一些微调以确定最佳方法。

您可能还应该阅读这篇文章: http://aristeia.com/TalkNotes/PDXCodeCamp2010.pdf

【讨论】:

  • 我在其中使用进程而不是线程,我在搜索引擎上找不到它...
  • 当然可以。我一开始并没有意识到这一点。我怀疑线程是解决这个问题的一种更容易处理的方法,这也许是我第一次错过它的原因。无论哪种方式,都没有理由创建比可用于运行它们的内核更多的进程(或线程)。其余的只是开销。
  • 那么我应该将进程数限制为 6 吗?并使每个进程执行 N/6 行?
  • 如果不进行基准测试,很难确切知道...也就是说,我想我会先将行数除以 CPU 数,然后将那么多行分配给每个行。如果结果不均匀,显然你需要在最后处理剩余部分。您正在跨所有内核并行执行工作,但不会经常回来要求更多。
  • 好的,谢谢,我会尝试做同样的事情,但我不确定如何处理剩余部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多