Archive for category Uncategorized

システム開発における測定バイアス

Posted by on Sunday, 13 September, 2009

会社で勧められて “Producing wrong data without doing anything obviously wrong!” というタイトルの論文を読んでみたら面白かったので紹介したいと思います。ASPLOSという学会で半年ぐらい前(2009年3月)に発表された論文です。

コンピュータシステムにおける測定バイアスとは

論文の主旨は簡単にいうと「測定バイアスによって様々な処理や最適化の影響は(予想以上に大きな)影響を受ける」というものです。測定バイアスというのは「調査すべき変数に対して、対象者を不正確に測定(または分類)することによる系統的な誤差」です(例えばこちらなど)。医学方面でよく見られる考え方ですが、別に医学分野に限っただけの話ではありません。

たとえばある種の処理系に対して、ある種の最適化をほどこすという提案をしたいとしましょう。通常、元の処理系と最適化をほどこしたあとの処理系を両方用意して、何らかの決められた処理を実行させてみてパフォーマンスを比べるということが行われます。とはいっても比較はそう簡単ではなく、場合によっては測定に偏りが生まれることがあるのです。

もちろん、大抵のまともな論文は何回も同じテストを繰り返して平均や中央値をとったり、といったようにしてバイアスを避けようとしています。ところが、そんなレベルではないところから測定バイアスが生まれることがあるというのがこの論文の主張です。

論文で例として挙げられているのが環境変数とリンクの順序です。

環境変数なんてなんの影響もない、という気がするのですが、環境変数は実際には実行時にメモリの特定の領域にロードされます。とすると、環境変数のサイズが変化することでスタックのレイアウトが変わりますから、パフォーマンスが変わることがあるはずです。著者の非常に単純なプログラムで測定したところ、30%ぐらいの変化があるというのです。同じように、リンクする順序が変われば関数のメモリ上の配置も変化するため、パフォーマンスが変わります。こうした変化は実は意外と大きく、結果として誤った結論を導く危険があるようです。

しかも、こうした変化は予測不能だというより大きな問題があります。環境変数の長さがどのように影響するかというのは一見してわかるものではなく、リンク順序もどういう順序がいいのかはハードウェアにも依存するので簡単に決められるものではありません。つまり、「こうすれば測定バイアスを避けられる」という万能の環境はないということです。

ほかにも著者は様々な条件を検討しています。たとえばこういう問題がgccに特有なのかを検討するためにiccでも同様の比較を行い、大差ない結果を得ているので、コンパイラによってあったりなかったりするタイプのバイアスではないようだ、とか。詳しくは論文を読んでみてください。

実際にやってみた

非常に印象深い話だったので少し試してみました。

次のようなコードを用意します。これは論文に掲載されているサンプルコードとほぼ同一です。パフォーマンス計測のために、ごく単純にclock()を使うことにしました(実際にはさらに少し手を加えています。clock()はわりと失敗することがあり、失敗すると-1が返されるのでそのための対処コードを差し込むというものです)。

static int i = 0, j = 0, k = 0;

int main(void) {
  clock_t s = clock();
  int g = 0, inc = 1;
  for (; g < 65536; g++) {
    i += inc;
    j += inc;
    k += inc;
  }
  printf("%d\n", clock() - s);
  return 0;
}

非常に単純な繰り返しのプログラムです。論文の著者はこれですら環境変数によって結果が変化することを指摘しています。

これをつぎのようなスクリプトで実行させてみました。

ENV.clear
clocks = {}
15.times do |unused|
  (1..400).map{|i| i * 10}.shuffle.each do |env_size|
    ENV['x'] = 'x' * env_size
    while true do
      clock = `a.out`.to_i
      if clock > 0
        clocks[env_size] = [] unless clocks.has_key?(env_size)
        clocks[env_size].push(clock)
        break
      end
    end
  end
end
clocks.to_a.sort.each do |env_size, cs|
  puts [env_size, cs.inject(&:+)].join(" ")
end

手元のMacBookでgcc -O0 でコンパイルしましたが、確かに差が見られました。

env-bench

