Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用fork()和IPC实现C中最有效的矩阵乘法_C_Concurrency_Ipc_Fork_Matrix Multiplication - Fatal编程技术网

使用fork()和IPC实现C中最有效的矩阵乘法

使用fork()和IPC实现C中最有效的矩阵乘法,c,concurrency,ipc,fork,matrix-multiplication,C,Concurrency,Ipc,Fork,Matrix Multiplication,我需要使用多个进程在C中实现并发矩阵乘法。我理解,因为每个进程都有自己的私有地址空间,所以我必须使用某种形式的进程间通信(IPC)。我四处查看了一下,没有找到很多不使用线程的实现。我想知道是否有人知道最好的方法,使用共享内存、消息传递或管道?我不是在要求一个解决方案,而是,如果有人知道的话,这些方法中哪一种在矩阵乘法中更有效。或者,如果有一种通用的标准方法来处理多个进程,我认为共享内存将是解决这个问题的好办法。这些进程可以计算它们的解决方案,并共享一个内存以将解决方案放在一起 #include

我需要使用多个进程在C中实现并发矩阵乘法。我理解,因为每个进程都有自己的私有地址空间,所以我必须使用某种形式的进程间通信(IPC)。我四处查看了一下,没有找到很多不使用线程的实现。我想知道是否有人知道最好的方法,使用共享内存、消息传递或管道?我不是在要求一个解决方案,而是,如果有人知道的话,这些方法中哪一种在矩阵乘法中更有效。或者,如果有一种通用的标准方法来处理多个进程,我认为共享内存将是解决这个问题的好办法。这些进程可以计算它们的解决方案,并共享一个内存以将解决方案放在一起

#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()而不使用信号量来做我需要做的事情?