後藤弘茂のWeekly海外ニュース
Appleが新言語「Swift」とAPI「Metal」を発表して「iPhone 6」を発表しなかった背景
(2014/6/4 06:13)
技術カンファレンスWWDCで新プログラミング言語を発表
Appleは6月2日(米国時間)の開発者向けカンファレンス「WWDC」の基調講演で、新プログラミング言語「Swift」とローレベルグラフィックスAPI「Metal」などを発表した。また、IoT(The Internet of Things)時代のHubとしてiPhoneを機能させるベースになりうる「HealthKit」や「HomeKit」も発表した。その一方で、噂されていた広ディスプレイ&高解像度版「iPhone 6」やウェアラブルデバイス「iWatch」など新ハードウェアの発表は行なわなかった。
ハードウェア側でiPhone 6が発表されなかった理由は、おそらく次の半導体プロセス技術が間に合わないからだ。次世代の20nmプロセスでAppleが求めるボリュームのチップ製造は、現時点では難しい。28nmのままチップを強化しようとすると、再びAシリーズチップが肥大化してしまう可能性があるが、Appleはそれは避けたようだ。
新言語とAPIの導入にも、ハードウェア側の変化が若干影響しているかも知れない。Appleは昨年(2013年)のA7チップでCPUとGPUのネイティブ命令セットを切り替えた。それも、命令セットを拡張したというレベルではなく、全く新しい命令セットへと変えた。CPUはARMv8の64-bitベースに、GPUはPowerVR Series6(Rogue)の新SIMT型(=スカラ型の)の命令セットになった。そのため、GPUについては、命令セットが変わってしばらくして落ち着いたところで、新API導入というのは分かる話だ。
CPU言語の方は、昨年、OSを64-bit新命令&新モードに移行させた段階で、同時に新言語導入はリスキーでやりたくなかったのかも知れない。もっともSwiftはLLVMベースなので、コンパイラのバックエンド(CPUネイティブコードへのコンパイル)部分は従来と変わらない(フロントエンド側だけの対応)。とはいえ、大事を取るなら3四半期ずらすのも理解できる。そういう意味では、命令セットアーキテクチャの変革からしばらくの今の時期は、言語とAPIの導入にはいいタイミングだと言える。
20nmプロセスへはまだ移行できないApple
Appleは現時点では、まだ28nmプロセスから先に進むことができない。Appleの必要とするボリュームとコストでは、次の20nmプロセスで製造ができないからだ。Appleも、ファウンダリのプロセス技術の揺れには翻弄されているはずで、特に28nmから先は、20nmプレーナ(2次元トランジスタ)か14/16nm FinFET(3次元トランジスタ)かという選択も含めて非常に難しい。いずれにせよ、現状では、ボリュームを求めるユーザーは28nmから先に進みにくい状況にある。
噂されていたようなiPhone 6でのディスプレイサイズの拡張と、高解像度化を行なうためには、原則としてピクセルプロセッシング能力の拡張とメモリ帯域の拡張が必要になる。ただし、ここは微妙なところで、実は、今回はAppleはA7を強化しなくても高解像度対応はできる。それは、現在のiPhone 5sのA7が、バランス的にはiPad Airに対してやや過剰な性能だからだ。
Appleは、A5以降はiPhone系とiPad系のSoC(System on a Chip)を別設計にして、特にグラフィックス性能とメモリ帯域に差をつけた。これは、iPadの解像度を4倍に引き上げたからだ。iPad向けのX番台のAシリーズは、iPhone向けのAシリーズよりGPUの演算ユニット数が多く、メモリ帯域は倍となっていた。iPadの方が画面解像度が高く描画しなければならないピクセル数が4.3~5.1倍も多いためだ。
ところが、A7ではiPhone 5sとiPad AirでシリコンをA7に統一した。解像度がiPadよりずっと低いiPhone系が、iPadと同じチップを使うようになった。これは、チップの開発期間や開発コストの問題、また、急いでiPhoneとiPadのコードベースをARMv8系に揃えたかったといった事情が絡むと見られる。いずれにせよ、そのために、iPhone系はGPU性能とメモリ帯域が飛躍し、画面解像度に対して相対的に高くなった。下の図を見ると分かる通り、解像度に対するバランスではiPhone 5sのA7は、ピクセル当たりの演算&メモリ帯域が高くなっている。
ダイサイズの肥大化は難しい現在のAシリーズSoC
こうしたチップ技術上の背景があるため、Appleはやろうと思えば28nmのままでも高解像度版iPhoneを作ることができる。しかし、同社はこの方法は採らなかった。このことは、Appleが次のiPhoneは、1つ進んだプロセス技術で、SoCの機能を強化して投入しようとしていることを示唆している。現在のAppleのARMv8 64-bit CPUコアは、相対的にはARM自身のARMv8 64-bitコアのCortex-A57に対して見劣りする部分がある。そのため、プロセスを移行させるなら、CPUコア回りの強化が入ってくる可能性は高そうだ。
もし、Appleが次のSoCで機能を強化するつもりなら、プロセス技術の進歩を待つのは理に適っている。現状でA7のダイサイズは100平方mmを超えており、同じ28nmで機能を強化すると、再び120平方mmかそれ以上のダイサイズになってしまう。しかし、現在のAppleを取り巻く状況は、そうした贅沢をもう許さない。Appleはチップ製造コスト的にもiPhone/iPadを、より競争力のあるものにして行かなければならない。
ちなみに、AppleがiPadの方の画面解像度の引き上げを考えているなら、メモリ帯域の拡張も行なう必要がある。メモリ帯域を広げるには、DRAMをA7のLPDDR3から倍速のLPDDR4に切り替えるか、メモリインターフェイスを広げる必要がある。ようやく本格的な生産段階に入るLPDDR4への切り替えは、まだ時期的に早すぎるし、インターフェイスの拡張はコストがかかる。インターフェイスを広げるとDRAMチップ個数も増えてしまう上に、パッケージコストも増える。そのため、これは現状では困難がある。
命令アーキテクチャを変革したA7
iPhone/iPadの歴史の上で、昨年(2013年)のiPhone 5s/iPad Airは過去最大のハードウェア変革だった。CPUとGPUが両方とも命令セットが変わったからだ。ARM命令セットの場合、ARMv8の64-bit命令は、従来のARMの32系命令と大きく異なる。全く違う命令セットを64-bitに実装しており、命令セットから見ると根本的な変革となっている。
PowerVRの命令セットも同様で、内部的にはPowerVR Series6(Rogue)でこれまでのVec4ベースからSIMT(Single Instruction, Multiple Thread)ベースへと変わっており、ネイティブ命令セットと命令実行のスタイルが全く変わっている。つまり、CPUとGPUの両方のコアが、内部アーキテクチャだけでなく命令セットレベルから変わったのがA7の世代だ。そのため、ソフトウェア側に大きな変更を加えるとなれば、A7を出した後になるのは必然だったと言える。
新言語Swiftは、すでにAppleがプログラミングガイドを配布しているため、もはや語ることは多くはない。ポイントは、これまでAppleプラットフォームのプログラミング言語だった「Objective-C」を置き換えること。iPhoneで新たにAppleの世界に流入して来たプログラマにとって、Objective-Cを学ばなければならないことが大きな壁の1つとなっていた。それが、よりモダンでより扱いやすいSwiftに変わるインパクトは非常に大きい。コンパイラがデフォルトでLLVMという点も重要だ。ハードウェアの仮想化が進んだLLVMへと向かう流れがさらに加速される。
Mantleとよく似たMetalをAppleが導入
Appleの今回のWWDC基調講演の中で、もう1つ重要だったのはiOSの新グラフィックスAPIの「Metal」の発表だ。こちらは、ゲーム開発者にとってインパクトが非常に大きい。
Metalは、既存のグラフィックスAPIであるOpenGLよりも薄く、よりダイレクトなAPIセットだ。言ってみればMetalはApple版の「Mantle」または「DirectX 12」だ。MantleはAMDが自社GPUに導入した新しい独自APIで、DirectX 12はMicrosoftの汎用APIの次世代版だ。どちらも、“薄くオーバーヘッドの少ない”グラフィックスAPIという特徴がある。
なぜ、APIを薄くすることが重要かというと、汎用のグラフィックスAPIが極めてオーバーヘッドが大きく厚い構造になっているからだ。そのため、汎用グラフィックスAPIでは、GPUの真の性能を引き出すことができない。それに対してゲーム機では、専用グラフィックスAPIが非常に薄いため、GPUハードウェアの性能をよりダイレクトに引き出すことができる。同じ構成のGPUを使っても、グラフィックスAPIが薄くてオーバーヘッドが少ないゲーム機の方が、何倍も高いグラフィックス性能を達成できることは常識となっている。
何倍も差がつくほどAPIオーバーヘッドが大きいことは、汎用グラフィックスAPIの大きな問題だ。特に、CPUが発行するドローコールの量が増えることは、既存のAPIの弱点で、それが性能を落とす原因の1つとなっている。APIを薄くすれば、ドローコールを減らして性能をガンと引き上げることが可能になる。Mantleではドローコールを減らすことを指摘していたが、AppleもMetalでドローコールを10分の1に減らせると説明していた。
こうした特徴だけを見ると、Metalは、Apple版のMantleだ。ただし、iOS 8ベースでPowerVR 6アーキテクチャ向けのという但し書きが付くが。基本的な考え方は、MantleやDirectX 12とよく似ている。Appleは劇的にAPIオーバーヘッドを減らし、効率的なマルチスレッディングを実現し、グラフィックス性能を引き上げると謳う。同様の説明はMantleやDirectX 12でも行なわれている。
そのため、Metal APIに対応したゲームなら、同じiPhone上で数段優れたグラフィックスを実現できることになる。あるいは、同じグラフィックスを、より低い消費電力で描画することができる。オーバーヘッドが小さいことは、省電力面でも効果が大きい。Metalは、iOSデバイスのゲームプラットフォーム化をさらに推し進めることになる。
歴史的な背景があるグラフィックスAPIのオーバーヘッド
そもそも、なぜ、グラフィックスAPIはオーバーヘッドが大きくなったのか。これには歴史的な理由がある。1つは、かつては多くのGPUベンダーが存在し、それぞれ異なるハードウェアを隠蔽するために、抽象度が高いAPIが必要だったこと。これは、iOSのようにハードウェアを決め打ちできるプラットフォームでは不必要な抽象化となる。ゲーム機のグラフィックスAPIが薄いのも、ハードウェアが決まっているためだ。そして、現在はGPUの種類が少ないため、汎用グラフィックスAPIをより薄くしても互換性を取ることが容易になっている。
しかし、それ以上に大きいのは、GPUハードウェア自体の変化とAPIからの遊離だ。かつてのGPUはグラフィックス処理に特化した固定機能ユニットのパイプラインだった。APIが共通したグラフィックス機能を規定し、各GPUベンダーはAPIで決められた機能をそれぞれ固定機能ハードウェアとして実装した。この時代は、APIとハードウェアは密着して今よりダイレクトだった。
ところが、GPUは、プログラマブルシェーダプロセッサを中心とした構成に進化してしまった。そのため、APIが規定した機能の多くは、GPUのプロセッサ上でソフトウェアとして実現されるようになった。APIと固定機能が1対1で対応する関係ではなくなり、APIとGPUハードウェアの間が間接的になった。このように、APIが時代に合わなくなりつつあるという側面もある。
もう1つ面白いのは、AppleのMetalがグラフィックスとコンピュートの両方に対応を謳っている点。GPUをグラフィックス以外に汎用に使うGPUコンピューティングでは、グラフィックスとは異なるAPI/ランタイムを使う場合が多い。これは、グラフィックスAPIのオーバーヘッドが大きく、コンピュートに使いにくいためだ。しかし、十分にAPIが薄くなれば、コンピュートと融合させやすくなる。
Unreal EngineのEPICがAppleのMetalに対応
現在、GPUの世界では、グラフィックスAPIを薄く軽くすることが大きな潮流となっている。Mantleが引き金となり、雪崩を打ってオーバーヘッドの小さなAPIへと流れている。Appleも敏感にその流れに乗ってきた。Metalがどの程度扱い易いのかは、まだ分からないが、浸透すればiOS上のゲームのグラフィックス品質がさらに向上するだろう。
現在のゲームの多くはゲームエンジンベースであるため、グラフィックスAPIではゲームエンジンベンダーのサポートが重要となる。逆を言えば、エンジンさえMetalに対応していれば、ゲーム側はそれほどMetalに気を配る必要がなくなる。
AppleはMetalをサポートするゲームエンジンベンダーも発表している。Frostbite(フロストバイト)エンジンでMantleにいち早く対応したEAと同じくMantleサポートを発表したCryENGINEのCrytekがサポートする。このあたりは、MantleとMetalの親和性を示唆している。さらに、MetalにはUnreal EngineのEPIC GAMESとUnityも名を連ねている。
Appleのカンファレンスでは、EPICの顔であるTim Sweeney氏(CEO)が登壇して、Metal APIによるUnreal Engineのデモ「Zen Garden」を見せた。少し面白いのは、Sweeney氏はMantleに対して懐疑的な発言が昨年(2013年)報道されたこと。ゲームデベロッパの多くは、グラフィックスAPIを薄くする点には賛成しているが、APIがプラットフォームによって分断されることは嫌う。Appleの世界だけと見られるMetalにEPICが積極的になるのは、もはやグラフィックスAPIの革新が避けられない方向だと判断したのか、iOSが巨大なプラットフォームだからヤル気になっているのか、そのあたりは分からないが、Sweeney氏の登場はかなりのインパクトがあった。
ちなみに、Metalという名称を聞いて、GPUに詳しい人はAMD GPUのローレベル命令セット「Close to the Metal(CTM)」を連想したかもしれない。ただし、AppleのMetalは、おそらくCTMほど丸裸にするのではなく、MantleやDirectX 12のように、“薄皮”をかぶったAPIだと見られる。つまり、抽象化した方がいい部分は隠蔽されており、異なるGPUや異なる世代間での互換性が取れるようになっていると推測される。
また、MetalはA7専用だが、その理由も明瞭だ。Apple AシリーズのGPUコアのネイティブ命令セットとマイクロアーキテクチャは、A7とそれ以前で全く異なる。そのため、A7以降のサポートと限定されたと見られる。