横軸は環境変数のサイズ、縦軸は実行時間です。画像が小さいのでわかりにくいですが、300のあたりと400のあたりというふうに2つのグループができたのがわかると思います。非常にいい加減な環境で計測したので(BGMで音楽を流しながらとかそういうレベル)この結果は正直なところぜんぜん信頼していないのですが、何度か試行したところ、結果はそこそこ安定的でした(細かい数値は変わるが、どのサイズのところで400あたりのグループになるかは変わらない)。

また、予測が正しいならスタックのアドレスが変われば結果は変わるはずです。そこでmainのかわりにfuncという名前の関数にしてmainはfuncを呼ぶだけの単純なwrapperにしたところ、ちゃんとどのサイズで実行時間が伸びるかというのが変化しました。ほかにもいろいろやったんですが飽きたのでこの辺で。どうせ厳密な環境でもないし……。

まとめ

なかなか面白い論文なのですが、こういう話を聞きかじって「環境変数って大事なんだなあ」などと理解するのはまるっきり間違っているので注意してください。環境変数はただの例であって、実際ほかにも影響を及ぼすであろうものというのはいくらでもあるだろうと著者は主張しています。たとえば、室温とか。

測定バイアスというのは、実験群と対照群を同じ実験条件で実験していないときに起こる問題ですが、コンピュータシステムにおいて本当に「同じ実験条件」というのをどう揃えたらいいかなんてわからん、というのが問題の根幹ではないかと思います。

けっきょく、いろんなベンチマークをたくさん試すとか、実験環境をランダムに構築するとかして測定バイアスの影響を弱めることしかできない、と著者の人達は書いています。でもリンクの順序が違うとかは実験するのがいかにも大変そうですなあ。


Quick Search Boxを紹介します

Posted by on Sunday, 23 August, 2009

higepon

quick silver が動かなくなってからはや半年。

12:44 PM Aug 21st webで

twitterでhigeponさんが呟いてましたので QSB を自分は使ってるという返事したのですが、若干の反響があったようです。どうも案外と知られていないようなので今日は QSB (Quick Search Box) を紹介したいと思います。

Quick Search Box って何それおいしいの

Quicksilver の作者が Google で開発をしているソフトウェアです。 code.google.com 上で公開・開発されているオープンソースソフトウェアでもあります。一種のランチャーとして便利なソフトウェアです。おいしいです。

何ができるの

QuickSilver と同じく起動しても基本的には何も表示されず、バックグラウンドでユーザの入力を待ちます。コマンドキーを2回叩くと(変更可能)簡易検索ボックスが出てきます。ここにたとえばアプリケーション名を入れることでアプリケーションを起動できます。標準で様々なモジュールが実装されており、ファイルの検索や入力文字列でGoogle検索することもできます。 OSX に標準でついてくる辞書アプリを使って定義を調べてくれたり、 Googleアカウントを設定で保存しておくと、Google Docsを検索して直接開くといったこともできます。

要するに QuickSilver と同じように、高機能かつプラガブルなランチャーです。

それってQuickSilverと何が違うの

もし利用する機能がアプリの起動だけなら、機能に大きな差はないといってもいいかもしれません。しかし、少なくとも標準では QuickSilver よりも遥かにいろんなことが検索でき、直接起動したり開いたりできるため便利です。

また、 QuickSilver とは UI が若干異なります。 QuickSilver ではキー入力に対してデフォルトの候補とデフォルトのアクションが提示され、エンターキーを入力して実行する、というスタイルでした。 Quick Search Box では候補とアクションは最初からペアになっていて、アクションを変えることはできません。一方、 Search というだけあって候補は複数がリストアップされ、デフォルト以外を選択するのが簡単です。

アプリの起動にだけ着目すると、アプリ名からアプリが実際に提示されるまでの時間は QuickSilver の方が若干速いです。0.5秒かそこらだと思いますが、なんとなくわかる程度の差はあります。

Spotlightと何が違うの

OSデフォルトの検索であるSpotlightは便利で、これをランチャーにしているという人も私の知り合いには結構います。 Quick Search Box の Spotlight に対する利点は2つあります。第一に、アプリの起動に限った場合、 Spotlight よりも Quick Search Box の方が圧倒的に速いです。というのは Spotlight はシステム内のファイルの全文検索しかしないのに対し、 Quick Search Box ではアプリだけを検索するというモジュールがあるからです。また、 Quick Search Box では各モジュールが検索結果を見つけた端からリストに追加していくという仕様なので、遅いモジュールがあっても検索結果のリスト自体は素早くリストされます。

