シミュレーションとエミュレーションの違い

最近自分の中でこれらの理解が進んだ.
ようするにシミュレーションとはある実現したいシステムをある程度簡単にモデル化し,そのモデル上で試行・検証を行うことである.それに対してエミュレーションは対象システムを完全に模倣する(ようにがんばる)ことなのだろう.

例えば,とある芸術家が作った超美しくて高価なガラスのコインによる「コイン投げ」という行為が,どういうわけか非常に学術的な興味を引き,解析したくなってしまった場合を考える.

コインがガラスなので実際に投げるわけには行かない.ガラスだから割れてしまう,というかむしろそんな芸術的アーティファクトを投げるなんてとんでもない,芸術に対する冒涜だ! だからこのシステムをコンピュータでシミュレーションしようと考える.このとき,コインは裏と表の2状態を取り,それぞれが現れる確立は試行毎常に1/2であるとしてコンピュータで模倣するのは数学的にモデル化されているのでシミュレーションであり,コンピュータはシミュレータとなる.

それに対して,世界随一のパチモン職人としてその名を世にとどろかせ,今はFBIにつかまって刑務所にいるがその腕を見込んでCIAやNASすら協力を求めるという伝説のパチモン職人に,そのガラスのコインと全く同型同重量同バランス同硬度同摩擦など,とにかくそっくりなパチモンをガラス以外の素材で作ってもらい,実際に投げてみる.これはエミュレーションであり,そのパチコインはエミュレータとなる.

シミュレーションはモデル化を行うことから「モデルの範疇にある事象」しか起こらない.模倣するシステムに予測できる事象が多い場合(高度にモデル化できる場合)はシミュレーションを使うのが得策である.エミュレーションは逆に事象がほとんど予測できない場合に用いられる.完全に模倣させて,何が起こるのか試行の中で発見したい場合はエミュレーションが用いられるそうだ(Wikipediaより).

コンピュータの世界でエミュレータという言葉はよく聞くが,実際のところ物理現象をコンピュータ上で完璧にエミュレーションすることは不可能である.現実の世界は複雑すぎてエミュレータが作れないのである.したがって何か物理現象をコンピュータ上で行う場合,必ず「hogeシミュレーション」となる.天気予測もお天気予測モデルや台風モデルなるモデル上での予想となっているはずだ.だからよく外れる.

物理現象が複雑すぎてエミュレーションできない,というよりもそもそも,コンピュータで扱う時点でデジタル値によってモデル化されるはずなので,どうがんばっても物理現象のエミュレーションは無理なのだろう.

つまりエミュレーションをする場合,エミュレータとして使いたいシステムと,模倣対象システムの相性も重要な要素となる.したがって機械なら機械によるエミュレーション,物理現象なら実際の物によるエミュレーション,コンピュータならコンピュータによるエミュレーション,論理回路なら論理回路によるエミュレーションが一般的になってくると考えられる.

模倣システムを作る場合に,ソフトだけで実現すればシミュレーション,別ハードが絡むとエミュレーションという解釈もよく効くが,これは真理の一部であるが,真理ではない.別ハードが絡んでもシミュレーションのときもあるし,ソフトだけでも(そのソフトを実行するプロセッサによる)エミュレーションの場合がある.

世に言うNintendoエミュレータNESなどは全てソフトウェアからできているが,RP2A03の命令セットをPentium用に変換してからPentiumに全く同じことをやらせているわけなのでエミュレータでよろしい.ただしこの場合実際にはエミュレータPentiumであり,NESは単なる命令セット変換機と捕らえる方がきっと正しい.

そうではなくて,もしNESがシステムのモデルを持っており(たとえばレジスタ,ALU等のデータ構造をもっている)そのモデル(データ構造)を操作していくことでファミコンソフトを実行する場合はシミュレーションだ.

ここまで抑えれば,もうシミュレーションとエミュレーションで迷うことはないだろう.

全く,誰だか知らないがややこしい概念を持ち込んだものである.