VORTEXM4: SYRK/SYR2K diagonal blocks are expensive with GEMM_UNROLL_MN 64
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 43/100
- issue の種類
- バグ
- 明瞭さ
- おおむね明確
- 活発さ
- 活発
- 技術スタック
- c
- 領域
- backend, performance
調査の方向性
Read driver/level3/syrk_kernel.c and profile SSYRK at n = 256 to confirm the diagonal block and zero-fill costs. Compare the listed options, including the sgemm_otcopy path for trans = T; the issue does not choose an approach. Done means reducing the diagonal-block overhead and checking performance across the reported sizes and transpose modes.
索引モデルが issue の本文から書いたものです。
説明
On VORTEXM4 (GEMM_UNROLL_M 64 since #6074), the generic SYRK/SYR2K driver spends much time on the diagonal blocks. driver/level3/syrk_kernel.c computes each GEMM_UNROLL_MN x GEMM_UNROLL_MN diagonal block (64 x 64 here) into a temporary buffer zeroed with GEMM_BETA and then adds one triangle into C. A sampling profile of SSYRK at n = 256, one thread, on an M4 Pro shows ssyrk_kernel_L plus sgemm_beta zero-fill at about 20% of the time, against under 10% for the SME2 compute (the rest is packing, see #6146).
Measured against Accelerate on the same machine (one thread): SSYRK 0.18x / 0.36x / 0.73x at n = 64 / 256 / 1024, 0.75-0.93x at 4096. trans = T is slower than trans = N (1074 vs 1370 GFLOPS at n = 1024).
Options:
- compute the diagonal block directly into C with a masked store (the SME2 kernels can predicate rows and columns), which needs a per-target hook in the driver;
- a smaller diagonal block for targets with a large GEMM_UNROLL_MN;
- check why the trans = T path is slower (packing of A^T with
sgemm_otcopy).
- 主要言語
- C
- スター
- 7.6k
- フォーク
- 1.7k
- 平均マージ
- 1日 18時間
- マージ済み PR(30日)
- 46
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
OpenMathLib/OpenBLAS のほかの issue
-
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
OpenMathLib/OpenBLAS#6152 ·
メンテナーはふだん 1 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 28/100
OpenMathLib/OpenBLAS#6151 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
VORTEXM4: s2_usable() runs RDSVL before the SME2 check (SIGILL without SME)対応中かも @tesch1 が 1 日前に担当しました。 オープン
難易度 3/5 1〜2日 初心者へのやさしさ 25/100
OpenMathLib/OpenBLAS#6150 ·
メンテナーはふだん 1 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
OpenMathLib/OpenBLAS#6149 ·
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 52/100
OpenMathLib/OpenBLAS#6147 ·
メンテナーはふだん 1 日以内に返信
OpenMathLib/OpenBLAS の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
polhenarejos/pico-fido#302 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 67/100
espressif/esp-vision#16 · コメント 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
libsdl-org/SDL#16577 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
メンテナーはふだん 1 日以内に返信
-
halt_error adds a trailing newline for non-string input, contrary to the manual対応中かも @Huang-404-Q が今日担当しました。 オープン
難易度 1/5 1〜3時間 初心者へのやさしさ 88/100
メンテナーはふだん 2 日以内に返信