『半導体業界の第一人者,AI業界を行く!』 Vol.12:クラウドネイティブプロセッサ

『半導体業界の第一人者,AI業界を行く!』  Vol.12:クラウドネイティブプロセッサ

こんにちは,HACARUS 東京R&Dセンター所属のエッジ・エバンジェリスト 田胡治之です.この連載では,半導体業界で長年知識や情報を得てきた私,田胡がこれまでと異なるAI業界に飛び込み,そこから感じる業界のニュースやトピックを独自の視点で紹介したいと思います.

今回は,データセンター向け新マイクロプロセッサを二例取り上げます.開発はAmpere社とAmazon社で,いずれも従来のマイクロプロセッサメーカーではありません.

 

Ampere社 Altra

第一の例として,Ampere社 Altra をとりあげます.[2]によれば,「同社は Intel 出身者が設立したスタートアップ.今回のAltraは第2弾製品で、Armのサーバー向けCPUコア「Neoverse N1」[9] をベースにした、Arm v8.2A+アーキテクチャーのCPUコアを最大で80個集積する.このCPUコアは最大3GHzでシングルスレッド動作する。CPUコアごとに、64KバイトのL1命令キャッシュと、64KバイトのL1データキャッシュ、1MバイトのL2キャッシュを備える。さらに、チップ全体で32MバイトのSLC(System Level Cache)を集積する.」です. Altraマイクロプロセッサチップを搭載する Mt. Jade プラットフォームを Figure 1 に示します [2].

 

Figure 1 Ampere社 Altra マイクロプロセッサを搭載する Mt. Jade プラットフォーム  [2]

Figure 1 Ampere社 Altra マイクロプロセッサを搭載する Mt. Jade プラットフォーム  [2]

Figure 2 左側グラフは,マイクロプロセッサのコア性能を計る Coremark 1.0 値の比較です.Altra(緑)はAMD社 EPYC(赤)とほぼ同じですが,性能指標/消費電力(Figure 2 右側グラフ)で比較すると,EPYCを倍近く引き離しています.即ち,性能あたりの性能が高い,ないし同じ処理を行う場合約半分の電力しか消費しません [3].

 

Figure 2 Mt. Jade の Coremark1.0結果 [3]

Oracle は,同社クラウド環境(Oracle Cloud Infrastructure (OCI))で,Ampere社Altra を使っています[4].

 

Amazon社 Graviton2 プロセッサと EC2 インスタンス

Amazon社は,同社のEC2(クラウド環境)向けマイクロプロセッサとして,初代 Graviton と Graviton2 を開発しました.Armによれば、2020年のAmazon EC2インスタンスにおける新規追加のうち 49%がGraviton2 になっており,x86プロセッサ(AMD,Intel)の51%に近づいているそうです.

インスタンス全体に対するシェアとしては、2021年1月時点で15%に増えつつあると説明しています(Figure 3 左) [5].Amazon社 EC2 の高性能CPUの選択肢をFigure 3 右に示します [6]

 

Figure 3 左:Amazon社EC2に占める Graviton2 の割合[5],右:Amazon社 EC2 の高性能CPUの選択肢 [6]

Amazon社 クラウドサービスAWS EC2インスタンスでの様々なプロセッサの Coremark v1.0 性能比較をFigure 4 に示します [7].一番上の m6g_16xlarge が Graviton2 を使ったインスタンスで最も性能が高いです.

 

Figure 4 Amazon社 EC2の様々なプロセッサの Coremark v1.0 性能比較 [7]

 

設計ベースは Arm 社 Neoverseプラットフォーム

Ampere社Altraは,Arm社 Neoverseベースの設計(Figure 5 左)[2] です.またAmazon社 Graviton2 プロセッサのパッケージには Arm ロゴと Armが買収した設計会社 annnapurnalabs が刻まれ,Arm社 Neoverseベースと発表されています(Figure 5 右)[8].つまり両者とも Arm社 Neoverse をベースに設計開発されたチップです.

Arm社は、2018年10月に米サンノゼ市で開催のプライベートイベント「Arm TechCon 2018」においてNeoverseを初めて発表しました.それまで同社のCPUコアのブランドは、主にスマホなどのデバイス(端末)に向けた「Cortex」でした。

米IntelのMPU「Xeon」の牙城であるサーバー/インフラ向けプロセッサーへ打って出る本気度を示すかのように、Cortexではなく、新たにNeoverseというブランドを立ち上げました [9].

 

Figure 5 左:Ampere社 Atraのブロックダイアグラム[2],右:Amazon社 Gravition2 プロセッサのパッケージ刻印とCPU ID 情報 [8]

Neoverse プラットフォームのロードマップを Figure 6 に示します [5].

 

Figure 6 Arm Neoverse プラットフォームロードマップ [5]

