2016年12月18日日曜日

ゲーム機の互換とは?

先日、任天堂から「Nintendo Switch」が発表され、追加の情報を、発売を待ちわびる人が多く見られます。私もその一人です。
さて、そんな人々が疑問に思っていることの一つ。「SwitchにはWii Uとの互換があるのか?」というお話。
これはSwitchの正式発表直後、NVIDIAがSwitchのチップにTegraのカスタム品が採用されたことを伝えた瞬間に「互換は無い」と確定したのですが…

しかしながら、このニュースを聞いた人の中にも互換があるのか?ないのか?と疑問を抱いているの少なからず見かけます。
なぜこの発表だけで互換が無いことが分かるのか?そもそもゲーム機が互換を持てる条件について、その基礎の話であるコンピュータの動作の仕組みについての話を交えながら説明しようと思います。

「いや、そもそもSwitchにディスク入れられないじゃん。そういうことでしょ?」
…と、思ったあなた。着眼点は良いと思います。ですが、それ以前の問題なのです。
Switchにディスクドライブを取付けたとしても、Wii Uソフトのダウンロード版をインストールしたとしても、どうやってもWii UのソフトはSwitchで動かないんです。

さて、これについて説明するにはコンピュータおよびICチップなんかの知識が必要なんですが…
これをクソ真面目に説明すると非常に難解で時間がかかります。
なので、すごく分かりやすい例えを交えて説明していこうと思います。

互換性問題で最も影響が大きな部分はCPUです。
CPUはいろんな設計方法があります。その設計方法を「アーキテクチャ」と呼びます。意味は分からなくていいのでこの単語は覚えてください。
特に有名なアーキテクチャにはIntelの「x86」、IBMの「Power」、ARMホールディングスの「ARM」があります。x86は主にパソコン、Powerはスパコンなど、ARMはスマホやタブレットなどのモバイル端末に用いられる傾向にあります。ゲーム機としては、PS4とXboxONEがx86、GC、Wii、Wii UがPower、GBA以降の任天堂の携帯機とPSP、PS VITAがARMといった具合です。
ではSwitchはどうでしょう。Switchに搭載されるチップのベースである「Tegra」には、ARM系のCPUが搭載されています。
Wii UがPowerで、SwitchがARM。これこそがSwitchにWii U互換が無いと判断できる理由なのです。


つまり、アーキテクチャが違うということなのですが、アーキテクチャって何なのでしょうか。先述の通り、CPU、つまり計算機の設計方法みたいなものなのですが…
ごくごく簡単な話に例えて説明します。CPUにはたくさんの「箱」がつながれていると思ってください。これらには順番に番号が割り振られています。
例えば、あるアーキテクチャ、「アーキテクチャA」と名付けましょうか。このアーキテクチャでは、1番の箱と2番の箱に入れられた数字を足した数字を3番の箱に出力します。4番と5番の箱に入れられた数字をかけた数字を6番の箱に出力します…っと、そういうルールになっているとします。
一方、「アーキテクチャB」があったとしましょう。このアーキテクチャでは2番と3番に入れられた数字をかけた数字が1番に出力されるルールだったとします。4,5,6についてもアーキテクチャAと違い…
コンピュータの命令は、そういうふうにできているのです。アーキテクチャAであれば、「足し算をする」という命令は「1と2に代入、3から読み出す」のようになります。
この時、アーキテクチャAを利用しているつもりでアーキテクチャBを利用したらどうなるでしょう。何かおかしな動きばかりして、利用できないはずです。
これが「互換性が無い」ということです。もちろん、実際はもっと複雑で難解な話ですから、この例えは分かりやすくしまくった結果あまり正確ではないことにご留意ください。
コンピュータ的な説明を崩さずに分かりやすく説明するとこんな調子なのですが…正直まだよく分からないですよね?

