使用fork()和IPC实现C中最有效的矩阵乘法
我需要使用多个进程在C中实现并发矩阵乘法。我理解,因为每个进程都有自己的私有地址空间,所以我必须使用某种形式的进程间通信(IPC)。我四处查看了一下,没有找到很多不使用线程的实现。我想知道是否有人知道最好的方法,使用共享内存、消息传递或管道?我不是在要求一个解决方案,而是,如果有人知道的话,这些方法中哪一种在矩阵乘法中更有效。或者,如果有一种通用的标准方法来处理多个进程,我认为共享内存将是解决这个问题的好办法。这些进程可以计算它们的解决方案,并共享一个内存以将解决方案放在一起使用fork()和IPC实现C中最有效的矩阵乘法,c,concurrency,ipc,fork,matrix-multiplication,C,Concurrency,Ipc,Fork,Matrix Multiplication,我需要使用多个进程在C中实现并发矩阵乘法。我理解,因为每个进程都有自己的私有地址空间,所以我必须使用某种形式的进程间通信(IPC)。我四处查看了一下,没有找到很多不使用线程的实现。我想知道是否有人知道最好的方法,使用共享内存、消息传递或管道?我不是在要求一个解决方案,而是,如果有人知道的话,这些方法中哪一种在矩阵乘法中更有效。或者,如果有一种通用的标准方法来处理多个进程,我认为共享内存将是解决这个问题的好办法。这些进程可以计算它们的解决方案,并共享一个内存以将解决方案放在一起 #include
#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, int size, int shmflg);
#包括
#包括
int shmget(按键、int大小、int shmflg);
是用于共享内存的C函数之一(您需要shmat()
,可能还需要shmdt()
和shmctl()
)
此外,还必须注意同步,以便进程不会操纵彼此的计算
我将使用信号量:请参见和并发处理矩阵乘法的最有效方法是共享内存。通过这种方式,您不必通过管道/消息序列化矩阵,您可以直接在共享内存空间上应用乘法。共享内存的优点是避免了额外的复制操作,而管道需要副本。您可以使用MPI:为什么要避免线程?我并不是真的要避免线程。我正在写两个做同样事情的程序。一个分叉子进程,另一个使用pthread,以查看效率上的差异。我想说,简单的矩阵乘法不会受到竞争条件的影响。从我所知,似乎我可以通过使用fork()和join()而不使用信号量来做我需要做的事情?