HPCシステムズではエンジニアを募集しています。詳しくはこちらをご覧ください。
HPCシステムズのエンジニア達による技術ブログ

Tech Blog

ARM WSが求められる訳

ARMで動きそうなもの、開発してねという依頼が来ました。
最初、Raspberry Piでも使うのかと吃驚しましたが、そうではなく、ARM64のWSでという事でした。色々、ARMに関しては動きがありますが、

・アップルが次世代CPUにARMを採用するのではないかという推測が出ているらしい事。
・マイクロソフトがARMで動くwindowsを開発した事。
・ARMをソフトバンクが購入した事。

一般的なトピックとしてはこれらが有名かなと思います。
ARMは、組み込みの分野で大きなシェアを持っていますが、一般的な知名度では、スマホのCPUとして知られているかなと思います。

スマホ、携帯電話ではあるのですが、実際には、電話としても使用可能な小型PCと考えた方がいいでしょう。そしてスマホの普及により、情報端末として、現在では普通のPCよりスマホを活用する割合が高くなってきています。そのスマホのメインCPUとして使用されているという事は、PCのメインCPUとして十分な性能を持つという事、さらに、スマホメーカーの他社との競争力として、性能アップが求められる中で、圧倒的なシェアがある事から、ARMのCPUの性能アップが絶え間なく行なわれている事が分ります。
その要求は、もはや組み込みではなく、PCとしての性能要求である事は32bit CPUだったものが、現在では、ほぼ64bit CPUに更新されている事や、androidなどでアプリの64bit対応が義務化されそうな面からも理解される事と思います。むしろ、未だに32bit OSとアプリが多くを占めるPCよりも性能要求は苛烈かもしれません。

ARMの扱う分野の広さは、ARMの話をする場合、結構、厄介だったりもします。
というのは、このCPUはどういったもの?と問われると、表現方法が色々あるんですね。CPUのファミリー、アーキテクチャ、コアの3つでどういうCPUかを示す事になります。ファミリーネームは、メーカー由来で、アプリやOSを動かす場合、アーキテクチャとコアの情報が重視されます。ただ、コアの情報が重要なのは、組み込み用途で、アセンブラコードを書く場合ですから、通常はアーキテクチャが分れば、アプリなどを開発したり、情報を判断したりする場合の目安になります。先に述べたような、64bitのアーキテクチャはARMv8-A以降のアーキテクチャです。gccなどではaarch64となっているのがARM64対応のものになります。 

この分類はgccでコンパイルする場合のオプションを考えたら分り易いかもしれません。aarch64のgccを使用してmarch=armv8-a、mtune=thunderxを使うとすると、aarch64が一番大きなくくりで、armv8-aなどのアーキテクチャがその下位にあり、さらに下位のコア情報が上記の場合はthunderxになるという訳です。

 このように64bit CPUがあり、スマホなどで性能要求によって性能が良いとなれば、スマホだけに使うのはどうかと考えるのも当然の話です。特にスマホを軸の一つにしてビジネスを展開するアップルのiPhoneとマック(PC)のように両方をシームレスにしたい場合、スマホとPCが同じアークテクトにしてしまう事が考えられ、その方が開発は何かと便利だったりコスト削減にもなると考えられます。

iPhoneに関して、アップルは独自のCPUを開発して使用してきたので、ARMに切り変えるのかと誤解する場合もあるようですが、現行のiPhoneのCPUはアップル独自の部分はあるものの、ARMv8-Aコアが採用されていますから、ARMの一種と言ってもいいかと思います。そもそも非x86アーキテクトCPUを使用する普及PCとして独自性を持っていたアップルがx86_64アーキテクトをマックに採用した事の方が驚きであった訳ですから、そういった意味では、マックでARMが採用されたとしても、それは驚く話ではないという意見もあります。
アップルがARM64をマックに採用を考えているのは考えてみれば、違和感はありませんね。

 そういった意味ではARM上で動作するwindowsの開発が伝えられた事の方が驚きを持って伝えられたかなと思います。マイクロソフトはシェアの大きなスマホメーカーという訳ではありませんが、スマホとwidndowsPCとの連動が必要なので、という事は考えられます。ただ、ARMを使用したPCで動くwindowsが主流になるかどうかに関しては、色々な意見があるようです。タブレット分野で省電力なCPUが作り易いARMを採用するのではという憶測もあるようです。ここまで述べてきたように、PCなどで使用するのにARM 64は十分な性能を持っていると考えられますから、別にタブレットに限定する理由はありません。

 マイクロソフトはPC用のOS販売を主軸とするビジネスから、多岐に渡ったIT分野の基幹分野でビジネス展開を考えているようで、IoT向けの製品や、クラウドサーバーの運用でのビジネスモデルなどを積極的に行なっている事は知られています。IoT向けとなると組み込みCPUとの連動を意識せざるえませんから、ARMでというのはありえますし、クラウド分野でのサーバーでARMを採用して、その一部でwindows「も」動くという方向性ではないかという推測もあります。

