Help us understand the problem. What is going on with this article?

timeコマンドでプログラムの実行時間を知る

More than 5 years have passed since last update.

作ったスクリプトやプログラムの実行時間を知りたいときに使えるのがtimeコマンドです。timeコマンドの見方と、使い方についてメモを残しておきます。

実行例としてperlとc言語で1から1000000000の総和を計算してみました。

0. 環境

システム バージョン
Mac OS X 10.9.4
perl v5.16.2
clang clang-503.0.40

1. timeコマンドとは

timeコマンドはコマンド・プログラムを引数としてとり、引数として指定したコマンド・プログラムが実行されるのにどれだけ時間がかかった出力するコマンドです。

具体的にsleep 10で試してみましょう。

$ time sleep 10

real    0m10.002s
user    0m0.001s
sys     0m0.002s

timeが出力するreal, user, sysはそれぞれ次のような意味になります。

項目 意味
real プログラムの呼び出しから終了までにかかった実時間(秒)
user プログラム自体の処理時間(秒)(ユーザCPU時間)
sys プログラムを処理するために、OSが処理をした時間(秒)(システム時間)

なのでsleep 10 はプログラム呼び出しから終了までに10.002秒がかかったが、sleep 10 自体の処理には全然CPUが使われていないことがわかります。

(※ここで注意ですが、ネットワークI/Oの待ち時間やディスクI/Oの待ち時間はrealには反映されますが、sysには反映されません。)

2. 総和プログラムで実行時間の比較

ここでは実例としてperlC言語(clang)で、1から1000000000まで総和を求めて出力するプログラムの実行時間をそれぞれ求めます。

2.1 perl

試したコード

cnt.pl
#!/usr/bin/perl
use strict;
use warnings;

my $sum;

foreach my $num (1..1000000000)  
{
    $sum += $num;
}

print $sum;
実行結果
$ time ./cnt.pl 
500000000500000000
real    0m59.037s
user    0m58.997s
sys     0m0.029s

約1分ほどかかっています。

2.2 clang

試したコード

cnt.c
#include <stdio.h>

int main(void){
    long long int sum = 0;
    long int i;

    for(i=1;i<=1000000000;i++){
       sum +=i;
    }
    printf("%lld", sum);

    return 0;

}

$ clang cnt.c -o cnt.out
実行結果
$ time ./cnt.out 
500000000500000000
real    0m2.567s
user    0m2.559s
sys     0m0.006s

約2.6秒で計算が完了しています。

tossh
よくいるいるめがね族。
http://bochibochibocchi0095.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした