【问题标题】:Most efficient matrix multiplication in C using fork() and IPC使用 fork() 和 IPC 在 C 中最有效的矩阵乘法
【发布时间】:2012-09-16 04:38:31
【问题描述】:

我需要使用多个进程在 C 中实现并发矩阵乘法。我知道因为每个进程都有自己的私有地址空间,所以我将不得不使用某种形式的进程间通信 (IPC)。我环顾四周,找不到许多不使用线程的实现。我想知道是否有人知道解决此问题的最佳方法,无论是使用共享内存、消息传递还是管道?我不是在寻求解决方案,而是如果有人知道,这些方法中的哪一种对矩阵乘法更有效。或者,如果有一个通用的标准方法可以通过多个进程执行此操作?

【问题讨论】:

  • 共享内存的优点是可以避免额外的复制操作,而管道则需要复制。
  • 你为什么要避免线程?
  • 我并没有真正回避它们。我正在编写两个做同样事情的程序。一个 fork 子进程,另一个使用 pthread,以查看效率差异。

标签: c concurrency ipc fork matrix-multiplication


【解决方案1】:
我认为

共享内存将是解决这个问题的好方法。这些进程可以计算它们的解决方案并共享一个内存以将解决方案放在一起。

#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, int size, int shmflg);

是用于共享内存的 C 函数之一(您可能需要 shmat() 并且可能还需要 shmdt()shmctl())。

您还必须注意同步,以免进程相互操纵计算。

我会为此使用 信号量:请参阅 Semaphores in CSemaphore Wikipedia

【讨论】:

  • 我会说简单的矩阵乘法不会受到竞争条件的影响
  • 据我所知,我似乎可以通过使用不带信号量的 fork() 和 join() 来做我需要做的事情?
【解决方案2】:

并发处理矩阵乘法的最有效方法是共享内存。这样,您不必通过管道/消息序列化矩阵,并且可以直接将乘法应用到共享内存空间。

【讨论】:

    猜你喜欢
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    相关资源
    最近更新 更多