というのは、クラウド分野に限らず、マイクロソフトが自社内で使用するサーバーOSは実際には、windows以外がかなり使用されており、マイクロソフトの昔のホームページのwebサーバーがlinuxだったという話は有名です。そういった意味でも、linuxの運用経験が十分にあり、OS開発で培ってきた技術力と豊富な人材のいるマイクロソフトは、やろうと思えば、何時でもlinuxベースOSでクラウドサービスを展開可能です。

そして最近、マイクロソフト関係でトピックになった話題としてGitHubをマイクロソフトが買収したというニュースがありますね。OpenSource分野で重要な位置を占めるGitHubですが、ここから提供されているソースはlinuxベースのものが大きな割合を占めます。GitHubを買収した事により、linuxを中心にした開発リソースの所有という意味では、マイクロソフトは世界有数の企業であるとも言えるでしょう。

 ここで、linuxというのが重要な点となります。

 linuxは様々なアーキテクトに対応したOSですから、既にARMに対応しています。
何かCPUアーキテクトを開発したら、とりあえずlinuxで試験環境を作成するのが一般的な流れになっているくらいで、ver1以前はx86ベタベタのコードで書かれていましたが、有志によるポーティングとその成果の採用により、恐らく、地上で最も沢山のアーキテクトで動くカーネルの一つと言っても良いかと思います。
先に述べたアップルのマッキントッシュのOS Xも、実はmachカーネルを採用したmach linuxの一種で、ARMに移行するのに全てを0から開発する必要がないですし、androidもlinuxカーネルを使用していますから、linuxの一種と言ってもよいかと思います。

 という訳でという事ではないのですが、試験用にARM64アーキテクトを採用したthunderX2を2CPU載せる事が可能なワークステーション用のノードでは、OSはubuntuとCentが使用可能です。この2つのディストリビュートが使用可能という事は、ライブラリなどがアーキテクトの違いを吸収してくれるんですね。もちろん、x86_64ベタベタなコードがあるようなソースの場合は別ですが、linuxをOSにする事で、開発がかなり楽になります。clangやgccを使用する事でコードを修正する必要が無いケースが結構あるのです。

 linuxベースであれば、ARMの採用に関するハードルはこのように低くなる訳ですが、ARMを採用する積極的なメリットは何でしょう。

これはARMアーキテクトを開発しているARMホールディングスの企業形態が関係してきます。ARMアーキテクトは傘下のARM ltdで開発しているのですが、CPUの製造は行なっておらず、ライセンスを提供するだけなのです。こうした形態は、アップルなどのように自社独自の部分をCPUに加えたい場合のメリットで、自社の都合に合わせたカスタムチップを製造し、カスタムした以外のその他のパートはARM開発環境を共用する事で、自社の都合にあわせた部分の開発に注力出来るという訳ですね。

また、ARMはスマホで圧倒的なシェアを誇りますが、スマホは携帯電話でもあるが故に、バッテリーの保ちや発熱量の少なさが製品として重要なポイントとなってきます。どんなに性能が良くても携帯して手に持って使用するものですから、あっという間にバッテリーが空になったり、熱くて持てないとなってしまうと、まったく見向きもされなくなってしまいます。
こうした理由から、スマホで採用を目指すCPUでは省電力、発熱の少なさを念頭に設計を行なう必要がある訳なのですが、現在、多数のノードを使用するクラウドのデータセンターやスパコンなどにおいても、この省電力や発熱の少なさがビジネスの鍵となってきています。

 x86アーキテクチャは何より性能を追求してきたという経緯があり、それがx86アーキテクトのメリットではあるのですが、勢い、ノードベンダーは、消費電力と発熱との戦いにあけくれてきたといっても過言ではありません。データセンターを巨大化してスケールメリットによって、サービスの価格を引き下げ、市場で優位に立とうとすれば、消費電力はコストの面でサービス製品の価格の重要な項目となります。CPUの消費電力がちょっと下がるだけで何千万ものCPUが稼動するデータセンターでは、そのちょっとの差が大きなコストの差になります。電気の使用料金だけでなく、膨大な電力を切れ間無く供給する配電設備をどうするかといった大型工事の必要性にまで関わってきますから、ちょっとの差とは言ってられないコストとなる訳です。

 また、発生した熱を冷却するコストも大きく、発熱量に業を煮やした挙句、海底にノードを沈めて冷却してしまおうなんてアイデアが実際に試験されるくらい発熱の問題も重要な問題となっています。北海の海底は大袈裟でも、北極圏に近い国々がデータセンターを盛んに誘致していますが、その売りは、冷却コストが南の地域より小さいというものですからね。

このように消費電力や発熱を重視する場合、このままx86アーキテクトで大丈夫かと疑問を持つ場合もある訳です。実際にはインテルも消費電力、発熱の低下に関して大変、熱心に取り組んで来てはいるのですが、どうしても昔の記憶と印象は拭い難いのも実際だと思います。