Arm Neoverse が提供するハードウェアとソフトウェアを Figure 7 に示します [10].筆者は必要なモノは揃っている印象を受けます.例えば,Core数,DRAMの接続幅などのパラメータを決めれば大部分のRTLレベル設計を終えられるのではないでしょうか?

Ampere社,annnapurnalabs社の技術者が検証と物理設計(配置配線)を行えば良さそうです.Neoverse を使えば,自前開発に比べて設計期間とマンパワーをはるかにセーブできるでしょう.Ampere, Amazon が Neoverse を使うのも納得できます.

 

Figure 7 Neoverse はソフトウェアもハードウェアも提供 [10]

 

Neoverse の新技術

マイクロプロセッサの動作を大ざっぱに表現すれば,メインメモリ上にあるデータを読み,マイクロプロセッサ内部の演算処理装置で読み込んだデータを処理し,メインメモリに書き込む,の繰り返しです.従ってメインメモリからの読み/書き時間は全体の性能に大きな影響を及ぼします.

サーバーのメインメモリには,DRAM(Dynamic Random Access Memory)が使われます.1980年初期まではマイクロプロセッサの動作速度がまだ遅く,DRAMの速度と同じレベルでした.その後マイクロプロセッサの動作速度は飛躍的に向上しましたが,DRAMの動作速度はゆっくりとしか向上しませんでした.そのため,マイクロプロセッサと DRAMとの間には,年々大きくなる性能ギャップがあります(Figure 8).

DRAMの読み書き時間は約50ns に対し,マイクロプロセッサの命令実行時間は約0.25~0.3ns位です.ここで ns は,十億分の一秒です.

 

Figure 8 Microprocessor-DRAM performance gap [11] を元に加筆

サーバーでの銀行口座残高計算をイメージして,実行時間を試算します(Figure 9).口座残高を最初100$とします.まずATMから現金60$を引き出し,次に別の口座へ50$を振込するシナリオを考えます.

  • Step-1 ~ 3.ATMから現金60$を引き出し
  • Step-4 ~ 6.別の口座へ50$を振込 (口座残高不足でエラーになる)

 

マイクロプロセッサコア(以下 Core)一つと,DRAM のみから構成されるシステム例を Figure 9 に示します.

Step-1で,DRAMから口座残高100$を Core内レジスタ(r0)に読み出します.Step-2で,r0からATMで引き出された60$ を減じます.Step-3で,更新された口座残高40$をDRAM内口座残高(赤字)に書き込みます.Step-4で,DRAMから口座残高40$を読みだし,Step-5で振込金額50$ を減じ,r0内容は -10$ となります.即ち残高不足です.

Step-6で,残高不足で振込失敗となります.これが正しい動作です.実行時間は 152ns で,そのうち三回のDRAMアクセス(50ns青色矢印)が 150ns を占めます.

これがマイクロプロセッサとDRAMの速度差の影響です.Coreの処理時間が短くなっても,遅いDRAMアクセス時間に足を引っ張られて,システム全体の実行時間は短くなりません.この問題への代表的な対策がキャッシュメモリ(cache memory)です.

 

Figure 9 キャッシュメモリを持たない1コアシステムでの実行(実行時間152ns)

 

キャッシュメモリとは,Core と同一チップ内にある容量は小さいがアクセス時間は速いメモリで,メインメモリの一部のコピーを保持します.なお本稿では,キャッシュメモリの動作イメージと効果を示すのを優先し,詳細を大胆に省略しています.

Core 1個にキャッシュメモリが付いたシステム例を Figure 10 に示します.キャッシュメモリは,Core内に追加された Valid bit と Data memory から構成されます.

Step-1で口座残高をDRAMから読み出す時,レジスタ r0 と同時にData memoryにも書き込みます.Step-2 は,Figure 9 と同じです.Step-3 で,更新された口座残高40$をキャッシュメモリに書き込みます.キャッシュメモリ は同じCore内にあるので,書き込み時間は2ns(緑色矢印)と高速です.DRAMへの書き込みには50ns かかるのでまだ終わっていませんが,Core側は書き込み終了とみなして Step-4 に進みます.

Step-4 では,キャッシュメモリに口座残高データがあるので,そこからレジスタ r0 に 2ns(緑色矢印)で高速に読み込めます.Step-5 は,Figure 9 と同じです.Step-6 で,振込は残高不足で失敗します.これは,Figure 9 と同じ正しい処理結果です.

実行時間は 56ns で,Figure 9 の 152ns から大きく短縮できました.これがキャッシュメモリの効果です.DRAMからの最初の読み出し時間はキャッシュメモリがあっても短縮できませんが,同じ内容(アドレス)への二回目以降のアクセス時間を大きく短縮できる,のがポイントです.

 

Figure 10 キャッシュメモリを持つ1コアシステムでの実行(実行時間56ns)

 

