矩阵中的共享内存乘法涉及多个进程

时间:2013-03-13 20:56:30

标签: c ipc shared-memory matrix-multiplication

我正在尝试通过共享内存学习IPC。我不明白如何将共享内存分配给不同进程的各种变量。例如,在矩阵乘法中,我不想全局声明矩阵,而是通过共享内存。我们如何将内存附加到不同的矩阵:

有人可以帮我吗?此外,它可以替换为mmap()和shm_open()还是只是文件?如果有,怎么样?我找不到可以说明如何通过进程修改共享内存的简单示例。

1 个答案:

答案 0 :(得分:1)

首先:不要将共享内存用于IPC。这太乱了。

在大多数共享内存有意义的情况下,使用线程更简单,更合适(以便共享所有内存)。如果不可能,你可能最好使用某种消息传递方案。

  

如何从此共享内存中为矩阵A,B和结果矩阵和
分配内存   附加到它,因为我不必全局声明矩阵,每个过程都需要A B C来执行    问题的一部分。

您必须想出一些在共享内存段中分配内存的方法。您不能使用malloc(),因为它的竞技场不包含共享内存。

如果您要存储的唯一数据将是这三个矩阵,两个进程都知道这些矩阵的大小,您可以将它们全部堆叠到一个结构中存储在细分中:

struct shm_data {
    float A[123][123], B[123][123], C[123][123];
};

struct shm_data *mat = (struct shm_data *) shm;

但是,如果矩阵的大小不固定,则必须在运行时计算它们的地址。

  

此外,它可以被mmap()和shm_open()取代,还是只是文件?

是。实际上,mmap()几乎普遍优于shm_open(),因为内存段由文件支持并遵循文件系统语义,因此可以合理地清理它。 POSIX共享内存(这是你正在使用的)更加怪异。