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

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

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

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

Linux

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

Q&A

3回答

809閲覧

素数をカウントするプログラムのエラーについて。

oidatoho

総合スコア12

MPI

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

Linux

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

0グッド

1クリップ

投稿2019/07/19 07:03

編集2022/01/12 10:55

前提・実現したいこと

入力した素数の個数をカウントするプログラムを作成しています。

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

error: conflicting types for 'search' void search(int a, int b, int array[N/2]) note: previous declaration of 'search' was here int search(int, int, int[]);

環境はLinuxです。 
mpicc tsuyoi.c(プログラム名) -o tsuyoi -lm
でコンパイルしようとしたところ、このエラーがでした。

該当のソースコード

C

1#include <mpi.h> 2#include <math.h> 3#include <stdio.h> 4#include <string.h> 5#define N 50000 6 7int main(int argv, char* argc[]) 8{ 9         int n, base_n, source; 10         int low1, low2, high1, high2; 11         int i, a; 12         int size, rank, length; 13         int low_array[n]; 14         int high_array[n]; 15         int num; 16 17         int search(int, int, int[]); 18 19         double starttime, endtime; 20 21         MPI_Status status; 22 23         n = N; 24 25         MPI_Init(&argv, &argc); 26 27         starttime = MPI_Wtime(); 28 29         MPI_Comm_size(MPI_COMM_WORLD, &size); 30         MPI_Comm_rank(MPI_COMM_WORLD, &rank); 31 32         for(i = 0; i < n; i++) 33         { 34             low_array[i] = 0; 35             high_array[i] = 0; 36         } 37 38         a = 0; 39         num = 0; 40 41         if(rank != 0) 42         { 43            base_n = n / ((size - 1)* 2); 44            low1 = base_n*(rank - 1)+ 1; 45            low2 = base_n * rank; 46            high1 = n - base_n * rank + 1; 47            high2 = n - base_n * (rank -1); 48 49            search(low1, low2, low_array); 50 51            search(high1, high2, high_array); 52 53            MPI_Send(&low_array, n, MPI_INT, 0, 0, MPI_COMM_WORLD); 54            MPI_Send(&high_array, n, MPI_INT, 0, 0, MPI_COMM_WORLD); 55 56          } 57          else 58          { 59               for(source = 1; source < size; source++) 60               { 61                   MPI_Recv(&low_array, n, MPI_INT, source, MPI_ANY_TAG, MPI_COMM_WORLD, &status); 62 63                    while(low_array[i] != 0) 64                    { 65                          num = num + 1; 66                          i++; 67                    } 68 69                    i = 0; 70 71                   MPI_Recv(&high_array, n, MPI_INT, source, MPI_ANY_TAG, MPI_COMM_WORLD, &status); 72 73                    while(high_array[i] != 0) 74                    { 75                          num++; 76                          i++; 77                    } 78 79                    i = 0; 80               } 81 82           endtime = MPI_Wtime(); 83 84           printf("%dまでの素数の数は%dです。\n", n, num-1); 85           printf("%lf\n", (endtime - starttime)); 86 87          } 88 89          MPI_Finalize(); 90 91} 92 93void search(int a, int b, int array[N/2]) 94{ 95 int i, j, frag, now; 96 frag = 0; 97 now = 0; 98 99 for(i = a; i <= b; i++) 100 { 101 for(j = 2; j <= i/2; j++) 102 { 103 if(i % j == 0) 104 105 frag = 1; 106 } 107 108 if(frag == 0) 109 { 110 array[now] = i; 111 now++; 112 } 113 114 frag = 0; 115 } 116 117}

試したこと

エラー名をそのまま検索したりしました.

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

こちらのpdfに乗っているプログラムを使用しました。
http://www.oyama-ct.ac.jp/tosyo/kiyou/kiyou40/014nansaikiyomi.pdf

よろしくお願いします。

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

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

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

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

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

guest

回答3

0

あまりに、低レベルでこれをリンク内容読んで

コードをください・デバッグしてください等の丸投げの質問
にあたるので、もう回答しません。

投稿2019/07/19 08:34

nanami12

総合スコア1015

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

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

oidatoho

2019/07/19 09:10

すいません。コメントありがとうございます。 エラーメッセージを調べても解決策がなかったので、質問してしまいました。 以後気をつけます。ありがとうございます。
guest

0

ソース読めないのですか?

PDFにかいてるじゃないですか

#define N 50000

これをソースの先頭に定義すればいいだけです。

コンパイルエラーも取れないレベルですか?

投稿2019/07/19 08:24

nanami12

総合スコア1015

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

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

0

関数 search の本体が無い為ロードモジュールが出来ていません。

参照されているPDFの中にsearch関数本体が記載されてるので

それをコードに埋め込んで下さい

素数判定というところです

投稿2019/07/19 07:21

編集2019/07/19 07:26
nanami12

総合スコア1015

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

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

oidatoho

2019/07/19 08:07

回答ありがとうございます。 コードを埋め込み、エラーが出たので色々試してみたのですが、 解決できないエラーが出てきてしまいました。 質問も編集したので、もしわかりましたら解決していただけたら嬉しいです。 よろしくお願いします。
nanami12

2019/07/19 08:20

どこの部分でエラーが出てますか?ラインを教えて下さい
oidatoho

2019/07/19 08:25

返信ありがとうございます。 111行目のvoid search(int a, int b, int array[N/2]) のところで出ています。追加した素数判定のところです。 'N' undeclared here (not in a function) と conflicting types for 'search' と出ていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問