キャッシュメモリは Core ひとつの場合うまく働きますが,Core が複数になるとこのままでは誤った処理を行うケースが出てきます.

Core0 と Core1を持ち,それぞれの Core がキャッシュメモリを持つシステムを Figure 11 に示します.

Core0 と Core1 はインターコネクトを介して一つのDRAMを共有しています.メモリー共有型マルチプロセッサと呼ばれるアーキテクチャです.

全体の処理時間を短縮するため,Core0 がATM現金引き出し処理を行い,Core1 が振込処理を行うとします.Step-3 で,Core0 は,Figure10と同じく更新された口座残高 40$ をキャッシュメモリに書き込み,DRAMに遅れて書き込みます.同じStep-3 で,Core1 がDRAMから古い口座残高 100$ を読むケースがありえます.

Step-4 ~ 6 で,Core1 は古い口座残高 100$ を元に50$を振込処理します.残高十分のため,振込は誤って成功してしまいます.原因は,複数Core のキャッシュメモリに,口座残高の一貫性のないコピーが存在するためです.

Figure 11 を,キャッシュ・コヒーレンシー(cache coherency)を持たないシステムと言います.これでは困るので,キャッシュメモリの高速性を活かしつつ,キャッシュメモリ内容の一貫性を保つ仕組みが考えられました.

 

Figure 11 キャッシュ・コヒーレンシーを持たない2コアシステムでの実行(実行時間56ns)実行結果が誤っている.

 

Figure 11 で問題となった Step-3 について,Core0 キャッシュメモリ内容とCore1キャッシュメモリ内容の一貫性を保持する仕組み(キャッシュ・コヒーレンシープロトコルと呼ばれる)を持つ Snoop mechanism を付け加えます,動作を Figure 12 に示します.

これは原理を示すシンプルな例で,実際にはもっと手の込んだプロトコルが使われています.Core0 と Core1 は,それぞれ Snoop mechanism を持ちます,その役割は,(A) 自らのキャッシュメモリ更新メッセージ送出と,(B) インターコネクトを流れるメッセージを常時監視(snoop)し必要な場合自らのキャッシュメモリ状態を変更する,です.その動作は以下です(Figure 12 と対応).

  1. Step-3 the first half:Core0 が更新した口座残高40$ をキャッシュメモリに書き込む時,Core0 Snoop mechanism はインターコネクトに ”キャッシュメモリ更新メッセージ” を送出します.
  2. Step-3 the first half:Core1 Snoop mechanism は,(1)メッセージを検出して,Core1 キャッシュメモリに同じ口座残高データ(メモリアドレス)が存在するか?,を調べます.存在する場合,その Valid bit を 0 に変更します.即ち,Core1 キャッシュメモリに口座残高データが存在しない状態にします.
  3. Step-3 the latter half:Core1 は口座残高データを読むにあたり,まずCore1 キャッシュメモリを探しますが存在しません.従ってDRAMから,Core0 が更新済みの口座残高データがCore1 に読み込まれます.

このようにして,Core0, Core1 間で正しい口座残高データが共有されます.

 

Figure 12 キャッシュ・コヒーレンシーを持つ 2コアシステムでの実行.正しい実行結果が得られる.

 

 

コア間インターコネクトの進化

Figure 12 の Core数は2でした.Ampere® Altra Max™ [12] のCore数は128(クラスタ数32)で64倍にも達します.Core数が多くなると,インターコネクトに多くの ”キャッシュメモリ更新メッセージ” が飛び交う状態となり,それがボトルネックとなりシステム全体の処理性能が頭打ちになります.

対策の一つは,インターコネクトの通信容量を増やすことです.Figure 12 のインターコネクトはバス型です.2005年あたりからリング型インターコネクト(Figure 13 左の CoreLink CCNも一例)がよく使われていました.

ちなみにリング型に先鞭を付けたのは,筆者も設計開発に関わっていた Sony PlayStation3 の Cell Broadband Engine (Core数9)と思います.Neoverse V1 platformでは,CoreLink CMN-600 Coherent Mesh Network [13] を使っています(Figure 13 左)[10].グラフ横軸のクラスタ数32(Core数128)でも,ネットワークバンド幅は頭打ちになっていません.前世代 CoreLink CCN ではクラスタ数8(Core数32)あたりで頭打ちになることも読み取れます.

筆者の2000年台前半の記憶では,メモリ共有型コンピュータのCore数上限は32位だろう,と言われていて,当時の最上位コンピュータのCore数も32位でした.今やチップ内に128 Coreを集積できるのですから,コンピュータアーキテクチャの進歩(理論と実装)と半導体製造技術の進歩に驚きます.

