Zopfcode Essay

140文字で収まらない走り書きの置き場

「ARM」という単語の意味を啓蒙する記事

追記: いろいろあって面白かったので、頂いたコメントの返信を末尾に追記しました

追記2: Engadget 日本版が閉鎖するため、上記記事「M1搭載MacでArm版Windows 10は動作可能。すべてマイクロソフト次第」アップル幹部が語るの魚拓を貼っておきます

megalodon.jp

昨今の買収劇に始まり、というかそれ以前から、ARM (Arm) という固有名詞はコンピューターを語る上では必須の単語になっている。それにもかかわらず、どうも世の中の論説やらニュースやら感想やらを見ていると、ARM という言葉への理解が依然として「すごいなにか」の域を出ていないように感じる。結果として、複数の分けられるべき対象が、悪い意味でひとくくりになってしまっている。

ズバリ、「ARM」が何であって何ではないのかを、以下の箇条書きに極力わかりやすくまとめた。わかりやすく例えるということは、正確な表現ではなくなるということでもある。根本的な間違いを除いて、半導体に強いニキには優しくしてもらえると嬉しい。

  • "ARM"(ARMアーキテクチャ・ARM コア)とは設計図(知的財産)であり、物理的な物体ではない
  • つまり、"ARM SoC" という単語は ARM を採用した数多くの SoC*1 をまとめて扱うもので、単一の製品を指さない
    • 酒蔵や杜氏は違えど、基本的に同じ製法で作ったお酒を「日本酒」とまとめて呼ぶようなものである
  • "ARM" を採用した SoC を実際に作るのは、その設計図にお金(ロイヤリティ)を払って使う企業であり、Arm Holdings ではない
  • "ARM" は CPU 部分だけの設計図であり、GPUでも、AI アクセラレーターでも、SoC の設計図でもない*2
  • 今日の SoC メーカー、例えば Snapdragon シリーズで有名な Qualcomm は、ARM の設計図に自社の GPU (Adreno) やその他のパーツを「肉付け」して SoC として「完成」させ、販売している
  • "ARM SoC" は作る会社によって肉付けの方法や考え方がまるで違っていて、それらを統一する規格もない*3*4ため、その上で動くソフトウェアは SoC ごとに動作を変えなければならない
    • つまり、Windows などの OS をすべての ARM SoC 搭載マシンで動かすには想像を遥かに超えた労力が必要であり、2020年時点では到底現実的ではない

このあたりで、"ARM" が無形の共通概念であり、物体としては全く異なる製品として世の中に出回っていることがわかったはずだ。

追記: ARM Windows on QEMU

11月27日に QEMU で ARM Windows を動かした例が出てきた。これは CPU も含めた全てのハードを仮想化した上で動いているので「M1 へ移植した」わけではないことに注意して欲しい。

MS 公式には QEMU には対応していないであろう中、QEMU にパッチを当てて ARM Windows を起動できたという事実は素晴らしいが、仮想マシンの上で動くこと自体は大して特別なことではない。

ARM と Apple のビジネスの関係

冒頭の記事がどうして滑稽であるか理解するために、"ARM" を採用する企業の中でも極めて特殊な Apple について解説する。端的に言うと、Apple と ARM の関係性は他社と同じ視点で語ることができない。

  • Apple は他社に使われる用途の SoC を作っていない
  • Apple は例えるならば「Arm Holdings の VIP 客」であり、ARMアーキテクチャの抽象的な概念だけ借りて、他に例を見ない激しいカスタムを自力でしている*5

ここに Apple の製品群がどのようにしてできているかを加味すると、Windows に対応する旨味がほとんどないことがわかる。

  • Apple 製品は 一社で SoC から OS まで全部完結している
  • 普通のマシン「Dell がパソコンを作って、そこに Intel の CPU を入れて、Microsoft の Windows を動かす」
  • Apple のマシン「Apple がパソコンを作って、そこに Apple の CPU を入れて、Apple の macOS を動かす」
  • よって、MacBook で Windows を動かしてもらう努力をしなくても、商品価値を失うことがない
  • 仮に Windows に対応させようものならば、激しくカスタムした ARM コアだけでなく、自社設計の GPU や AI アクセラレーターといった「秘密の塊」を Microsoft と共有する必要がある*6のでより嬉しくない