そこで、省電力、発熱の少なさの実績、実際はスマホや組み込みという前提条件での実績であって、データセンター向けやスパコン向けでの実績ではないのですが、ARM64をベースに開発してみようかという動きが生じています。データセンターやクラウド向けのARM64ノードが採用される可能性も考えられます。
演算性能、消費電力、発熱、価格など全てが飛び抜けたノードがあれば、何も問題はありませんが、これらのどれかが優れていれば、linuxベースで同じ使用方法やノウハウで運用出来て、同じソースが使用出来るなら、すぐに使用可能な選択肢になるのも事実です。

また、現時点ではデータセンターや科学技術計算用途の一般的なクラスタのCPUはx86_64が主なものですが、寡占化が進み、他の選択肢が無いというのはデメリットと考える事は出来るかもしれません。CPUのマイクロコードやアーキテクチャにバグや致命的なセキュリティホールがあった場合、近々ではmeltdownの例のようにアーキテクトに問題があった場合や、特定のアーキテクトを狙ったアタックなどの場合、対応出来なかったり、対応にあまりに時間がかかる場合もあります。
もし、同じソースを動かす事が出来る異なるアーキテクトの選択肢があれば、こうした問題の対応方法に幅が出るでしょう。もっとも、spectraのように、ARMを採用していたとしても避けられない場合も普通にありますが。

さらに、大きなプロジェクトの場合、プロジェクトの都合に合わせてCPUをカスタムしたいニーズがありますが、ARMの場合、先に述べたようにカスタムチップが作り易いというのも、ARMの採用を後押しすると考えられます。

実際に、バルセロナスーパーコンピューターセンターでは、エクサスケール計算機へのアプローチとして、ARMアーキテクトを採用したというニュースが伝わってきています。

国内はというと、ARMをソフトバンクが購入したという事は、国内的にはARMアーキテクトを使用したCPUを開発する場合、設計から製造まで日系資本だからという訳ではないとは思うのですが、ポスト京ではARMアーキテクトが採用されたというニュースが流れています。

ポスト京では消費電力の低減は時代の趨勢として当然求められます。
また、京では基幹アーキテクトにSPARC64が採用されていた為、京で動かす為のアプリを開発する開発環境が入手しにくかったという意見もあります。ARMで開発すれば、ポスト京で動くという訳ではなく、世界最強を目指すその部分は恐らくカスタムパートになるでしょうから、ARM64ベースであればアプリ開発は可能という意味ではありませんが、カスタムパート以外は共通のARMコアでしょうから、カスタムパートを使用する以外の部分はARM64環境で開発を進める事も、もしかしたら可能になるかもしれません。実際にはSIMD部分は可変長になる予定など、ポスト京OSが動いたとしても、ARM64で開発全てが可能という事はないでしょうけど、SPARC64よりは開発環境の入手は容易になるかもしれません。そこまではいかなくても、ポスト京を意識した開発の場合、とりあえずARM64で開発して、それをポスト京マシンに移植する方が、いきなりx86から移植するよりも、移植のハードルは低くなるかもしれません。

 

「あ~、ポスト京がとか聞いたんだけど、それって何でしょうねぇ?」
「京の後というからには、大阪だな。で、その次がようやくお江戸って訳だ。」
「朝廷が京の都で政をしていたのが、太閤さんの大阪に移って、天下分け目の関ヶ原、家康公がお江戸で幕府を開いたって訳ですな。ははぁ、なるほどねぇ。」
「お前ら、何をトンチンカンな事を言っておる。ポスト京ってなぁ国産スパコンの話じゃよ。いいかい、世界一のスパコンを開発しようってんで、京、つまり10の16乗、10ペタフロップスの計算機を作ろうというプロジェクトを京プロジェクトというんじゃ」
「えぇ~っと、一、十、百、千、万、億・・・次、なんでしたっけ」
「バカだな、お前さんは。億の次が兆、その次が京だ」
「へえ、するってぇと、京の次ってのはなんなんです?」
「その先はな、垓、杼、穰、溝、潤、正、載、極、恒河沙、阿僧祇、那由多、不可思議、無量大数となっておるな」
「へぇ~、ご隠居は物知りだなあ。それじゃ、ポスト京ってなぁ、京の次って事で、垓杼穰溝潤正載極恒河沙阿僧祇那由多不可思議無量大数を動かすよって事かぁ」
「そいつはてぇへんだな。
お~い、垓杼穰溝潤正載極恒河沙阿僧祇那由多不可思議無量大数をブートさせておくんな、とか、垓杼穰溝潤正載極恒河沙阿僧祇那由多不可思議無量大数にバグがあったよぅとかになるって事かい。
垓杼穰溝潤正載極恒河沙阿僧祇那由多不可思議無量大数で動かしていたプログラムは
垓杼穰溝潤正載極恒河沙阿僧祇那由多不可思議無量大数をメンテナンスする都合で停止しました。垓杼穰溝潤正載極恒河沙阿僧祇那由多不可思議無量大数が再稼動するのは、何時何時になりますなんてぇアナウンスが入るってぇ訳だ」
「マシンの名前に京以降の漢数字全部付けやしないよ、それじゃ寿限無だよ」

ポストだけにお後がよろしいようで。