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

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

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

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Raspberry Pi

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

Q&A

0回答

852閲覧

MPIによる素数の並列計算について。

oidatoho

総合スコア12

MPI

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Raspberry Pi

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

0グッド

1クリップ

投稿2019/07/19 06:40

編集2019/07/19 06:49

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
現在、 MPIによる並列処理で素数を求めるプログラムを作成しています。
入力した数までの素数を全て表示させて、その素数の数を表示したいです。
それを並列処理を行い、数を分配させて計算させようとしています。

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

mpiexec -n 4(プロセス数) monk(プログラム名)
と実行したところ、素数以外の数が出てしまいます。
また、プロセス数を2にすると、素数のみが出ますが、
素数を数えるところの表示を見ると、うまく分配できていないみたいです。

素数の数も数えたいのですが、分配すると答えがそれぞれの計算した数を表示する形になってしまい、
うまく表示できません。
よろしくお願いします。

該当のソースコード

C言語です。 環境はLinuxです。

ソースコード

#include <mpi.h> #include <math.h> #include<stdio.h> int main(int argc, char*argv[]) { int n, rank, length, numprocs, i, j, k; int kosu = 0; char hostname[MPI_MAX_PROCESSOR_NAME]; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Get_processor_name(hostname, &length); if (rank == 0) { printf("\n"); printf("###############"); printf("\n\n"); printf("3以上の整数を入力してください。\n"); printf("\n") printf("%d", &n); printf("\n"); } MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); for(i = rank + 2; i <= n; i += numprocs) //ここでラズベリーパイに数字を分割しています。 { j = 0; for(k = rank + 2; k <= n; k += numprocs) { if(i % k == 0 && i != k) { j++; break; } } if(j == 0) { kosu++; printf("\n"); printf("%d \n", i); } } MPI_Finalize();   printf("2から%dの間にある素数の数は%d個である。\n", n, kosu);       return 0; }

試したこと

答えをMPI_GatherやMPI_Reduceなどでまとめようとしたのですが、
うまくいきませんでした。変に大きな数字がでるだけになってしまいました。

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

ラズベリーパイを並列接続して並列処理を行おうとしています。
よろしくお願いします。
できれば、計算にかかった時間も表示させられるとありがたいです。
よろしくお願いします。

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

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

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

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

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

y_waiwai

2019/07/19 06:44

このままではコードが見づらいので、質問を編集し、<code>ボタンを押し、出てきた’’’の枠の中にコードを貼り付けてください
oidatoho

2019/07/19 06:47

すいません。ありがとうございます。修正させていただきます。
coco_bauer

2019/07/25 00:45

「ラズベリーパイを並列接続して」というのは、どのようなシステム構成になっているという事なのでしょうか? Linuxタグがついていますが、ラズベリーパイで動作しているOSは何なのですか? 「mpiexec -n 4(プロセス数) monk(プログラム名)と実行」と書かれていますが、質問のコードが monk という名前のプログラムなのですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問