雨谷の日和

過去19年で2,600を超えるアニメの第1話だけは見続けた僕のお勧めアニメがハズレなはずがない

性能比較について注意すべきこと

屁理屈太郎氏から性能を比較するときに注意すべき点を教授頂いています。とても有難いことです。→「プログラム言語の速度比較について
頂いているご意見について、今のところの状況を書いておこうと思います。
※以下、枠内は屁理屈太郎氏の日記からの引用です。

(1) 画面ないし何らかの媒体に出力を行なふプログラムは、速度比較には適さない。出力は結構時間のかかる処理だが、その速度はしばしば OS の速度の影響を受ける。プログラム言語の特性を素直に示してゐるとは考へにくい。

どうやら、ご指摘の通りの結果になりそうです。
ファイル出力のサンプルを選んだのは、言語の入門書ではよく最初に「Hello wrold!」という文字を出力するサンプルを提示しているからという、素朴な理由からでした。意図したことではないですが、結果的にはプログラム言語の特性をあまり反映しないものだったようです。
まあでも、それはそれなりに個人的には面白いとも思っていますので、このまま最後まで(CとJavaとでほぼ同じ条件になるまで)比較を続けてみます。結果を見てから、改めて結論します。
あと2004.02.28付けの「Java と C」で提示して頂いている中で、行列式の計算のサンプルを今書きかけています。
なにぶん、趣味の範囲でちまちまと進めているので結果を出すのに日数が掛かっていますが、出力系の比較が終わったら、そちらもまとめるつもりでいます。

(2) 最適化の技術は時代とともに進歩してゐる。去年開発されたコンパイラと、今年開発されたコンパイラでは、当然性能に違ひがあるはずだ。コンパイラのバージョンを明示しない比較は無意味だ。

去年のコンパイラと今年のコンパイラでどれだけ性能に違いがあるのかについては気にしていませんでした。
もしかすると、結構効いてくるんでしょうか。これも比較してみた方がいいのかな。
ちなみに今使っている、コンパイラの細かいバージョンは以下です。

  • C:GCC 3.3.1→2003.08頃にリリース
  • Java:JDK1.4.0→2002.09頃にリリース

GCCで比較を行っているのは、この後UNIX系のOSでも比較をしようと思っているからです。VisualCとかだと、また結果が違うかもしれませんね。
なおUNIXについては、どうやらSolarisの環境を借りられそうです。

(3) 推奨されないモジュールは速度最適化処理の対象から外されてゐる可能性がある。推奨されないモジュールを速度比較に使ふのは無意味だ。

すみません。ここの部分は良く分かりません。
推奨されないモジュールというのは、何を指しているのでしょうか。JavaにはdeprecatedなAPIがあることは知っているのですが。それともCでのお話なのかな。
今回のサンプルに仰っているような例があるのであれば、具体的にご指摘頂ければ幸いです。


※上記については、屁理屈太郎氏より「勘違いだった」との回答を頂きました(2004.03.15付「すいません、勘違ひでした」)。ありがとうございます。

(4) 何を調べたいのか、明確な意図を持たない比較は、大抵の場合、失敗に終はる。たとへば、「実行時のエラーチェックの厳密さ」について調べたいなら、実行時エラーチェックが行はれる可能性のあるやうなコードを用意する必要がある(動的に変化する変数を使つて配列にアクセスするなど)。今回、比較に用ゐてゐるコードは、徳田雨窓さんが気にしてゐる五つの項目(→何故 Java は遅いのか)のうち、どれを意識したものなのか不明だ。

ご指摘の通り、今回の比較は明確な意図を持って行っているものではありません。とりあえず計ってみようというのが主旨です。理屈は後から考察するというスタンスを取っています。
もしも、明確な意図を持った測定をお望みの場合、私のものはお役に立てないと思います。
なお、失敗かどうかは、後で判断すれば良いと思っています。


ご意見はいつも楽しみに拝見させて頂いています。至らない点を補足頂き、嬉しく思っています。こういう比較的即時的なやりとりは日記ならではかも知れませんね。