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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

並列処理

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

Q&A

4回答

516閲覧

計算を行うプログラムの時間を測りたいです。

carnage0216

総合スコア194

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

並列処理

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

0グッド

0クリップ

投稿2018/05/13 08:34

編集2018/05/13 09:07

以下の二つのプログラムを合体させて計算の時間を測りたいです。
<環境>

  • Windows10 64bit
  • Ⅽ言語
  • gcc(Mingw)

こちらが時間を測るプログラムです。

#include <stdio.h> #include <time.h> int main(void) { clock_t start, end; //int i; start = clock(); printf( "開始時間:%d\n", start ); /* 何かの処理 */ //for( i=0; i<500000000; i++ ); end = clock(); printf( "終了時間:%d\n", end ); printf( "処理時間:%d[ms]\n", end - start ); return 0; }

こちらが計算するプログラムです。

#include<stdio.h> #define N 100000 int main (int argc, char *argv[]) { int i; int *rootBuf; rootBuf = (int *)malloc(N * sizeof(int)); /* Initialize */ for(i=0;i<N;i++){ rootBuf[i] = i; } /* Incriment */ for (i = 0; i < N; i++) { rootBuf[i] = rootBuf[i] + 1; } free(rootBuf); return; }

エラーがでて失敗しているのですが私なりにコードを書いてみました。
何がどのように違うためエラーが起きたのかご指摘していただけないでしょうか。

#include <stdio.h> #include <time.h> #define N 100000 int main(void) { clock_t start, end;  int i; int *rootBuf; int A (int argc, char *argv[]); start = clock(); printf( "開始時間:%d\n", start ); rootBuf = (int *)malloc(N * sizeof(int)); /* Initialize */ for(i=0;i<N;i++){ rootBuf[i] = i; } /* Incriment */ for (i = 0; i < N; i++) { rootBuf[i] = rootBuf[i] + 1; } free(rootBuf); } end = clock(); printf( "終了時間:%d\n", end ); printf( "処理時間:%d[ms]\n", end - start ); return 0; }

以下が自分の書いたプログラムのエラーです。

C:\Users\Daito\Desktop\時間を測る計算.c: In function 'main': C:\Users\Daito\Desktop\時間を測る計算.c:9:1: error: stray '\201' in program  int i; ^ C:\Users\Daito\Desktop\時間を測る計算.c:9:2: error: stray '@' in program  int i; ^ C:\Users\Daito\Desktop\時間を測る計算.c:24:21: warning: implicit declaration of function 'malloc' [-Wimplicit-function-declaration] rootBuf = (int *)malloc(N * sizeof(int)); ^~~~~~ C:\Users\Daito\Desktop\時間を測る計算.c:24:21: warning: incompatible implicit declaration of built-in function 'malloc' C:\Users\Daito\Desktop\時間を測る計算.c:24:21: note: include '<stdlib.h>' or provide a declaration of 'malloc' C:\Users\Daito\Desktop\時間を測る計算.c:36:4: warning: implicit declaration of function 'free' [-Wimplicit-function-declaration] free(rootBuf); ^~~~ C:\Users\Daito\Desktop\時間を測る計算.c:36:4: warning: incompatible implicit declaration of built-in function 'free' C:\Users\Daito\Desktop\時間を測る計算.c:36:4: note: include '<stdlib.h>' or provide a declaration of 'free' C:\Users\Daito\Desktop\時間を測る計算.c:38:1: error: stray '\201' in program } ^ C:\Users\Daito\Desktop\時間を測る計算.c:38:2: error: unknown type name 'p' } ^ C:\Users\Daito\Desktop\時間を測る計算.c:41:3: error: conflicting types for 'end' end = clock(); ^~~ C:\Users\Daito\Desktop\時間を測る計算.c:8:18: note: previous declaration of 'end' was here clock_t start, end; ^~~

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

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

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

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

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

guest

回答4

0

質問に答える以前の問題ですが、

こちらが計算を並列処理するプログラムです。

これが全く並列処理になっていないように見えるのですが、それは問題ないのでしょうか。

投稿2018/05/13 08:41

maisumakun

総合スコア145184

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

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

carnage0216

2018/05/13 09:06

どうもありがとうございます。質問を編集します。
guest

0

C:\Users\Daito\Desktop\時間を測る計算.c:9:1: error: stray '\201' in program

 int i;

エラーメッセージどうり
int i の宣言前に変なものがまじってませんかね。

投稿2018/05/13 10:12

YomogiKOBO

総合スコア187

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

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

0

  • 9行目に全角空白あり。
  • malloc/free 使うなら #include <stdlib.h>
  • int A (int argc, char *argv[]); 不要
  • free() 直後の } 不要

投稿2018/05/13 09:49

編集2018/05/13 11:54
episteme

総合スコア16614

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

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

carnage0216

2018/05/13 12:17 編集

どうもありがとうございます。おかげさまで実行ファイルが得られました。 ただ実行すると開始時間:0 終了時間:0 処理時間:0[ms]とすべて0なので計算部分が影響してしていないのかもしれません。コードを少しずつ編集しながら変化を見てみます。 printf( "計算結果:%d\n", rootBuf );を足して実行したところ以下の結果が得られました。 開始時間:0 終了時間:4 処理時間:4[ms] 計算結果:46334024 や 開始時間:1 終了時間:1 処理時間:0[ms] 計算結果:45940808 と出てきました。こんなに早く計算できるものなのでしょうか? 次に#define N 100000000とした際の計算に要した時間が 開始時間:0 終了時間:625 処理時間:625[ms] 計算結果:46665760 と出たためどうやら本当に計算に要した時間が短かったようですね。CPUでもここまで速く計算できることに感動です。(なんか違和感がありますが…。)
guest

0

同一の開発環境を用意できなかったので推測で書いています。

C

1 free(rootBuf); 2 3} /* これが余分? */

freeの後の}が余分かと思います。一度削除して、再度コンパイルしてみてはどうでしょうか?

また、maisumakunさんがご指摘のように、並列処理のコードが書かれていません。
簡単に並列化(マルチスレッド化)するならOpenMP等が使用できますので、ご参考までに。

投稿2018/05/13 08:53

rtr1950x

総合スコア298

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

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

carnage0216

2018/05/13 09:05

情報提供どうもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問