![**タイトル:**
*ARM SMEを解明し、一般行列積(GEMM)を最適化する*
---
### 1. 概要
- **ARM SME (Scalable Matrix Extension)** は、SIMD/NEON ベースの命令セットで、行列演算を効率的に実行します。
- 深層学習推論、科学計算、リアルタイム信号処理など、高性能ワークロード向けに設計されています。
### 2. 主な機能
| 機能 | 説明 |
|------|------|
| **ベクタ幅** | 128 bit(8×16 bit)または256 bit(4×64 bit)のレジスタ。 |
| **行列ロード/ストア** | `SME_LDM`, `SME_STM` – 行列全体を一度に読み書き。 |
| **積加算** | `SME_MADDX` – オプションでスケーリング付きの乗算―累積演算。 |
| **並列性** | 4×または8×データレーン;FMA(複合乗算―加算)により命令数を削減。 |
### 3. GEMM(一般行列積)の最適化
1. **タイル分割**
- 入力行列をSMEレジスタに収まるサブブロックへ分割。
2. **`SME_MADDX` を内側ループで使用**
- 明示的な乗算―加算ループを単一のSIMD命令に置き換える。
3. **データ再利用を活かす**
- 各タイルは1回だけロードし、必要な全ての積に対してレジスタ内で保持。
4. **ソフトウェアパイプライン化**
- 次のタイルのロード/ストアと現在計算を重ね合わせる。
### 4. サンプルコード(C風擬似コード)
```c
for (int i = 0; i < M; i += TILE_H)
for (int j = 0; j < N; j += TILE_W)
for (int k = 0; k < K; k += TILE_D) {
// SMEレジスタへAとBのタイルをロード
vecA = SME_LDM(A + i*K + k, TILE_H*TILE_D);
vecB = SME_LDM(B + k*N + j, TILE_D*TILE_W);
// サブ積を乗算―累積
C[i][j] += SME_MADDX(vecA, vecB);
}
```
### 5. パフォーマンスのヒント
- **アラインメント**:行列は16バイト境界に揃えて、ロード/ストアを最適化。
- **ループアンローリング**:内側ループを2〜4倍で展開し、分岐オーバーヘッドを削減。
- **プリフェッチ**:`SME_PF` 命令を使い、次のタイルを先にキャッシュへ持ってくる。
### 6. 結論
ARM SMEは低レイテンシで強力な行列演算機能を提供します。タイル化と命令選択を丁寧に行うことで、ARM Cortex‑Aプロセッサ上のGEMMワークロードを劇的に高速化できます。](/_next/image?url=%2Fscreenshots%2F2026-02-01%2F1769904003964.webp&w=3840&q=75)
2026/02/01 5:05
**タイトル:** *ARM SMEを解明し、一般行列積(GEMM)を最適化する* --- ### 1. 概要 - **ARM SME (Scalable Matrix Extension)** は、SIMD/NEON ベースの命令セットで、行列演算を効率的に実行します。 - 深層学習推論、科学計算、リアルタイム信号処理など、高性能ワークロード向けに設計されています。 ### 2. 主な機能 | 機能 | 説明 | |------|------| | **ベクタ幅** | 128 bit(8×16 bit)または256 bit(4×64 bit)のレジスタ。 | | **行列ロード/ストア** | `SME_LDM`, `SME_STM` – 行列全体を一度に読み書き。 | | **積加算** | `SME_MADDX` – オプションでスケーリング付きの乗算―累積演算。 | | **並列性** | 4×または8×データレーン;FMA(複合乗算―加算)により命令数を削減。 | ### 3. GEMM(一般行列積)の最適化 1. **タイル分割** - 入力行列をSMEレジスタに収まるサブブロックへ分割。 2. **`SME_MADDX` を内側ループで使用** - 明示的な乗算―加算ループを単一のSIMD命令に置き換える。 3. **データ再利用を活かす** - 各タイルは1回だけロードし、必要な全ての積に対してレジスタ内で保持。 4. **ソフトウェアパイプライン化** - 次のタイルのロード/ストアと現在計算を重ね合わせる。 ### 4. サンプルコード(C風擬似コード) ```c for (int i = 0; i < M; i += TILE_H) for (int j = 0; j < N; j += TILE_W) for (int k = 0; k < K; k += TILE_D) { // SMEレジスタへAとBのタイルをロード vecA = SME_LDM(A + i*K + k, TILE_H*TILE_D); vecB = SME_LDM(B + k*N + j, TILE_D*TILE_W); // サブ積を乗算―累積 C[i][j] += SME_MADDX(vecA, vecB); } ``` ### 5. パフォーマンスのヒント - **アラインメント**:行列は16バイト境界に揃えて、ロード/ストアを最適化。 - **ループアンローリング**:内側ループを2〜4倍で展開し、分岐オーバーヘッドを削減。 - **プリフェッチ**:`SME_PF` 命令を使い、次のタイルを先にキャッシュへ持ってくる。 ### 6. 結論 ARM SMEは低レイテンシで強力な行列演算機能を提供します。タイル化と命令選択を丁寧に行うことで、ARM Cortex‑Aプロセッサ上のGEMMワークロードを劇的に高速化できます。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
概要:
MpGEMMは、ARMのスケーラブル行列拡張(SME)を活用して複数精度で一般行列乗算(GEMM)を高速化するオープンソースライブラリです。著者らはSMEを体系的にプロファイリングし、キャッシュ意識型パーティショニング、オンザフライのデータパッキングと転置、およびマルチベクトルロードと全タイルレジスタを活用したマイクロカーネルという設計ガイドラインを導出しました。MpGEMMはこれらの指針に従って実装されています。Apple M4 Pro上でDeepSeekおよびLLaMAから得た実際のワークロードを用いたベンチマークでは、ベンダー最適化されたApple Accelerateライブラリより1.23倍速く、大きな行列に対しては他のオープンソース代替品を大幅に上回る性能が確認されました。GEMMは高性能計算とディープラーニングの基盤でありながら、既存ライブラリではSMEの潜在能力が十分に活用されていませんでした。MpGEMMはこのギャップを埋め、ARMデバイス上でより高速な行列演算を実現します。著者らは、SME機能の進化とともにAIやHPCワークロードでの採用が拡大し、ユーザーの推論遅延を削減しつつ、新たなARM拡張を完全に活用したハードウェア意識型オープンソースソリューションを促進すると期待しています。
本文
概要
一般行列積(GEMM)は高性能計算とディープラーニングにおける重要な核となります。ARM の Scalable Matrix Extension(SME)などの最新アーキテクチャは行列演算専用ハードウェアを導入していますが、既存の線形代数ライブラリは特に大規模行列でその潜在能力を十分に活かせていません。本稿では、SME の主要なアーキテクチャ機能を活用し、複数の精度にわたって GEMM を最適化するオープンソースライブラリ MpGEMM を紹介します。
SME の体系的な特性評価から導き出した最適化ガイドラインを設計に反映させ、キャッシュ意識型分割、オンザフライ転置付き効率的データパッキング、およびマルチベクトルロードと利用可能な全タイルレジスタを活用する専用マイクロカーネルを採用しています。Apple M4 Pro 上で DeepSeek と LLaMA の実際のワークロードを評価した結果、MpGEMM はベンダー最適化済み Apple Accelerate ライブラリに対して平均 1.23 倍の速度向上を達成し、他のオープンソース代替品よりも大幅に優れた性能を示しました。