IBM Power

Power10の新規命令をいち早くお試し!Power10 Functional Simulatorのご紹介

記事をシェアする:

2020年のHot Chipsカンファレンスで大きな話題[1]となったPower10プロセッサー。このPower10プロセッサーを搭載するサーバーは、まもなくご使用いただけるようになるかと思いますが、Power10プロセッサーで追加される新規の命令セットを試すことができる環境が、既に一般公開されていることをご存知でしょうか。本記事では、システムズ・ラボサービスの三ッ木 雅紀とテクニカル・セールスの釘井 睦和が、Power10プロセッサーのシミュレーター環境となるPower10 Functional Simulatorについて紹介します。

2021年、Power10プロセッサーを搭載するサーバー・ハードウェアの発表が予定されているIBM Power Systems 改め IBM Power。今後、IBM Systems Japan Blogでは、POWERプロセッサーとIBM Powerの歴史的な出来事や、Power10プロセッサーの紹介と具体的なユースケースといった内容の記事を毎月公開します。

三ッ木 雅紀

三ッ木 雅紀
日本アイ・ビー・エム株式会社 IBM Lab Services Power Systems Delivery Practice

IBMシステムズ製品となるストレージ製品開発、IBM Cell Processorサーバー OEM製品開発を経て、2012年よりラボサービス・エンジニアとして、IBM Power関連のサービスを担当。現在、IBM Power製品によるAI実装関連の開発・構築・技術相談サービスを推進中。(サービス事例: AIによる卓球ラリーシーン検出

釘井 睦和

釘井 睦和
日本アイ・ビー・エム株式会社 システム事業本部 ソリューション事業部 Power Systems テクニカル・セールス コンサルティングITスペシャリスト

IBM Powerのプリセールス・エンジニアとして15年以上にわたり活動。業種や地域を問わず、AIXから、IBM i、Red Hat Enterprise Linuxをはじめとする主要なLinuxディストリビューションまで数多くのOSに対応。IBM Powerに先進テクノロジーを取り入れる際に先陣を切ってチャレンジし、その知見でお客様での活用をリードしていく水先案内人としての役割を担っている。


1.Power10 Functional Simulatorとは?

プロセッサーおよびそのシステムの開発において、プロセッサー・チップの開発と並行してシミュレーター環境を使用してコンパイラーやOSの開発を進めることは一般的な手法となります。IBM社内でもその手法が取られており、シミュレーション・レベルに応じた様々な種類のシミュレーター環境が開発に使用されています。近年のPowerプロセッサーおよびそのシステムの開発ツールは、エコシステム促進のために多くのツールが一般公開されており、Power10 Functional Simulatorも下記リンクよりダウンロード可能となっています。

Functional Simulatorは、20年以上にわたって複数のIBM社内チーム(コンパイラ開発チーム/ファームウェア・Linux OS開発チーム/データベース開発チーム/パフォーマンス・チーム/リサーチ・チーム/チップ・ベリフィケーション・チーム等)により活用されているツールです。そのPower10対応版であるPower10 Functional Simulatorは、Power10プロセッサーのすべての命令セットをシミュレートすることができるFull instruction set simulatorとなります。ソフトウェアとしては、Power10のファームウェア、ベアメタル・ソフトウェア、Linux、Linux上のアプリケーションを動作させることが可能となっています。以下にPower10 Functional Simulatorの機能一覧を記載します。

  • Power10ハードウェアリファレンスモデル
  • PowerISA[2] (Power Instruction Set Architecture: Powerの命令セット規約)準拠のFull instruction set simulator
  • SMP(Symmetric Multiprocessing)モデルをシミュレート可能
  • 対応機能:
    − プロセッサー内の各ユニット(Load/Store, FXU, FPU, DFP, VMX, VSXなど)の機能シミュレーション
    − 例外/割り込み処理
    − HPT(Hashed Page Table)/Radix Treeによる準仮想化されたアドレス変換処理
    − SLB(Segment Lookaside Buffer)/TLB(Translation Lookaside Buffer)/ERAT(Effective to Real Address Translation)によるアドレス変換キャッシュ処理
    − Instruction Prefix処理
    − VSX(Vector Scalar Extension)/MMA(Matrix Multiply Assist)命令処理
    − キャッシュラインに対するCopy-Paste機能
    − Linux/Hybrid Cloud用に割り込み処理の新たなプログラミングモデルをサポート
  • Linuxおよびハイパーバイザーの開発・デバッグ環境を提供
  • TCLベースのコマンドラインインターフェースにより
    − スクリプトを用いてカスタマイズ可能
    − プロセッサーの状態コントロールが可能: Step/Run/Cycle run-to/Stopなど
    − レジスターおよびメモリーへの読み書き操作

2.Power10 Functional Simulatorの動作方法

Power10 Functional Simulatorは以下のようなスタックで動作します。(注: Powerサーバー上で動作するシミュレーターは非公開となっており、x86_64上で動作するシミュレーターのみが公開されています)

Power10 Functional Simulatorのスタックの説明図

Power10 Functional Simulatorのスタック

Power10 Functional Simulatorのセットアップは、ダウンロード後のrpm/debをLinux上でインストール後、ユーザーガイドおよび /opt/ibm/systemsim-p10/examples/linux/README に従って各種イメージ(Firmware/Linux kernel/Linux Disk)をダウンロード、起動させることで使用可能となります。(xtermを使用するため、X Window環境での動作が必要となります)

また、付属の callthruアプリケーションにて、ホストとシミュレーター間のファイルのやりとりが可能となっています。

シミュレーター実行画面は、以下のようになります。(左側の前面ウィンドウがシミュレーターのコンソール、右側の背面ウィンドウがシミュレーターのコマンドウィンドウとなります)

Power10 Functional Simulatorの実行画面

Power10 Functional Simulatorの実行画面

3.Power10 Functional Simulatorで試すPower10新機能

Power10 Functional Simulatorは、Power10プロセッサーのシミュレーター環境であるため、Power10の新規命令の動作確認が可能となります。LLVM/GCCコンパイラーおよびLinux kernelのPower10対応は既に公開されており、比較的新しいバージョンのコンパイラーおよびkernelでサポートされています。また、Functional SimulatorのLinuxイメージにも、Power10に対応したkernelおよびコンパイラーが同梱されています。特にコンパイラーに関しては、GCCのメインストリームよりも一足早くPowerプロセッサー向けの新機能を試すことができるAdvanced toolchainと呼ばれるコンパイラーが使用可能となっています。

これらのコンパイラーを使用して試していただける新命令を、下記にいくつか紹介します。

3.1 Prefix新命令フォーマット

Power10ではPrefixをつけた新命令フォーマットがサポートされています。Powerアーキテクチャーで採用されている命令セットアーキテクチャーはRISCアーキテクチャーとなっており、32bitの固定命令長が基本となりますが、新命令フォーマットはこの32bitの命令の前に32bitのPrefixを加えて各命令を拡張できるようにしたものとなります。この拡張は、これまで30年以上にわたり固定命令長を採用してきたPowerアーキテクチャーにとって革新的かつ歴史的な変更となっています。

わかりやすい例としては、64bit命令長になることでより大きな即値が扱えることができ、大きな値の扱いが1命令で対応可能となります。加えて、オペコードやレジスタ番号フィールドも拡張可能となっているため、ベクトル演算におけるPERMUTE命令などの拡張もなされ、より複雑な処理が1命令で記述できるようになっています。

より具体的な例としてPower10 Functional Simulator上の動作を見てみましょう。

下記のリンクで示されるようなコード (GCCのテストコードとなります)
https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/testsuite/gcc.target/powerpc/prefix-add.c;h=0027406e4579dc095dc1e1cac3358aefe20bdcd7;hb=HEAD をPower10 Functional Simulator上でコンパイルすると以下のようになり、Power10用にコンパイルされたコードはPOWER9の2命令に対して1命令となっていることがわかります。

Power10 Functional Simulator上でコンパイルされたコードの図

Power10 Functional Simulator上でコンパイルされたコード

このように、Power10では、より少ない命令でのプログラムの記述が可能となっています。さらに、Power10ではこのPrefix命令に加えて、2命令をデコーダ内で1つのmicro opとしてまとめて実行できるinstruction fusionと呼ばれる機能の強化がなされているため、Power10用にコンパイルされたプログラム以外でも高速動作させることが可能となります。

3.2 MMA (Matrix Multiply Assist)命令

Power10では、POWER8/POWER9にて使用可能なベクトル演算命令のVMX/VSX命令に加えて、MMA(Matrix Multiply Assist)命令と呼ばれる行列演算命令が用意されています。

専用のハードウェア・ユニットを各CPUコアあたり4機搭載しており、こちらにより行列の外積演算A←{±}A {±} XY^Tを高速で処理できます。また、下記に示すように倍精度・単精度に加えて、Bfloat半精度、Int4などでの演算もサポートされています。これらにより、AI推論ワークロードをGPUなどの拡張機器なしでより効率的かつ高速に実行することが可能となります。

対応演算精度とPeak [FL]OPS演算性能の表の画像

対応演算精度とPeak [FL]OPS演算性能

また、各コアあたり4機のMMA専用ユニットを効率利用するために、Power10ではMemoryとL3/L2/L1キャッシュのread/write帯域幅もデザインが刷新されており、POWER9比でそれぞれ倍の帯域が用意されています。

MMA専用ユニットとメモリー/L3/L2/L1キャッシュのread/write性能の説明図

MMA専用ユニットとメモリー/L3/L2/L1キャッシュのread/write性能

上記MMA命令ももちろんPower10 Functional Simulatorでは完全シミュレート可能となっているため、アセンブラやコンパイラーの組み込み命令(Intrinsics)によりテスト動作させることが可能です。MMA命令は従来のVMX/VSX命令と親和性を高めた実装となっており、VMX/VSX命令と同様のレジスターを使用して命令を発行するような仕組みとなっています。

例として、単精度4×4の行列積をコンパイラーの組み込み命令にて記述すると、以下のようになります。

単精度4x4の行列積の記述例の図

単精度4×4の行列積の記述例

MMA命令を使用したプログラムの作成方法および実行方法に関しては、既に、下記のRedbookがPower10発表に先駆けて公開されており、シミュレーター上での動作確認済みの各種コード詳細が記載されておりますので参照ください。

上記にて、MMA命令を試していただくことは可能となりますが、実際にAI用途で使用する場合は、これらの命令は最適化されたライブラリーを用いて簡単にご利用いただけます。

Linux kernelやコンパイラー同様、以下、最適化ライブラリーのPower10 MMA対応は既に実装され、公開済みとなっています。

また、TensorFlowやPyTorchなどのDeepLearning Frameworkも、TensorFlowはEigen、PyTorchはOpenBLASを内部的に使用することで、同様にMMA命令による高速化がなされることとなります。その他、ONNX runtimeなどのMMA命令による高速化も現在対応を行っています。


本記事では、いち早くPower10の機能をお試しできるPower10 Functional Simulatorについて、概要、使用方法、使用例を簡単に紹介させていただきました。Power10プロセッサーを搭載するサーバーが登場した暁には、パフォーマンス情報などの詳細情報公開も随時進めていく予定ですのでご期待ください。

最後に、本記事の作成にあたりご協力いただいたPower10 Functional Simulator開発チームリードのVincent Limさん、IBM東京基礎研究所の緒方一則さんと石崎一明さん、IBMラボサービスの田中宏幸さん、そして、Functional Simulatorの開発に携わった皆様に感謝いたします。どうもありがとうございました。

現在のIBM Power(IBM Power Systems)

POWER9プロセッサー搭載IBM Powerのファミリー画像

POWER9プロセッサー搭載IBM Power

2021年8月現在、IBM PowerはPOWER9プロセッサーを搭載し、スケールアウト・サーバースケールアップ・サーバー、そして、AIの学習や推論に最適な高速コンピューティング用サーバーを提供しています。また、企業の大規模基幹システムを担うSAP HANA環境の効率的な構築と安定稼働に貢献する認定ハードウェアも提供しております。

IBM Powerが提供するスケーラビリティーはハイブリッドクラウドに最適です。また、災害対策のバックアップ環境や、開発・検証環境構築のためにIBM PowerのLPAR(論理区画)をIBM Cloud経由で従量課金にて活用できるIBM Power Systems Virtual Serverもご利用いただけます。

明確なロードマップのもと、時代が必要とする機能を提供するために確実に進化を続けているIBM POWERプロセッサーとIBM Power にご期待ください。


関連情報

More IBM Power stories

量子中心のスーパーコンピューターに必要なサーキット・カッティングを可能にするダイナミック・サーキット

Natureに掲載された新しい論文は、一つの量子プロセッサーでは実行不可能なサイズの量子回路を、二つの量子プロセッサーを接続して実行できることを世界で初めて示しました。 今日、世界で最も強力な古典的スーパーコンピューター […]

さらに読む

2年前に設定したチャレンジを達成した IBM Quantum

今回が初回となる IBM Quantum Developer Conferenceで、IBMはアルゴリズム探索を容易にする高性能な量子コンピューターと使いやすい量子ソフトウェアを発表しました。 IBM®は 2年前に、量子 […]

さらに読む

IBM Z 移行の勘所 – お役立ちブログ情報編

IBM Z をご愛顧いただいているお客様、また IBM Z の導入、展開、移行に際しお世話になっておりますビジネスパートナー向けに、このたび、IBM Systems Japan Blog に IBM Z 移行に関するお役 […]

さらに読む