ということで、生き物に例えてみようと思います。
犬と鳥がいると思ってください。どちらも人間の命令を聞くことができるとします。
「向こうにある物を取ってきてもらう」ということを命令した場合、この二匹はどのような動きをするでしょうか。
犬は、四本足で向こうに走って行きます。一方、鳥は羽を羽ばたかせて飛んで向こうに行きます。
次に、犬はその物を口でくわえます。鳥はくちばしでくわえます。
そしてまた、犬は走って、鳥は飛んで戻ってきます。
結果として同じことをしているのに、二匹は全然違うことをしていますよね?
これが人間だったら?二本足で走って、手で取る。ゾウだったら?四本足で走って、鼻で取る。
この違いがアーキテクチャの違いです。
「移動する」という命令に対して、四本足を使うアーキテクチャもあれば、二本足を使うアーキテクチャもあれば、羽を使うアーキテクチャもある。
「物を取る」という命令に対して、口を使うアーキテクチャもあれば、手を使うアーキテクチャもあれば、鼻を使うアーキテクチャもある。
そういうことです。例えば、「物を持ってくる」などのように、起こる結果は同じでも、足で走ったり、羽で飛んだり、内部ではアーキテクチャが違えば全然違う動きをしているのです。
ここで問題なのが、ゲーム機が読み込むプログラムというのは「移動をしろ」というかんじの命令ではなく、「足をこのように動かせ」、「口をこのように動かせ」といったような命令なのです。というか、もっと言うと「大腿の筋肉を30%収縮させ…」「顎の筋肉を50%伸展させ…」みたいなレベルです。
「生き物で言うと『脳が発している信号』にあたるものがゲームソフトのデータである」といったところでしょう。
犬の脳波を鳥に読み込ませたら?もちろん、動かないでしょう。もし動いたとしても、前足を動かす脳波で動くのは羽。まるで羽を使って歩こうとしているかのように動きます。これは正常に動いているとは到底言えません。「歩く」という結果は帰ってこないでしょう。
この、生き物で例えれば「脳波を記録したもの」にあたるものは、コンピュータでは「バイナリ」と呼びます。その脳波をちょっと見やすく整理したものにあたるのが「機械語」、それを少し理解しやすく記号化したものにあたるのが「アセンブリ言語」です。
動物用の日本語のアセンブリ言語が存在するとしたら、「筋肉15番 収縮 30% 筋肉18番 伸展 60% 筋肉61番 収縮 50%」といったかんじになるでしょうか?


その昔はゲームに限らずプログラムというのはアセンブリ言語で書かれていました。しかし、これだと、またまた生き物に例えまして、犬用に書いたプログラムを鳥や人間に移植するのが非常に大変です。
そこで「高級言語」、代表的な物には「C言語」が考えられました。現在では特殊なプログラムを除きおおよそのプログラムは高級言語で作られています。高級言語がどのようにできているかというと…
「何メートル移動する」とか「物を取る」なんていうプログラムを書けば良いようになりまして、「犬に走らせるには、足の筋肉をこのように、次にこのように動かして…」などということを考えなくて良くなりました。
しかしコンピュータは高級言語そのままでは動いてくれません。最終的にはバイナリに変換しなくてはなりません。この変換作業を「コンパイル」、コンパイルを行うプログラムを「コンパイラ」と呼びます。
コンパイラがあることによって、「移動する」というプログラムさえ書けば、犬用のコンパイラで四本足を動かすバイナリに、鳥用のコンパイラで羽を羽ばたかせるバイナリに変換できるようになったのです。
そう例えると、脳はコンパイラを搭載していると言えます。「走れ」と言われたら、足の筋肉が体が高速で移動するように動く脳波を生成してくれます。

アーキテクチャが違うコンピュータでプログラムが動かないのは、言うなればすでに鳥用に変換したプログラムを犬に読み込ませようとしてるからみたいなものです。

だったら、高級言語をそのまま読み込ませてゲーム機側で変換して実行すれば互換性問題無くなるのにね。なんて思う方もいらっしゃるでしょうが、おそらくそれをするには現在のコンピュータは速度が遅いのでしょう。バイナリを読ませないと満足な速度で動かないのでしょうね。あとは、実際のところ高級言語で書いたプログラムでも全く手を付けずに複数の違うコンピュータで互換が確保できるものではないことも多いのです。
ちなみにですが、html言語はまさにそのアイディアを実現させたものですが、やはりバイナリほどのパフォーマンスは今のところ実現できていないのが現状です。


さて、以上がゲーム機の互換性についてのお話で必要な知識、ざっくり分かりやすく説明しました版です。
なぜアーキテクチャが違うと互換が無いのかお分かりいただけたと思います。で、先に書きましたとおり、Wii UはPower系でSwitchはARM系。これで動くわけはないんです。
逆に、WiiがGCと、Wii UがWiiとの互換を保てたのはアーキテクチャが同じコンピュータだったからです。生き物で例えたら、「今の犬よりもっと強い犬」を作っていたから互換があるわけですね。GCからずっと今より強い犬、今より強い犬と進化させてたのが、言ってみればSwitchでは急に鳥になってしまったのです。