第二に、上でも述べたように Spotlight よりもずっと色んなものが検索出来ます。とくにオンライン上のデータの検索とローカルの検索を一度に検索できるのが強みです。

ちなみに Quick Search Box には Spotlight モジュールもあります。

まとめ

Quick Search Box は軽量かつ多機能なランチャーです。さいきん QuickSilver もぜんぜん更新されてないなあと思ったり、 Spotlight だけでは心許ないなあ、という人は試してみてはいかがでしょうか。

Quick Search Box


アラン・ベネット『やんごとなき読者』

Posted by on Thursday, 20 August, 2009

ある日突然、エリザベス二世が読書に目覚めてしまい、いつでも何かの本を読んでいる状態に。公務は滞るわのべつまくなしに本の話題にもっていくわで周囲は大混乱……という顛末を描いた愛すべき佳品。

女王の読書する姿が楽しく、愛らしいのが特徴で、現実のエリザベス女王がどうなのかはともかく、その姿が大変いい。かつまた周囲の空気も読まずに発言するあたりも素敵で、フランス大統領との会見で作家のジャン・ジュネについて「同性愛者でしかも囚人でしたけど、でも本当にいわれているほど悪い人でしたの?」と話しかけてしまい大統領が困惑、という冒頭のシーンからしてつかみは完璧。

女王の読書のガイドとなる少年はゲイ作家を偏愛していてそういう作品ばかり勧めてきたりといった権威をからかう風潮が作品全体に漂っていて面白いが、まあそう堅苦しく考えずに読めばいいと思います。

ただ、「知的でないことの重要性」と題した解説などで展開されるこの作品の読み方には正直、ちょっと疑問が残る。読書をすること、引用をすることが知的かというとよく分からないし、正直なところ女王にとって周囲にとって読書という行為ははっきりと害悪である。なんせつまらない公務は(読書時間を削るので)女王は退屈するようになってしまうし、女王との会見でもこれまでの当たり障りのない会話ではなく、その時女王が読んでた本にまつわる当たり障りのある話になってしまう。この場合、読書はぜんぜんいい習慣として描かれない。

そしてなにより、そんな読書をする女王のことを周囲のほとんど誰も理解できない。役に立つ本、書類は読むけれど、文学や何やかやはものの役に立たないし、だから誰も読んでいない。ここがこの話の本質という気がする。女王は楽しみのために読書をする。知的であるとかないとか、役に立つとか立たないとか、そういうものを読んで周囲がどう反応するかとかは一切省みずに読みたいものを読み続けること。それによって楽しみを得ること。読書ってのはそういうことなんじゃないかなあ。

この本は、人生を変えるだの視野を広げるだの他人の身になって考えるだのといった「読書の力」ではなく(証拠に本書のエリザベス二世を見よ。ぜんぜん他人の身になって考えちゃいないのだ、このバアさんは)、そういうくだらないことからかけ離れた、単なる「読書の楽しみ」を高らかに歌い上げている。と、俺は思う。


染屋カイコ『かみあり』

Posted by on Sunday, 16 August, 2009

いやーこれおもすれーわ。

最近よくある(?)、ご町内になんかふつうに神様がいて、願い事を叶えたり叶えなかったりしているという設定。舞台は島根で、ここは10月だと神無月ならぬ神在月なので、街角に神様があふれているのでした……という設定。

ところがこれが一風かわったまんがに仕上がっている。たいていこういうまんがって、神様と人間が関わったり、神様とか人間とかが成長を遂げたり、そういったことを描くことでなんとなく「いい話」に仕上がってることが多い。このまんがはぜんぜん違って、なぜか大阪ノリのギャグまんがになっている。第1話ではゲーム出身の神様をかばんで張り倒すし、なんかその関西ノリが妙にツボでした。

設定的に考えて長続きはしないと思うので、今のうちにお一ついかが。


大和田秀樹『ムダヅモ無き改革』[2]

Posted by on Sunday, 9 August, 2009