「ベンチマーク(bench mark)」という言葉をご存知ですか? 本来の意味は測量における「基準点」という意味ですが,コンピュータの世界では異なるマシンの処理速度を比較するという意味があります。このベンチマークを計ることを「ベンチマーク・テスト」とも呼びます。ベンチマーク・テストは普通,ある同じプログラムを異なるマシンで実行して,それぞれの処理時間を計測します。

 今回は,パソコンが登場したばかりの頃によく使われていた「エラトステネスのふるい」というプログラムで,3台のWindowsマシンのベンチマーク・テストをやってみましょう。古いWindows 98マシンに比べて,最新のWindows Vistaマシンはどのくらい速いのでしょうか。結果が楽しみですね!

 最初に実験に必要なものをあげておきましょう。以下の二つです。

  • メモ帳(notepad.exe)
  • 複数台のWindowsマシン
 一つ目のメモ帳は,コードを書くのに利用します。Windowsは標準で備えています。二つ目の複数台のWindowsマシンは,ベンチマーク・テストの対象として用います。

エラトステネスのふるい

 最初に,ベンチマーク・テスト用のプログラムに利用するアルゴリズムの「エラトステネスのふるい」を紹介しましょう。エラトステネスのふるいは,素数(1とその数でしか割れない数)を列挙するためのアルゴリズムです。なにやら難しそうな名前がついていますが,やっていることは単なる力任せです(図1)。

図1●エラストテネスのふるい
図1●エラストテネスのふるい

 まるで,工事現場や庭仕事で使う「ふるい」のように,素数でない数をふるい落として行くアルゴリズムなので「エラトステネスのふるい」と呼ばれています。×が格納された数は,ふるい落とされたことを意味します。○が格納されたままの数は,ふるい落とされずに残っています。残った数が素数です。

 なお図1では,もっともシンプルな手順を示しています。より高速化する工夫もありますが,今回は目的がベンチマーク・テストなので,このまま利用しましょう。ここでの目的は,実用的に素数を求めることではなく,適度に時間がかかる処理を備えたプログラムを用意することです。

プログラムを作る

 VBScript(Visual Basic Scripting Edition)というプログラミング言語を使って,「エラトステネスのふるい」のプログラムを作りましょう。Windowsには,VBScriptで記述されたプログラムを解釈・実行するWSH(Windows Script Host)という機能が標準で装備されています。メモ帳(notepad.exe)を起動したら,リスト1に示したプログラムを打ち込んで(このページからコピー&ペーストするのでもOKです),デスクトップにBenchMark.vbsというファイル名で保存してください。

' 準備段階です
Dim a(1000000)
n = CLng(InputBox("いくつまでの素数を求めますか?"))
a(1) = "×"
For i = 2 To n
    a(i) = "○"
Next
max = CLng(Sqr(n))

' ここから処理時間を測定します
t1 = Timer()
For idx = 2 To max
    If a(Idx) = "○" Then
        i = Idx + Idx
        While i <= n
            a(i) = "×"
            i = i + Idx
        Wend
    End If
Next
t2 = Timer()

' 処理時間を表示し,素数を列挙します
title = "処理時間は," & CStr(t2 - t1) & "秒です!" 
ans = ""
For i = 1 To n
    If a(i) = "○" Then
        ans = ans & "[" & CStr(i) & "]"
    End If
Next
MsgBox ans, , title
リスト1●エラトステネスのふるいのプログラム

 シングル・クォーテーションで始まる行はコメント行です。プログラムの処理時間は,VBScriptのTimer関数を使って測定します。Timer関数は,午前0時からの経過時間を秒単位で返します。リスト1のはじめのほうにある
 t1 = Timer()
で,変数t1に開始時間を格納します。処理の終わりにある
 t2 = Timer()
で,変数t2に終了時間を格納します。処理時間は,t2 - t1で求められます。

 ファイル名の拡張子は,BenchMark.vbsのように必ず.vbsとしてください。拡張子.vbsが,VBScriptで作成されたプログラムであることを示します。メモ帳は,デフォルトで拡張子を.txtとするので注意してください。メモ帳でファイルを保存するとき,「ファイルの種類」に「すべてのファイル」を指定すれば,.txtという拡張子は付きません(図2)。

図2●「すべてのファイル」を指定してファイルを保存する
図2●「すべてのファイル」を指定してファイルを保存する
[画像のクリックで拡大表示]