getrusageを用いた実行時間計測の方法
Posted: 2008年7月29日(火) 15:17
こんにちは。さっそくですが質問です。タイトルの通りなのですが…
C言語で特定の処理の実行時間を計るプログラムを使いたいです。
基本的な部分は把握したつもりですが、どうも組み込もうと思うと
コンパイルがエラーを吐いてしまいます。
学校の課題で、クイックソートとバブルソートの実行時間比較をする。
というのがあって、ソート部分のプログラムと計算結果を表示するプログラム
をメインのプログラム(=整数乱数配列を生成するプログラム)に外部呼出し
しています。
つまり
メインの乱数生成プログラム、ソートプログラム、表示プログラム
の3つのソースがある状態で、ソートの並び替え部分の実行時間を測定したい
んです。測定結果をソートプログラムのほうで表示するようにすると
printf関数が定義されていないとのエラーがでます。#include<stdio.h>を
ソートプログラムに追加するとよくわからないエラーが出てしまい、どうした
らいいのか分からない状態です。
環境
OS:Win vista 32bit
コンパイラ:gcc (cygwinを利用)
↓問題のある quickSort.c
他に必要なソースとかあったら教えてください。追記します
C言語で特定の処理の実行時間を計るプログラムを使いたいです。
基本的な部分は把握したつもりですが、どうも組み込もうと思うと
コンパイルがエラーを吐いてしまいます。
学校の課題で、クイックソートとバブルソートの実行時間比較をする。
というのがあって、ソート部分のプログラムと計算結果を表示するプログラム
をメインのプログラム(=整数乱数配列を生成するプログラム)に外部呼出し
しています。
つまり
メインの乱数生成プログラム、ソートプログラム、表示プログラム
の3つのソースがある状態で、ソートの並び替え部分の実行時間を測定したい
んです。測定結果をソートプログラムのほうで表示するようにすると
printf関数が定義されていないとのエラーがでます。#include<stdio.h>を
ソートプログラムに追加するとよくわからないエラーが出てしまい、どうした
らいいのか分からない状態です。
環境
OS:Win vista 32bit
コンパイラ:gcc (cygwinを利用)
↓問題のある quickSort.c
#include<time.h>
#include<sys/time.h>
#include<sys/resource.h>
#include<stdio.h>
double getrusage_sec(){
struct rusage t;
struct timeval tv;
getrusage(RUSAGE_SELF, &t);
tv=t.ru_utime;
return tv.tv_sec+(double)tv.tv_usec*1e-6;
}
void quickSort(int data[/url], int start, int end)
{
double t1,t2;
int i,j, p, t;
p = data[(start+end)/2];
i = start;
j = end;
t1=getrusage_sec();
while (1) {
while (data<p) {
i++;
}
while (p<data[j]) {
j--;
}
if (i>=j) {
break;
}
t = data;
data = data[j];
data[j] = t;
i++;
j--;
}
if (start < i-1) {
quickSort(data,start,i-1);
}
if (j+1 < end) {
quickSort(data,j+1,end);
}
t2=getusage_sec();
fprintf(stdout,"use_time=%10.70f\n",t2-t1);
return ;
}他に必要なソースとかあったら教えてください。追記します