プログラムの実行時間を計測する方法について

このQ&Aのポイント
  • プログラムの実行時間計測方法を検討する
  • Tiny Basic for Windowsを使用して実行時間の差を調査する
  • BASIC言語で実行時間を表示させるプログラムの作成方法
回答を見る
  • ベストアンサー

プログラムの実行時間を計測する方法について

私は、Tiny Basic for Windowsを使って、 プログラムの計算方法の違いによる、 プログラムが答えを導き出すまでの実行時間の違いを調べたいと思っています。 内容としては、入力された数が素数かどうかを調べるものなのですが、 大体のプログラムは完成しています。 後は、時間を計測するだけなのですが、 BASIC言語でプログラムの実行時間を表示させるプログラムなどはできるのでしょうか。 それ以外の方法でもかまいません。 とにかく大体の実行時間を知りたいと思っています。 ストップウォッチで自分が計るしかないのでしょうか。 実行時間を知るための方法を教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • suz83238
  • ベストアンサー率30% (197/656)
回答No.1

プログラムの一番はじめに Print Time$ を入れて、一番最後に同じものを入れればいいんじゃないかと思う。

reomaru7
質問者

お礼

ありがとうございました。 おかげさまでプログラム実行時間を短縮できました。

関連するQ&A

  • プログラムの実行時間の計測について

    プログラムの実行時間を計測したいのですが、 どのようにすればよいですか? 使っている言語はC++です。

  • 実行時間の計測(C言語)

    実行時間について教えてください。 実行時間について不可思議な現象が起きたので疑問に思いました。 C言語においてfor文の2億回ループする場合の実行時間を計測し、計測する内容を変えます。 以下のプログラムのように、時間を計測します。 --------------------        ・        ・ gettimeofday(&t0, NULL);  (計測したい処理) gettimeofday(&t1, NULL);        ・        ・ --------------------- (計測したい処理)に以下のようなプログラムを入れ時間を計測しました。 以下、(計測したい処理)  → それにかかった実行時間 <実行結果 書式(計測したい処理) → 計測された時間 > (1)for ( i = 0; i < 2000000000; i++);         →  5.412432 sec (2)for ( i = 0; i < 2000000000; i++, a++);      →  5.401164 sec (3)for ( i = 0; i < 2000000000; i++, a++,a++);   →  9.340447 sec (4)for ( i = 0; i < 2000000000; i++, a++,a++,a++);   →  13.985456 sec この結果を受けての疑問(1) (2)~(4)までは、加算する回数(a++)が2倍、3倍と増えたため、線形的に実行時間が増えるという理屈で納得できるのですが、 (1)~(2)について、加算する回数(a++)が増えているのに、なぜ実行時間が(1)と(2)では変わらないのか。 アセンブラに直すと、確かに加算回数は増えているはずです。 <実行結果 書式(計測したい処理) → 計測された時間 > (5)for ( i = 0; i < 2000000000; i++);           →  5.412432 sec (6)for ( i = 0; i < 2000000000; i++, a++);        →  5.401164 sec (7)for ( i = 0; i < 2000000000; i++, a++,b++);     →  4.019215 sec (8)for ( i = 0; i < 2000000000; i++, a++,b++,c++);   →  4.008310 sec   実行結果を受けての疑問(2) なぜ、(6)~(7)では、加算される回数は増えているにも関わらず、 (5)より実行時間は短くなっているのか。 ((3)と(7)の時間差があることについは、対象となるレジスタが違うため、並行処理をしていると推察できることはわかります。今回は(5)~(8)にかけて、なぜ実行時間が短くなるのかという質問です。) <前提> ・前提として、プログラム内容に間違いはない。 ・バックグラウンドで動いているプログラムの影響は受けていないとします。 (何度も実行して確認しているので常にこのような結果が得られました。) 疑問1、2について、推測できる理由を教えてください。 <環境> ・Windows7 Corei5 上で VMwareによってUbuntuで実行しています。(VMwareのコア数の設定は1) ・メモリはWindowsOS、VMwareによる設定共に2GB <ソース> #include <stdio.h> #include <sys/time.h> // gettimeofday int main() { struct timeval t0, t1; long l; long i; long h; long j; long k; i = 0; h = 0; l = 0; j = 0; k = 0; gettimeofday(&t0, NULL); for ( i = 0; i < 2000000000; i++,l++,h++,j++); /*この部分の加算を変更して計測しています。*/ gettimeofday(&t1, NULL); printf("i = %ld, l = %ld, h=%ld \n",i,l,h); t1.tv_sec -= t0.tv_sec; if (t1.tv_usec < t0.tv_usec) { t1.tv_sec -= 1; t1.tv_usec += 1000000 - t0.tv_usec; } else { t1.tv_usec -= t0.tv_usec; } printf("%d.%06d sec\n", t1.tv_sec, t1.tv_usec); } わかる方、回答を何卒お願いします。 (解答に必要な条件が足りないのでしたら、教えてください。すぐに追記します。)

  • プログラムの実行時間計測方法について

    プログラムの実行時間の計測方法について、質問します。 以下に示すプログラムは、パケットが受信される度にmessage関数が呼び出され、message関数内で受信したパケットをfwrite関数を用いて処理をしています。 [質問内容] clock関数のclock_t型を用いて、プログラムの実行時間を計測したいと思っています。しかし、以下に示すプログラムの場合、パケットが受信されるたびにmessage関数が呼び出され、かつパケットが受信される度にstart = clock()で0秒からの開始になってしまいます。 なにか、対策方法はあるのでしょうか? よろしくお願いします。 [プログラム] void main(int argc, char** argv){ //パケットが受信される度にmessage関数が呼ばれる。 message(); } void message(){ double time; clock_t start,finish; if(equals(msg->selector,(byte*)"test",strlen("test"))){ start = clock(); fwrite(msg->payload,msg->payload_length,1,fp); finish = clock(); time = (double)(finish - start)/1000.0; printf("データ送信時間:%f[sec]\n",time); } else if(equals(msg->selector,(byte*)"finish",strlen("finish"))){ done = D_TRUE; } }

  • fortran77のプログラム時間を計測したい

    fortran77のプログラム時間を計測したい こんばんわ。fortran77で実行結果が出るまでの時間の測定をしたいのですが、どうすればいいのでしょうか? 調べてみるといろいろな方法があるようです。しかし、そのほとんどがlinuxでの環境においての説明です。 私はwindowsの環境でfcpadを使ってコンパイルしています。ですので、「a.out」のコマンドを打ってプログラムを実行したことがありません。windows環境でもfortran77で時間計測というのはできますでしょうか? また、今回linuxの存在の大きさを感じた次第です。linuxでコンパイルするというのはメリットがあるのでしょうか?

  • C言語で作ったプログラムの処理時間を計測するには

    C言語でいくつかのプログラムを作り、それぞれのプログラムの処理時間を計測し、比較したいと考えているのですがどのようにしたらいいのでしょうか?(0.1秒単位なので自分で計測するのはほぼ不可能です) 検索した結果 http://kzk9.net/column/time.html というサイトに辿り着きましたがよく理解できませんでした。 よろしくお願い致します。

  • プロセス実行速度の計測

    C言語でプロセスの実行速度の計測方法・ソース等、教えてください。

  • メモリアクセス時間の計測方法

    今あるソースを書いていますが、計算時間が多くを占めるのか、メモリアクセスが多くを占めるのかを調べたいです。その方法としてアセンブラで記述し、load/store命令、あるいはadd等計算命令をそれぞれ計って足し合わせる、という方法が考えられますが、大きなソースコードだと大変なので、定量的に算出したいと思っています。 例えば、以下のようなコードの //----- ~ //----- の部分に対しては、計算に対してメモリアクセスがほとんどを占めるため、計算時間はほぼ0であると考えることで、メモリアクセスの時間を概略計測することはできると思います。しかし、レジスタにデータを置いてひたすら計算してからメモリに戻す、という場合には同手法は使えないと思いますが、そのような場合にはどうやって計測すれば良いでしょうか? #include <stdio.h> #define NUM_ITER (1000) float a[NUM_ITER], b[NUM_ITER], c[NUM_ITER]; int i; //----------------------- for(i=0; i<NUM_ITER; i++){ c[i] = a[i] + b[i]; } //----------------------- int j; for(j=0; j<NUM_ITER; j++){ printf("%f\n", c[i]); }

  • このプログラムで計算を実行すると・・・

    10:S=0 20:FOR I=0 TO 6 STEP 2 30:FOR L=0 TO I 40:S=S+L 50:NEXT I 60:NEXT L 70:PRINT S 80:END 90: このプログラムを実行すると、「34」とプログラムの計算結果が表示されるのですが、実際に自分で計算すると「22」になってしまいます。 どこが違うのとか・・・基本的なとこが間違ってるのか? あとプログラムの動きを解説して頂けるとうれしいです! それでは、お願い致します。

  • フォルダを開ける時にプログラムを実行させる?

    いま、あるプログラムを作成しようとしています。 このプログラムを作るにあたって、 知りたいことがあるので、 ご存知のかたが居られましたら、 ご教授願いたく存じます。 さて、知りたいことというのは… 質問のタイトルの通り、フォルダを開こうとした時に プログラムを実行させる方法です。(Windows) 言語は問いません。フォルダを開くときに プログラムが実行できる言語であれば、それを勉強 するまでです。 もし、どんな言語を用いてもこれができないのであれば フォルダを開こうとするとき Windowsではどういうことが起きているのか を教えてください。 どんな意見でも構いませんので、ドシドシどうぞ!!

  • プログラムを実行して終了したら自動的に消す方法

    初めまして 最近マシニングセンターを任されてプログラム作ってるのですが 工具長補正をある座標系を基準にしていっぺんに取りたくて こういう感じの簡単なプログラムを作ったのですが O0001 #10001=#10001-11.11 #10002=#10002+22.22 #10003=#10003-33.33 ・       ・ ・ ・ #10099=#10099+987.654 M99 これでC入力したあとにこのプログラムを実行したら それぞれの補正値が計算されて入るようになってます ただこのプログラム、もう一度誤って実行すると 補正値がとんでもない数値になりクラッシュの原因にもなりかねません 今は実行後、直ぐに消しているのですが人間のすることなので ミスの可能性は残ります そこでこの計算プログラム実行後に実行したプログラムを 自動的に消去する方法がないか教えていただきたいのです どうぞ宜敷お願いいたします

専門家に質問してみよう