複数のプロセスを使用して、C で並列行列乗算を実装する必要があります。各プロセスには独自のプライベート アドレス空間があるため、何らかの形式のプロセス間通信 (IPC) を使用する必要があることを理解しています。いろいろ調べてみましたが、スレッドを使用していない実装はあまり見つかりませんでした。共有メモリ、メッセージパッシング、またはパイプのいずれかを使用して、これを行うための最良の方法を誰かが知っているかどうか疑問に思っていましたか? 私は解決策を求めているわけではありませんが、誰かが知っていれば、これらの方法のどれが行列乗算でより効率的であるか. または、複数のプロセスでこれを行う一般的な標準的な方法がある場合は?
質問する
1979 次
2 に答える
1
共有メモリはこの問題の良い解決策になると思います。プロセスはソリューションを計算し、1つのメモリを共有してソリューションをまとめることができます。
#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, int size, int shmflg);
共有メモリ用のC関数の1つです(必要になるかもしれませんしshmat()
、多分そうです)。shmdt()
shmctl()
また、プロセスが相互に計算を操作しないように、同期に注意する必要があります。
そのためにセマフォを使用します。CのセマフォとSemaphoreWikipediaを参照してください。
于 2012-09-24T17:22:25.960 に答える
1
行列の乗算を同時に処理する最も効率的な方法は、共有メモリです。このように、パイプ/メッセージを介して行列をシリアル化する必要はなく、乗算を共有メモリ空間に直接適用できます。
于 2012-09-24T17:23:56.477 に答える