パスワードを忘れた? アカウント作成
481250 journal

krの日記: Haskellで速いwcを書いてみよう(9)

日記 by kr

前回のエントリの続きです。

ここで、念のため、メモリリーク等が起こっていないか確認してみようと思います。 最初に書いたprog6のように、 イタレーションの途中でどこか気付かぬ内にメモリを消費していっているかもしれません。 小さなファイルを与えても気付かないリークが、大きなファイルを入力として与えた時に発覚してしまうかもしれません。

ということで、ここでは、4倍量の入力を与えて、使用メモリが変化するかどうか確認してみました。

安直に、これまでの評価に使っていたhandbook.txtを、4つ並べた入力を喰わせてみます。 使用メモリサイズは、安直にtime(1)で調べました。

% cat /usr/share/doc/en/books/handbook/book.txt | /usr/bin/time -l ./prog8
     72266 323341 3196121
        0.50 real         0.47 user         0.00 sys
      1872  maximum resident set size
       260  average shared memory size
        76  average unshared data size
       128  average unshared stack size
       228  page reclaims
         0  page faults
         0  swaps
         0  block input operations
         0  block output operations
         0  messages sent
         0  messages received
         9  signals received
         1  voluntary context switches
       166  involuntary context switches

% cat /usr/share/doc/en/books/handbook/book.txt /usr/share/doc/en/books/handbook/book.txt /usr/share/doc/en/books/handbook/book.txt /usr/share/doc/en/books/handbook/book.txt | /usr/bin/time -l ./prog8
289064 1293364 12784484
        2.01 real         1.89 user         0.01 sys
      1872  maximum resident set size
       261  average shared memory size
        76  average unshared data size
       128  average unshared stack size
       228  page reclaims
         0  page faults
         0  swaps
         0  block input operations
         0  block output operations
         0  messages sent
         0  messages received
        38  signals received
         1  voluntary context switches
       676  involuntary context switches

ということで結果を見ると、入力が4倍になっているのに比例して実行時間も4倍になっている一方、メモリ使用量はまったく変わっていません。 期待通り、入力データの長さnに対して、時間コストO(n)、空間コストO(1)になっているようです。

大雑把な確認ではありますが、特に問題はなさそうなので、再び更なる速度向上が見込めないか試みてみます。

もうちょっとだけ続きます。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー

読み込み中...