C语言中的矩阵乘法多处理机

C语言中的矩阵乘法多处理机,c,multiprocessing,matrix-multiplication,C,Multiprocessing,Matrix Multiplication,我想通过fork使用多个进程进行矩阵乘法,并使用共享内存,每个进程计算一行较小的矩阵,但对于较大的矩阵,不可能为每行创建一个进程。因此,它应该计算由大小决定的行块。例如,最多10行,它应该为每个进程计算一行,之后,对于20行,一个进程应该为每个进程计算4行。我无法编程,因为我可以将行数作为进程数。假设进程数为常量,比如说8,那么每个块将有N/8行。但是矩阵的大小应该是8的倍数,进程数应该是可变的。假设它有6个CPU,我可以将进程数设为常量,即6。正确的方法是什么?我应该如何编写它?下面是一些演示

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

下面是一些演示matrix mult的示例代码。在pthreads中。我几乎立刻在搜索引擎中找到了它。它显示了执行您描述的操作的方法。

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

您可能还应该阅读本文:

我觉得在这里用谷歌搜索会有很大帮助,因为这已经做了很多次了,以前很多次。我找不到任何C语言的矩阵乘法示例程序,它可以描述使用进程和共享内存的矩阵乘法以及优化itI的方法。我在其中使用进程而不是线程,我在搜索引擎上找不到它……当然可以。一开始我没有意识到这一点。我怀疑线程是解决这个问题的一种更容易处理的方法,这也许是我第一次错过它的原因。无论采用哪种方式,都没有理由创建更多的进程(或线程),因为您可以在这些进程(或线程)上运行内核。剩下的只是开销。所以我应该把进程数限制在6个吗?让每一个过程做N/6行?没有基准很难准确知道。。。这就是说,我想我应该首先将行数除以CPU数,然后将那么多行分配给每个行。如果结果不均匀,很明显,你需要在最后处理剩余的部分。您正在并行地完成所有内核的工作,但不会经常回来要求更多。好的,谢谢,我将尝试同样的操作,尽管我不确定如何处理剩余部分