質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
MPI

MPIは、並列プログラミングを利用するための標準化規格、及び実装自体のことを指します。バイト列で構成されたメッセージとして、いくつかのCPUが情報を送受信することにより協調動作を可能にします。

並列処理

複数の計算が同時に実行される手法

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

0回答

1049閲覧

複数ノードでのプログラム実行(並列化)

Spi_muto

総合スコア75

MPI

MPIは、並列プログラミングを利用するための標準化規格、及び実装自体のことを指します。バイト列で構成されたメッセージとして、いくつかのCPUが情報を送受信することにより協調動作を可能にします。

並列処理

複数の計算が同時に実行される手法

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2021/10/25 06:09

編集2021/10/25 06:10

前提・実現したいこと

raspberry piからデータをopenMPIでmacに送りたい。

発生している問題・エラーメッセージ

単一ノードでは並列化ができているが、複数ノードで実行しようとすると実行結果が出力されない。

該当のソースコード

データを送る側

c++

1#include <stdio.h> 2#include "opencv2/opencv.hpp" 3#include "opencv2/highgui.hpp" 4#include "mpi.h" 5 6using namespace cv; 7using namespace std; 8 9int main(int argc, char** argv) 10{ 11 int rank, procs, j = 0; 12 size_t total; 13 size_t elemsize; 14 int sizes[3]; 15 MPI_Status status; 16 MPI_Request request; 17 18 Mat frame; 19 VideoCapture cap(0); 20 21 MPI_Init(&argc, &argv); 22 MPI_Comm_rank(MPI_COMM_WORLD, &rank); 23 MPI_Comm_size(MPI_COMM_WORLD, &procs); 24 25 if (!cap.isOpened()){ 26 cerr << "ERROR! Unable to open camera\n"; 27 return -1; 28 } 29 30 while(cap.read(frame)) 31 { 32 if (frame.empty()) { 33 cerr << "ERROR! Blank frame grabbed \n"; 34 break; 35 } 36 37 if (j == 0) { 38 sizes[2] = frame.elemSize(); 39 Size s = frame.size(); 40 sizes[0] = s.height; 41 sizes[1] = s.width; 42 MPI_Send(sizes, 3, MPI_INT, 1, 0, MPI_COMM_WORLD); 43 } 44 45 MPI_Send(frame.data, sizes[0] * sizes[1] * 3, MPI_CHAR, 1, 1, MPI_COMM_WORLD); 46 j++; 47 48 //MPI_Send(&frame, 1, mat_8uc3, 1, 99, MPI_COMM_WORLD); 49 50 const int key = waitKey(1); 51 52 //qボタンが押されたとき 53 if(key == 'q') { 54 break; 55 } 56 } 57 return 0; 58} 59

データを受け取る側

#include <stdio.h> #include "opencv2/opencv.hpp" #include "opencv2/highgui.hpp" #include "mpi.h" using namespace cv; using namespace std; int main(int argc, char** argv) { int rank, procs, j = 0; size_t total; size_t elemsize; int sizes[3]; MPI_Status status; MPI_Request request; Mat frame; VideoCapture cap(0); MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &procs); while(1) { //MPI_Recv(&frame, 1, mat_8uc3, 0, 99, MPI_COMM_WORLD, &status); if (j == 0) { MPI_Recv(sizes,3, MPI_INT, 0, 0, MPI_COMM_WORLD, &status); frame.create(sizes[0], sizes[1], CV_8UC3); } MPI_Recv(frame.data, sizes[0] * sizes[1] * 3, MPI_CHAR, 0, 1, MPI_COMM_WORLD, &status); j++; imshow("camera", frame); const int key = waitKey(1); //qボタンが押されたとき if(key == 'q') { break; } } return 0; }

試したこと

mpirun --hostfile node.txt -np 1 Ras_Send : -np 1 Ras_Recv

で実行したところ、

Warning: Permanently added '192.168.35.35' (ECDSA) to the list of known hosts.

とだけ表示されて標準出力が実行されない。

補足情報(FW/ツールのバージョンなど)

macOS Catalina
raspberry pi 4
openMPI ver.4.0.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問