新たな課題
しばらくは暇を見つけてはBIOSもどきを書き上げていく。
実機がないから、なかなか大変だが、動作が想像できないところは先生に聞き、実際に確認しながら脳内デバッグを繰り返す。
僕はもうこれ以上は実際に走らせてみるしか無いというところまでデバッグした後、先生に下書きを見せた。
「アルカイト様、これはなんですか?」
A4の紙一〇枚ほどに書かれた精霊語のシーケンスを見て目を丸くする。
「この板の上に精霊語や自国語や数字などを左から右へ光魔法で表示していきます。右端までいったら一行下に表示し、一番下までいったら終わるだけのシーケンスです」
「……えっと、それに何か意味があるのですか?」
普通魔法というものは人の役に立つものだ。
水を出したり火をつけたり、明かりをつけたりといった単純なものから、人がいる時だけ明かりをつけるとか、特定の時間だけ明かりをつけるなど高度な判断を行う魔導具など、その用途は様々だが、文字を表示するだけという何をしたいのかわからない魔法など初めて見たのだろう。
「意味はありません」
「無いのですか?」
「はい。精霊語の練習のために作ったものですから」
今はまだコンピュータなどと言っても理解されないであろう。
それに意味ができるのは全体が出来上がってからなのだから。
「なるほど。確かに意味はないかもしれませんが題材は面白いですね」
先生はシーケンスを確認しながらそう言った。
「この文字が書かれた表からこの板へ光魔法で投映しているのですね。書かれた絵をそのまま別の場所に表示する魔導具はよくありますが、ばらばらにして文章を作って表示するものは初めてみました」
「はい、固定メッセージではなく、自由にメッセージを表示できたら面白いかなーと」
「なるほど。では実際に動くか試してみましょう。見たところ光魔法以外の危険な魔法は発現していないようですし、使用魔力も問題ありません」
先生は僕の書いた紙と魔導書、そしてインク壺を手にし、キーワードを唱える。
「この手にある紙より空きページへインク壺のインクを使って複写せよ」
僕の書いたシーケンスが先生の魔導書へコピーされていく。
「さて、複写できましたが、この板との魔導的つながりはどのように定義してありますか?」
「はい、ここに記載してあります」
僕はそれを記載している部分を指差す。
「なるほど、この四隅にあるマークを基準点として設定しているのですね」
「そうです。起動すると最初に周りをスキャンしてこの図形を探します。左上の図形が見つかったらそこを起点に表示を開始します」
「うん、大丈夫そうですね。では起動キーワードを唱えてみましょう」
先生は魔導書に手を添えながらキーワードを唱える。
「【画面表示】」
「えっ?」
遅い。
とてつもなく表示が遅かった。
左から右へ一行表示するのに、一秒以上かかった。
最後まで表示するのに三〇秒ほどだろうか。
八ビットマシンのBASICで同じようなことをやったときより遥かに遅い。
「ちゃんと文章になっているのですね。記号なんかも使われていて、メッセージを表示するだけですけどなかなか興味深いシーケンスですね」
先生は楽しそうであったが、僕は愕然としていた。
今回は本当に基本的な部分だけしかシーケンスを組んでいない。
つまり必要最低限のシーケンスであって複雑なことをしているわけではない。
なのにこの遅さとなると、もっと複雑なシーケンスを組んだらとても使い物にならない速度になってしまう。
これではとても実用的とは言えない。
一行を表示するのに一秒とか、重すぎると言われても仕方がない遅さだ。
「アルカイト様は優秀ですね。これだけ複雑なシーケンスを一発で成功させるとは。いいでしょう。合格です。魔導書を持つことを許可します。とはいっても発動する魔法の種類と魔力量は制限させていただきますが」
「いいんですか? 先生」
思い通りの結果ではなかったが、先生の言葉に僕は躍り上がった。
「使えるのは複写魔法と光魔法、結界魔法などいくつかに制限させてもらいます。一度に使用可能な魔力量も今回使った光の魔法程度までですが、魔導書を使うことを許可します。オリジナルのシーケンスもその範囲に制限しますが、その範囲内であれば自由にしてもらっても構いません」
「ありがとうございます、先生」
これまで自由に発動できなかったから研究に時間がかかったがこれからは自由に実験ができる。
これは嬉しい。
自由に実験ができればどこで処理時間を食っているか調べられる。
「いえいえ、アルカイト様の努力の賜物です。わずか二ヶ月ほどでこれほど複雑で安定したシーケンスが書けるのです。基礎は十分でしょう。これからは応用編です。自分で工夫したシーケンスを書くためには魔導書は必須ですからね」
「はい、早速父上に用意していただきます」
「私からも公爵様に報告しておきます。次の授業はアルカイト様の魔導書が用意されてからとしますので、それまで予習復習を欠かさないようにしてください」
「わかりました。先生、ありがとうございます」
先生たちは授業後報告書を書いて父上に提出している。
すぐに読んでくれるとは限らないから、夕食のときにでも今日のことを僕の方から話しておこう。
そうしたら報告書を確認してくれるはずだ。
しかし、一体どこが悪かったのだろうか?
なにか時間のかかる命令があるのだろうか。
CPUでも命令によってかかる時間が違ってくる。
昔のCPUは命令によってかかる時間がある程度決まっていた。
今のCPUだとパイプラインとかキャッシュとか、分岐予測とか様々な最適化技術が使われているから、一命令にかかる時間というのは固定ではないが、それでも時間がかかる処理とあまりかからない処理がある。
基本的には複雑な命令ほど時間がかかる。
足し算より掛け算のほうが時間がかかるし、レジスタ間の演算よりメモリの読み込みのほうが時間がかかる。
更に時間がかかるのはハードウェアの操作だ。
周辺装置はCPUより反応が遅いものが多い。
昔はCPUも遅かったので、メモリアクセスがノーウエイトを売りにしたパソコンも多かったが、今はCPUが早すぎて、キャッシュメモリでさえウエイトが入ってしまっている。
精霊語にもこのようなボトルネックとなる命令がある可能性は否定できない。
表示部分か、演算部分か、それとも宣言文か。
「いろいろやって計測するしか無いな」
最悪全部が遅かったら、なにか画期的な高速化をしない限り実用化は厳しいということになる。
「ここで諦めたくはないんだがなぁ」
全ては魔導書を手に入れてからだ。
簡単に諦めていたらジョブズになれるはずもない。
僕はいつもどおりにダンスのレッスンに向かった。
Z80アセンブラだとAレジスタを0クリアするのに「LD A,0」より「XOR A」の方がちょっと早いという理由でよく使っていました。
まあ大抵はこんな小手先のテクニックよりアルゴリズムの見直しのほうが早くなるんですが。
効果があるとしたらアルゴリズムの工夫しようのない単純なルーチンくらいでしょうか。
今じゃアセンブラそのものを使うことはほぼなくなりましたけどね。
MMX命令とかコンパイラでは展開されない特殊な命令を使って画像処理を高速化したときが最後でしょうか。