しかしながら、違うアーキテクチャのCPU向けのバイナリを動かす方法が無いわけではありません。
また動物に例えましょう。犬に鳥用の命令を無理矢理実行させます。羽を羽ばたかせる脳波を足を動かす脳波に無理矢理変換するようなかんじで、犬でも同じことができるようにするのです。このような役割をするプログラムを「エミュレーター」と言います。
「このコンピュータはこのようなバイナリを実行するとこのような反応を返す」といったように、違うアーキテクチャのコンピュータを仮想的に再現しているのです。
任天堂のバーチャルコンソールとか、PSシリーズのゲームアーカイブスというのはエミュレーターとゲームのソフトが同梱されたデータと言えます。
また、Xboxシリーズは毎度互換の無いハードを出しているのですが、エミュレーターによって互換を実現しています。しかし、これは容易なことではありません。おそらく世界最強のプログラマー集団であるマイクロソフトの手によっても少しずつ対応ソフトを増やしていくしかない現状がそれを物語っています。
容易でないのは人間だけでなく、コンピュータにとってもです。ハッキリ言って「全く違うものの真似をする」というかなり無茶なことをするプログラムですから、元のコンピュータより数段高性能なコンピュータでないとエミュレーターはまともな速度で動かないと言われています。
Switchのスペックがまだ謎ですが、これまで発表されてる情報から予測して、それと人間側の労力について考えてみると、エミュレータでWii Uとの互換を実現する方法はあまりにも非現実的です。
したがって、SwitchはWii Uとの互換が無いと考えるのが妥当なのです。


ところで、少々話は変わりますが。
GCからWii Uまでの任天堂の据え置きハードは、IBMが製造したCPUとAMD(旧ATI)が製造したGPUの組み合わせでした。他にもコストがかかる部分はありますけれど、CPUとGPUはゲーム機の製造コストに大きく影響してくる部分だと思われます。
AMDは昔はGPUは作っておらず、CPUメーカーだったのですが、確かWiiの頃だったでしょうか。「Radeon(ラデオン、レイディオン)」というブランド名のGPUで有名だったATI社を買収し、CPUもGPUも作れるメーカーとなりました。
コストが特にかかる部品をどちらも同じ会社が提供しているというのはおそらくコストダウンに相当有利なようで、PS4もXbox ONEも前世代機からアーキテクチャを切り替え、AMDのCPU、GPUを搭載するようになりました。
Wii U本体の「社長が訊く」を覚えているでしょうか。CPUとGPUを同じパッケージの中に搭載する「MCM」の話をしていました。
ATIを買収し、GPUを製造するようになった以降のAMDは、このMCMの製造において非常に強みがあったのです。Wii UのMCMはCPUとGPUが違う工場で生産され、同じパッケージ内に入れられるというものだったわけですが、AMDならそれを全部自社の工場で行えるわけです。これがコストダウンに大きく影響しそうなのは容易に想像できると思います。まあ、私はその実態を詳しくは知らないので、完全に憶測ですが…

実は、Switchに搭載される「Tegra」もそうなのです。TegraはARM系のCPUと、NVIDIAの「Geforce(ジーフォース)」系のGPUを搭載しています。
ARM系のCPUは、ARMが設計してはいるものの、実際に製造しているのはライセンスを受けた別の会社です。
つまり、TegraもCPUとGPUの製造、パッケージング全ての工程を一社のみで行えるMCMなのです。
ということは、Tegraを搭載したSwitchはWii Uよりコストダウンが狙いやすい構成をしていると言えると思います。

さらに。Wii UはIBMのCPU、AMDのGPUといった、「Wii U以外に無い構成」、つまり任天堂しか採用してない構成ですから、開発ツールとかの開発にあたって外部の力を借りにくかったのではないかと思います。
しかし、Switchの場合NVIDIAが発表したニュースで開発ツール等の開発においても任天堂と協業した旨が発表されています。
つまり、既存品のカスタムチップを採用したことにより外部との協力がしやすくなったのです。
これによって、開発の手間および人件費も削減できたのではないかと思われます。

そして互換を切ったのであれば、互換性テストの手間と人件費も無くなることになるわけです。


こうして見てみると、SwitchはWii Uから見るとコストカットを強く意識していることが伺えます。
コストが低くなればお求めやすいお値段になり、価格を据え置くのであればより高性能なマシンにできるわけです。

互換が無さそうなのは残念ではありますが、このような工夫が潜んでいるのんだろうと想像してみると、ワクワクしますね。

0 件のコメント:

コメントを投稿