トップ «前の日記(2005-01-15) 最新 次の日記(2005-01-17)» 編集

日々の破片

著作一覧

2005-01-16

_ play it again, sum

やり直し。もっとまじめに作ってみることにしてbenchmarkのrun.rbを使って461636バイトのyarvcore.bundeleで測ってみた。(まじめに作ってみるというのは、どうせならsumではなくcksumの1〜3まで実装しようかなと考えたということで、とりあえずは-o 1つまりsumしか実装してない)

class BsdSum
  BLOCK_SIZE = 1024
  def initialize()
    @cksum = 0
    @block_size = BLOCK_SIZE
  end
  def sum(s)
    s.each_byte do |b|
      if (@cksum & 1) != 0
        @cksum >>= 1 
        @cksum |= 0x8000
      else
        @cksum >>= 1
      end
      @cksum += b
      @cksum &= 0xffff
    end
  end
  attr_reader :cksum, :block_size
end
#実際はオプションを見てアルゴリズムを変更するわけである
algorithm = BsdSum.new()
blk = 0
 
File.open('yarvcore.bundle', 'rb') do |f|
  until (s = f.read(algorithm.block_size)).nil?
    blk += 1
    algorithm.sum(s)
  end
end
#printf("%d %d %s\n", algorithm.cksum, blk, 'yarvcore.bundle')
で、結果は
$ ruby -I. work/run.rb
ruby 1.9.0 powerpc-darwin7.7.0(2005-01-12)
YARVCore 0.1.0 rev: 120 (2005-01-09)
[direct threaded code] [optimize basic operation] [optimize regexp match] [stack caching] [inline method cache] 
 ...(snip)...
--
      user     system      total        real
ruby  2.660000   0.020000   2.680000 (  3.543170)
yarv  0.950000   0.010000   0.960000 (  1.443204)

実際rubyで実行する3秒以上というのはずいぶんもっさりした動きなのだが、これが1秒(リアルだと3.5に対して1.5)になるということは相当大きい。

ちなみに本当のsumだとこんな感じ。

$ time sum yarvcore.bundle 
48013 451 yarvcore.bundle
 
real	0m0.074s
user	0m0.000s
sys	0m0.010s

_ そりゃそうだ

あ、確かに試してみようとする人の役には立たなかったかも。

artonさんのエントリだと 「/usr/local/bin に ruby-1.9.0 いれちゃうのはイヤだなぁ」って人もいそうなので、極力通常の環境に影響しないやり方で。

あれだとautoconfからmake installまですっ飛ばしてるし、元々libは1.9で別になるから単純にbinの位置だけ変える(DESTDIRだけ設定する)というのを想定してたので参考にはなりませんね。

僕が、まあいいかで済ませられるのは必要になったら

$ sudo rm -rf /usr/local/lib/ruby
$ cd ruby-1.8.2
$ sudo make install

すりゃいいやってのがあるからだけど普通はそうではないでしょう(というか、事実そうではないからWin32マシンではcvsヘッドを試すとかやらないわけだし)。

うん、はやるといいな。

_ 今日のお言葉

重要なのは巨人の肩に乗り、他人の概念やアイデアの上に、改善を積み重ねていくことです。

——リヌス・トーバルズ

『改善を積み重ねていくこと』をやらずに、ただそのまま利用するあるいはそれを勧める連中(as is野郎と言えば良いかも)がいかに多いことか。

本日のツッコミ(全2件) [ツッコミを入れる]
_ たむら (2005-01-16 01:14)

せっかくなんで流行ればいいなぁ、位のノリです。<br>ちなみに、私も「まぁいいかかで済ませられる」んですけどね :-)

_ arton (2005-01-16 01:20)

早いなぁ、というかTB撃ち損なったのを拾ったのかな。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|

ジェズイットを見習え