ECOという技術を使っていた。技術と言っても自分で考えたもので、エセコンンパイラの略だ。これからも使える。
さっと、説明してみる。
が、何回かの記事にわけてということになる。
DDTの高速化の例で。
DDTという処理がある。 離散コサイン変換(Discrete Cosine Transform) 。ムービ(MPEGとか)のデコーダで必要なもの。
1.複雑
DDTの処理はある程度、複雑である。
2.高速化
DDTの高速化は仕事がら必要。
A.論理的高速化
ある程度複雑なので、論理的な高速化が出来る。
※どんなことを言っているかというと、あまりにも単純な例だが、
a*5 + b*5 を行うより (a+b)*5を行った方が掛け算一個分、得だ。
また、DDTの場合、論理的高速化の手法は世に何種類も提案されていてそれを知ることができる。
B.アセンブラ化による高速化
一方、各マシンに合わせて、アセンブラ化(同等なもので組み込み関数化)まで行う。イマドキはC言語(大代表)で結構な線までいけるが、やはり、アセンブラの特定の命令を有効に使う、レジスタの退避をできるだけ避けるなどなど考えた場合、必要。
3.Aのバリエーション
論理的な方法にもいくつか候補がある。
A0 バタフライ
A1 スケールド
A2 俺のオリジナル
(名前はいいかげん)
Bの高速化を行う前は、C言語(大代表)なのでA0,A1,A2を試すのは比較的簡単。
A0に対してBの高速化を施したあと、Bの高速化 を残したままA1に変えることは難易度がぐっと上がる。
4.Bのバリエーション
以上はあるプラットフォームに関しての言及だが、他のマシンで他のアセンブラでということになるとBにもバリエーションが増えて
B0 mmx VC++用
B1 mmx GCC用
B2 GAMECUBE用
(このラインナップは過去の経験にそったもの)
5.さらには
論理的高速化に 俺のオリジナル改 A3
あたらしい携帯マシン用のアセンブラ B3
と増えるかもしれない。
6.問題点
A0にB0を施したソースA0*B0はもはや、
A0*B3を作るのにはストレートには役にたたない。
そればかりか、A0*B0を見ても、
A0が何であったのかさえ、わからなくなる。<<<<<
今回の新しいマシン用に
A0*B3 A1*B3 A2*B3 A3*B3の4つについて試してみればいいじゃんとか言っても「作業量が多くて出来ねぇっす」みたいなことになる。
7.そこでECOの出番
A0 A1 A2 A3
B0 B1 B2 B3
それらのエキスをキープして使いまわしが利くようにと考えたのが、ECOである。
もともとはエセコンパラの略であったが、エキスを大事にしてる意味では、エコだwww
////////////////
続く