Neoverse V1 platform は,CCIX(Cache Coherent Interconnect for Accelerators)も提供しています(Figure 13 右)[10].CCIXはプロセッサ(例えばAmpere Altra)のメインメモリと物理的に別のアクセラレータのメモリ間で共有メモリを実現するオープンな接続規格です[14] .

例えば,PCIexpressスロットにあるAIアクセラレータカードのメモリ(の一部)をプロセッサのメインメモリとシームレスに共有できます.データ転送を減らしシステム性能を向上できると考えられます.

 

Figure 13 左:CoreLink CMN の高いスケーラビリティ [10],右:Coreとアクセラレータ間でもメモリコヒーレンシーを保持できる CCIX [10]

まとめ

  • データセンタービジネス(Oracle, Amazon など)の会社が,自社データセンター向け”クラウドネイティブプロセッサ”を開発し,クラウドインスタンスとして展開し始めました,
  • Ampere社 Altra,Amazon社 Graviton2 は,どちらも Arm社 Neoverse プラットフォームを使っています.これはデータセンター向けサーバーマイクロプロセッサ設計開発にフォーカスしたハードウェアとソフトウェアのIP群です.Neoverse を使うことで,マイクロプロセッサ開発期間と設計マンパワーを大幅に減らせ,マイクロプロセッサ開発未経験の企業でも参入が可能になった,と考えます.
  • 例えば Altraの消費電力あたり性能は,Amd社EPYC の約2倍と高いようです.
  • Neoverse は,チップ内にキャッシュコヒーレンシーを保つ Core間メッシュ型ネットワーク(CoreLink CMN-600)を持ち,128 Core(仕様上は最大 256 Core? )のメモリ共有型プロセッサを実現しています.
  • Neoverse は CCIXを提供します.例えば,PCIexpressスロットにあるAIアクセラレータカードのメモリ(の一部)をプロセッサのメインメモリとシームレスに共有できます.データ転送を減らしシステム性能を向上できると考えられます.

 

参考文献

[1] Ampere Altra The World’s First Cloud Native Processor
https://amperecomputing.com/altra/

[2] 80個のArmコアを集積するサーバー専用MPU、米インテル出身者のスタートアップ
https://active.nikkeibp.co.jp/atcl/act/19/00008/032300805/

[3] Ampere Altra Performance Shows It Can Compete With – Or Even Outperform – AMD EPYC & Intel Xeon
https://www.phoronix.com/scan.php?page=article&item=ampere-altra-q80&num=4

[4] Ampere A1 Compute
https://www.oracle.com/cloud/compute/arm/

[5] Arm、DC向けCPU IPデザイン「Neoverse」の高性能版「Neoverse V1」とArmv9に対応した「Neoverse N2」を発表
https://cloud.watch.impress.co.jp/docs/news/1321510.html

[6] Amazon EC2 で選択できる高性能CPUの選択肢
https://d1.awsstatic.com/webinars/jp/pdf/services/20200707_BlackBelt_Graviton2.pdf

[7] Benchmarking Amazon’s Graviton2 Performance With 64 Neoverse N1 Cores Against Intel Xeon, AMD EPYC
https://www.phoronix.com/scan.php?page=article&item=amazon-graviton2-benchmarks&num=4

[8] Amazon’s Arm-based Graviton2 Against AMD and Intel: Comparing Cloud Compute
https://www.anandtech.com/show/15578/cloud-clash-amazon-graviton2-arm-against-intel-and-amd

[9] 打倒Xeon、英アームがサーバー/インフラ向け「Neoverse」で第1弾のCPUコア
https://xtech.nikkei.com/atcl/nxt/column/18/00001/01751/?P=2

[10] Boost SoC performance from edge to cloud ARM®CoreLink™ System IP
http://www.armtechforum.com.cn/attached/article/2016ATS_C1_Neil_Parris20161206151154.pdf

[11] John L. Hennesy and David Patterson, “Computer Architecture A Quantitative Approach fifth edition”, page 102, Morgan Kaufmann

[12] Ampere® Altra Max™ 64-Bit Multi-Core Arm® SoC Product Brief
https://amperecomputing.com/wp-content/uploads/2021/06/Altra_Max_Rev_A1_PB_v0.55_2021061261.pdf

[13] Arm, Corelink Coherent Mesh Network
https://www.arm.com/ja/products/silicon-ip-system/corelink-interconnect/cmn-600

[14] CCIX Consortium
https://www.ccixconsortium.com/

Takashi Someda

サンマイクロシステムズでエンジニアとしてキャリアをスタート。未踏ソフトウェア創造事業への採択をきっかけに、ベンチャーでのプロダクト開発に携わり続けている。現在はハカルスの CTO として、グローバルな開発チームとともにサービスを成長させるべく日々奮闘中。ソフトウェアとロックと家族を愛する40歳。

ニュースレター購読Newsletter

登録はこちら