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

标签 c ipc shared-memory matrix-multiplication

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

有人可以帮我解决这个问题吗?另外,它可以被 mmap() 和 shm_open() 替换还是只是文件?如果是,怎么办?我找不到恰当的例子来说明进程如何修改共享内存。

最佳答案

首先:IPC不要使用共享内存。很乱。

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

How do I allocate memory from this shared memory for matrix A , B and resultant matrix and
attach to it as I don't have to declare matrices globally and each process would need A B C to do
part of problem.

您必须想出某种方法来在共享内存段内分配内存。您不能为此使用 malloc(),因为它的 arena 不包含共享内存。

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

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

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

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

Also , can it be replaced by mmap() and shm_open() or is it just files ?

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

关于c - 涉及多个进程的矩阵乘法中的共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15396294/

相关文章:

node.js - 使用 exec() 创建 child_process 时从子进程向父进程发送消息

python - 如何检测多处理。管道已满?

c - 如何从一个文件获取消息和消息ID到另一个文件?

c - 如何将字符串数组附加到共享内存? C

c++ - 共享内存的强大 CRITCAL_SECTION?

Python - OSError 24(打开文件太多)和共享内存

c - 递归性。字母数字字符串中的字母

c - 从变量中删除数字 8 和 9。我究竟做错了什么?

c - linux c语言环境下如何给用户授权?

c++ - 如何在 C 或 C++ 中进行相等比较?