ここまでくれば、冒頭の記事で Apple 幹部が「技術的には可能」と言い放った理由もわかるだろう。

「技術的には可能」はエンジニア用語であり、「不可能じゃないけどものすごく大変だしやりたいとは思わない」を意味する。ちょっと言い換えれば「やろうと思えばできるんちゃう?しらんけど」に相当すると言っても過言ではない。

「ARM だから ○○ も動くんでしょ?」という勘違いが、少しでも減ってくれればと思ってやまない。

おまけ: 頂いた反応

いろいろなコメントをいろいろに頂きました。せっかくなので匿名で私のコメントと共に掲載させていただきます。

このような実際の知識はまったくないが、qemu-system-arm,-aarch64のマシンリスト一覧の多さと、さらに実際に指定したボードとマッチしたバイナリもすんなりうごかない今日であったので大変そうとしか思えない。

フレーバーとでも言えばいいでしょうかね、実装の違いによる差分が実は多いことに気付かされますね。こういう体験がもっと多くの人に広がると最高なんですが(叶わぬ思い)

x86やPCとはこの辺全然事情が違うから混乱するのも止むなしか

まさしく。

アプリ対応でも「M1 いけたら Windows on Arm 対応も行けるやろ(逆もまた」みたいな雰囲気あるよな

うわつら……… 半導体が直接には見えなくなる OS や抽象化レイヤーやブラウザの上でも、結局はあらゆる差分で苦しむことになりますよね。要はマルチプラットフォームは辛い。

OS は流石にアレだけど、C/C++ のライブラリとかはソースレベルならまあまあいける。最近は compiler-intrinsics で書いてあることが多いし、仕様は ARM が決めてるっぽいし(ただしコンパイラ次第(VC++ お前のことやぞ

Intrinsic function は素直にいい話ですよね。CPU の底力が上がってクロック単位で戦わなくて良くなった側面もあるでしょう。コンパイラの違いはまあ…w

まるでIntel向けならドライバ更新の必要がないような言いぐさ

不思議なことにソフトウェアは時間が経つと傷んじゃうんで何であれ更新は重要ですね。

「ARM」という単語の意味は「Acorn RISC Machine」じゃないのか

はい、歴史をたどればそうなのですが、Arm Holdings が公開している一連のページや、公的に使用しているタームとしては ARM (Arm) に統一されているので、ARM (Arm) という単語自体の成り立ちについてはブレイクダウンせずとも問題ない(というか、off-topic である)と判断しました。

U-Bootとか完全にチップベンダ毎にforkして独自進化してますからねぇ。最初はびっくりした。

そうなんですよね。かくいう私もForkさせました。Forkさせてがんばったのがこちらです。

www.zopfco.de

アロマ企画の品番?

この時点で大好きなのですが、実際に ARM926EJ-S のようなマジでアロマ企画の品番っぽいアーキテクチャも実在します。

ARMだけに、あー難し!!w

???????????????????????????????????

そりゃそうなんだけどさ。とはいえ、ベースラインではSnapdragon 8cxとM1でそう変わるもんなの?って気はする。

残念ながらISA以外全部違います…と書きたいところなのですが、ARMv8 も小数点以下のバージョンが刻まれていて、小数点以下が異なる可能性が高いです。ちなみに Apple はマイナーリリースへの追随が非常に素早いことで有名です。ところで Qualcomm の SoC はこれまた(主に企業のやり方が)変わってるので、あまりユニバーサルな SoC と思わないほうが良いです。Qualcomm の SoC に実質ロックインしてる Windows も同様です。

箇条書きの五段論法の下り、何度読んでも理屈を理解できない。

書籍の編集さんが見たら怒りそうな雑箇条ですいません。感情ドリブンで秒で書いた乱文なもので。次は善処します。

CPUだけでなく、GPUもWindowsで一般的なアーキテクチャとは違う部分が多いので、Apple製のGPUでDirectXを動かすと性能が活かせなかったりするんじゃないかと思ってる。

ナイス考察ですね。Metal に最適化されていることは言うまでもないので、Compute unit(と呼ばれてるのかどうかは不明)の数やクロックに対して性能が出にくいというのは大いに考えられます。もっとも想像でしかありませんが。

こういう知識が全然ないスマホアプリ開発者なので、最近突然Appleから「同じM1プロセッサやからiOSアプリもMacで動くで!そのうち勝手にMacのAppStoreに掲載してやるからな!」と言われて困惑するしかなかった

カーネルがもともと同じだったところに、CPU の ISA もついに同じになったからといって「じゃあ同じアプリが iOS でも macOS でも動くよね」と勝手にはなってくれないはずで、事前にしっかり準備して見事シームレスに動くようにした Apple はすげぇなとつくづく思います。ところで差分で苦しむかもしれないアプリ開発者の人には…とりあえず同情しておきます。

自分でRTL貰ってリファレンスマニュアルと睨めっこして実装すればわかる。あとSoCの場合CPU以外のキャッシュやバスやらデバッグ用のARMの部品も組み込む必要がある。なおバグはあるので注意。CPUブートコードも自分で書く

JTAGそのものを組み込むとか Boot ROM 実装するとかはやったことないんですけど、仕事で使ってた FPGA (Xilinx ZynqMP) から近い学びがめっちゃ得られました。触ったことがある人がもっと増えれば嬉しいんですけどね(これも叶わぬ思い)

ARM設計を利用した命令系も踏まえた何か。としか言いようがないわなぁ。Rosetta2ちゃんがいるのでもしかするとX86のトランスレーションの方がマシなWindows動くよん。になるかもね。

想像以上にフワッとしてるのが認識を難しくさせてるんですよね。

命令セットってなんなんじゃっていうのは、結局CPU自作本を読めばわかるけど、アーキテクチャライセンスとIPコアライセンスの違いはARM特殊すぎて。。。。富岳CPUもARMだからスマホアプリが動くと思ってる人まだいそう

現時点で ARM が他にない商売をやってるのはまさしくなんですが、かつて存在していたファブレス(例えば、Realtek の SoC の ISA の元になった Lexra とか)はどういう商売の仕方をしてたのかはつくづく気になってます。富岳でスマホアプリ動くと思ってそうは草。

ARMの存在を初めて知ったのは3DOだったかな。

うちの親が友達から借りた 3DO なら見たことあります。ARM の A の字も知らない保育園・幼稚園児の頃でした。

最近ARMの対抗馬という間違った文脈で取り上げられる事のあるRISC-VなんてCPUコアのアーキテクチャでさえない命令セットのアーキテクチャだからこっちも勘違いするなよ。

これ!!!!!!!!!!!!!! 的確です。支持します。RISC-V もエキサイティングですね。

ダライアスではいわゆるバリアのこと。

あ〜、タイトーの?(それしかわからない)

ぽんとARMと言われるとラリイ・ニーヴンの「Amalgamation of Regional Militia」ばかり思い出される。他にも「力が欲しいか?」の漫画やら色々あるはずなのにどうしても、いつもラリイ・ニーヴンばかり思い出される。

ググりました。世界観がつよすぎてすごかったです(小並感)

ここらへんの魑魅魍魎具合、AndroidでカスタムROMに手を出し始めたときに「なんでAOSPの移植はそんなしんどいの」と思って調べた時にうわあってなった記憶。

Android のビルドという概念が!!!まず!!!超絶重い!!!!

AシリーズやスナドラはIPコアをどの程度カスタマイズしているのかな?物理コアの回路に手を加える程度なのか, 命令セットが同じでも物理的には全く別CPUなのかな?

Qualcomm は「概念だけもらって実装は自力でやる方」で、ゴリゴリカスタマイズ派です。正確にはアーキテクチャルライセンスといいます。

x86というアーキが、広い意味での互換性という観点で非常に優れている理由でもある。/だからこそIntel・AMDにはApple M1に負けないワッパに優れたSoC・CPUを作って欲しいと願う。

x86_64 と、それに多くの場合付随している ACPI といった統一規格のおかげですね。開発者も命令セットも実装もファブもみんな違うので比較はできないのですが、命令セット自体の特性、例えば直交性とかが性能対消費電力にどの程度足かせになるのかについては興味があります。ARM は ISA の棚卸しと整理を ARMv8 でできたわけですが、こういうふうな継続的な脱皮や進化も鍵になってくるのかなーと思います。x86_64 はせいぜい特殊命令と SIMD の追加くらいしか起きてないので(それはそう)

そこまで作りが異なるとは思ってなかったな……。なるほど。

伝わって嬉しいっす!

M1上でのiOSアプリはMacのApp Storeに掲載されてなくてもisaファイルをiTunesとかからコピーしてくればそのまま動くので、現時点でも使いたいアプリがあれば直ぐに使える。

ええっ、そんな。すごい。

これについては近いうちに答えが出ると思うけどApple幹部の「技術的に可能」を日本人エンジニアのそれと同じと思わんほうがいいのでは。「我々はArm版Windowsを実行するためのコア技術を持っており〜」等の発言は(文字数

英語原文を引用するの忘れてましたね。 "... the Macs are certainly very capable of it." という書き方で、M1 に x86 エミュレーション他をこなすだけの能力があり、Microsoft 次第 ("really up to Microsoft") で移植は可能であると表現しています。ここで「難しい」とか "should be capable" みたいな少しでも疑いを残す表現をすると、Mac 自身のネガキャンになりかねません。よって、可能性を全く排除せずに、かつかなり受動的で消極的な表現を選択したものと想像しています。長くなりましたが、そういう背景で(語義が完璧に一致するわけではないですが)いわゆる「技術的に可能」と同様としました。

渾身?のダジャレだけスルーされて草

あーむずかし!

なんでこの人SystemReadyを軽んじて「それらを統一する規格もない」とか言ってんの?SystemReadyに準拠するQualcomm以外のSoC積んだ複数のベンダーのハードウェアでWindows動いてんよ

私としても反例が出てきてほしくて頑張って探したのですが、現状ではサーバー向けとIoT向けの規格と製品しか見つけられませんでした(うまいこと紹介してるページがあれば是非教えて下さい)。よって、現状では民生品も含めて広く一般に実装された概念ではないと判断しています。Linux のコードとか見ててもやはり「少なくとも今はそうではない」ですね。普及すれば嬉しさは大いにあると思います。

よく体の一部に移植するナノマシン集合体のことだよね?

惜しい!S が足りないですね。

ここまで「腕」というコメントがひとつもないことにびっくり仰天

いい話(いい話か?)

逆にINTELとAMDすげえなとも思ったり(一周した)

みんなすごい!!!いや本当に!!!

「技術的には可能」はリップサービス

私もそう思います。

まぁ当然なお話なんだが、この辺のコトをキチンと理解できる人って、パソコン方面やとドライバの意味を理解できる人ってコトになるやろから、理解を広めるのは厳しいやろなぁ。

コンピューター好きだったからというバイアスは大いにありますが、私の場合はそれ方面のプレイヤーになる前からARMの世界観は知っていたので、概念だけ知ってもらうのも不可能ではないのかなと思っています。というかそう思いたい。

ARM版Windowsがあるからと言っても、それはx86版と同じ機能が乗ってるわけでもないし、M1=Armでもなし。MSが本気出せば、それなりのトランスレータも作れるだろうけど、ソフト売のみの会社に利があるのかなあ?

MS は極めて高い実装力を有している企業なので全然作れちゃうと思います。指摘の通り、現代においてその頑張りが MS にとってトータルで嬉しいかどうかはわからないですね。macOS の需要 = macOS と Windows を共存させたい需要、ではないですし。

MSではなくUbuntuあたりがむりくりMacで動くバージョン作ったら、Appleは全力で嫌がらせしてきそうな雰囲気あるけどなw

個人的には、涼しい顔して静観するだろうに一票。Apple に対して offensive な動きをすれば別ですが…。

スナドラでいけるならM1いけるだろうとか、M1は5nmでメモリ幅どう直付けするかぐらいで秘密なさそうとか勝手に想像してごめんなさい。Apple幹部がやりたいと思わない、しらんけどというなら今後BootCampはないな。

いや、まあわからないですけどね。何が起こるのかは。今回については Apple というより幹部個人がペラペラ喋っちゃってる印象が強いですし。

でもNTカーネルとHALのアーキテクチャも相当柔軟にできてるはずなんで。過去実績もあるし。秘密の塊といってもドライバのソースを公開するわけではない…でもまあある程度はわからないとMSも手をつけられないだろうが

DEC Alpha を思い出す話ですね。ところが「ある程度はわからないと」のある程度だけで相当な情報量を持っていて、やはりリバースエンジニアリングだけでは早々に限界が来るであろうことから、両者の綿密な協力なくしては実現し得ないでしょう。

“ARM (Arm) に統一されている” んじゃなくて、Armに統一しようとしているはずです https://www.arm.com/company/policies/trademarks/arm-trademark-list/arm-trademark 。古いページは大体ARMのままですが…

やっぱりそうなんですね。的確なページをありがとうございます。まあ、全時代を見渡せば ARM か Arm のどちらかであったということでここはひとつ。

この他に、GPUやバスを始めとしたIP(もちろんCPU含めて)をツールとともに提供するARM社という意味もあると思います。

そのとおりだと思います。今回は槍玉に上がりがちな ISA とからへんを主軸にして話しましたが、その他の知財やソリューション提供を含めるとビジネスの規模は相当なものになります。

そういやラズパイの起動シーケンス調べたときに、さっくりいうとGPUがブートストラップファイル読んでカーネルを読み込み、CPUを起動するみたいな事になっててなんだかすげえなと思った記憶が

実は Raspberry Pi の Broadcom の SoC は極度に有名なのに反して、中身の挙動が特殊なうえに、データシートもパブリックになっていません。SoC のデータシートといわれているものは Raspberry Pi Foundation が出しているごく簡易的なものです。

Appleが言っているのはBootCamp的なやつじゃなくて、仮想マシン(Parallelsとか)の上で動かす話なんだと思っていた。そして、既に動いていて、あとはライセンスの問題だけと言っている可能性。

その解釈は確かにあるなーと思ってました。実際に動いているので。

「ARM Architecture Reference Manual」はARMARMであるということを広めていきたい

なんとwww アームアームw

アップルはアップルでプラットフォームが完結してるからMacは体感的には優れたPCだと思うよ

他にないビジネスを実現できている点が特筆に値します。かつては Sony が似た方向性の垂直統合を進めていたイメージですが、それは叶いませんでしたね。 ちなみに私は普段 MacBook Pro を使ってます。マシンから OS に至るまでの UI/UX の統一感とセンスの良さが好きです。あとフォントレンダラー。これだけは欠かせない。

*1:System-on-a-Chip の略で、いろいろな機能がまとめられたチップのこと

*2:パワーのあるCPU は Cortex-A、組み込み向けは Cortex-M や R、GPU は Mali … といったように用途ごとに別売りされていて、当然これらを組み合わせて SoC とした製品も数多くある

*3:ちなみに機能ブロック間をつなぐバスの規格 AMBA のように、部分部分の規格は存在する

*4:SystemReady のようなそれっぽい概念も出つつあるが、まだサーバー向けで民生品に降りてくるには年単位で時間がかかるし、ARMの認定基準という色もあるために今後安価な SoC のベンダーにどう捉えられるか不透明

*5:強いて挙げるなら、Arm Holdings を買収した NVIDIA が作った Denver も似た感じだが、スケールでは Apple に遠く及ばない

*6:リバースエンジニアリングも不可能ではないが、「不可能ではない」だけで現実的ではない