[Waba WORLD] [Wabasoft] 開発:[FAQ|仕様|How-to]
パフォーマンスの取り扱い

あなたは小さなWabaプログラムを急ごしらえしているでしょう。 プログラムがパソコン上のJava仮想マシンでうまく動くと、 それをPalmPilotやWindows CEデバイス上で実行するために、 exegenとwarpプログラムを使ってパッケージをつくります。

それをPalmPilotで実行すると、パソコンで実行するのと比べて かなり遅く動くことに気づくでしょう。 Windows CEデバイスでは少し遅いぐらいで、パフォーマンスの差は気づかない程度です。

これはどうしてでしょうか?

主な理由

PalmPilot版が遅い主な理由は、PalmPilotがパソコンと同じ速さで動かないからです。

PalmPilotには(プロセッサが変更されない限り)モトローラ68328"Dragonball" CPUが 使われています。このCPUの技術的解説は ここ にあります。68328は1995年の夏に出荷されました。68328は16Mhz(ぐらい)の クロックをもち、およそ2.7MIPS(秒間270万個の命令を処理)で動きます。

一方、Windows CEデバイスには多種多様なMIPSプロセッサが使われいます。 それらの一覧はここ にあります。 ここにはR4300iマイクロプロセッサの仕様があります。 Windows CEデバイスは他のタイプのプロセッサも使われるかもしれませんが、 現在WabaはMIPSベースのデバイスしかサポートしていません。

興味があれば、Pentium IIプロセッサの資料が ここにあります。

しかし、これらの資料はあなたがパソコン上で書いたプログラムを PalmPilotやWindows CEデバイスで速く動かす方法については 教えてくれないでしょう。

PalmPilotとパソコンのパフォーマンスの比較

Wabaを使う前に、まずC言語を使って以下のプログラムを書いて、それを パソコンで実行してみましょう。実行にどれくらいかかると思いますか?

  {
  int i, j, value;

  value = 0;
  for (j = 0; j < 100000; j++)
    {
    i = j / 1000;
    value += j / 7;
    if (value == 0)
      value += i / 3;
    value = value % 100;
    }
  printf("%d\n", value);
  }

このプログラムを(Visual C++ 5.0を使って)デバッグonでコンパイルし、 Pentium 233MHzで実行すると、数ミリ秒で終了します。 したがって、Pentiumパソコンではこのプログラムは「速く」動くと言えます。

次に、同じプログラムを"int"から"long"へ変えて、 PalmOS用Metrowerksコンパイラでコンパイル(最適化on)し PalmPilotで実行します。

  long i, j, value;

なぜ"int"から"long"へ変えるのでしょうか? int型の変数がパソコンでは 32ビット、PalmPilotではデフォルトで16ビットなので、変数の型をintからlongへ 変える必要があります。もし変数をlong型へ変更しないと、 繰り返しが終了しません。

実行にどれくらいかかると思いますか? PalmPilot Proでは、およそ10秒 かかります。

以上の観察からPalmPilotとパソコンのパフォーマンスに違いはありますが、 Pentiumの実行速度が速いため、どれくらいの差があるのか分かりません。

違いはどれくらいですか?

主に32ビットの算術命令を使っているC言語のプログラムはPalmPilot Proで動かすと、 Pentium 233MHzの300倍遅くなります。

Pentiumパソコンで1秒で動くC言語のプログラムはPalmPilotでは5分かかります。

もちろん、これは大雑把な値です。実際の値はあなたのパソコンやプログラム、 その他様々な要因に依存します。しかし、この値は速度差のイメージを与えるでしょう。

この値はWabaプログラムにどんな意味があるでしょうか? WabaプログラムをPalmPilotで動かすとかなり遅くなります。 おそらくC言語のプログラムの300倍遅くなるでしょう。

Windows CEについてはどうですか?

主に32ビットの算術命令を使っているプログラムをMIPS R4000ベースの Windows CEデバイスで動かすと、Pentium 233MHzの10倍くらい遅くなります。 我々は試験にCasio Cassiopeia E-10 Windows CE Palm-sized PCを使いました。

もちろん、実際の速度差はWindows CEデバイスやあなたのパソコン、プログラム、 その他の要因に依存しますが、この値は速度差のイメージを与えるでしょう。

WabaとCはどちらが速いですか?

小型デバイスの動作速度はPentiumパソコンに比べて遅くなることが分かりました。

C言語でプログラムを書くかWabaでプログラムを書くかどちらかを選ぶとします。 C言語に比べて、どれくらいのパフォーマンスがWabaに期待できるでしょうか?

Waba仮想マシン1.0はJIT(Just In Time compiler)を使っていません。 Waba仮想マシンは実行に必要なバイトコードを解釈実行します。

解釈実行のために、Waba仮想マシンは各バイトコード命令に対して 以下の操作が必要です:

  1. 命令のロード
  2. 命令のデコード(何をするか理解する)
  3. 命令を実行
  4. step 1.に戻る
C処理系がコンパイル生成した各1命令に対して、Waba仮想マシンはそれぞれ1つ以上の命令の実行が必要となります。

大雑把に言って、Waba仮想マシン1.0で動作するWabaプログラムは C言語のプログラムに比べて3倍から8倍遅くなることが推測されます。 我々のテストでは、5倍くらい遅く動作しました。

バイトコードを解釈実行するどんな仮想マシンも JITを使わなければ同じようなパフォーマンスになるでしょう。

まとめ

パソコン上でJDKを使って開発されたプログラムは、 PalmPilot上ではかなり遅くなると考えられます。

Pentiumベースのコンピュータと(非JITの)JDKを使った場合、 PalmPilotとWaba仮想マシンの組合せはPentiumとJava仮想マシンの組合せに比べて およそ300倍遅くなると予想されます。

またMIPSベースのWindows CE Palm-sized PCでは、同じプログラムが Pentium 233MHzのデスクトップパソコンに比べておよそ10倍遅くなると 予想されます。

パソコン上のJDKがJITなら、その差はさらに大きくなるでしょう。

私達はWaba仮想マシンをさらに速くするためパフォーマンスの解析を続けていきます。 しかし、どんな言語を使って書かれたプログラムであっても、 68328ベースのPalmPilot上の動作速度はPentiumベースのパソコンに比べて かなり遅くなるでしょう。

これは何を意味するのでしょうか? それは小型デバイス向けのプログラムを書くとき、 できる限り小さく簡潔になるように設計すべきであることを意味します。 過度の繰り返しを避け、小さく簡潔に、重いタスクの処理を避けること を試みてください。

PalmPilotとWindows CEデバイス向けのプログラムはユーザの深い洞察によって 「高いパフォーマンス」を得ます。 デバイスの限界を知った上でWabaのプログラムを設計することによって、 「高いパフォーマンス」が実現できるのです。


原文:Copyright (c) 1999 Wabasoft. Waba, WabaVM and WabaSDK are trademarks of Wabasoft Inc.