ようやくArmのScalable Matrix Extension (SME)を試すのveclen.c
相当のプログラムを実行できるようになったので報告します.
SMEシリーズ
- Apple Silicon M4はM3シリーズからScalable Matrix Extension (SME)命令などが足されている
- SME日記その1: Apple Silicon M4に搭載されたScalable Matrix Extension(SME)のベクトル長(SVL)を取得する
- SME日記その2: Apple Silicon M4にはCVTW命令は備わっていない?
- SME日記その3: Apple Silicon M4にどの命令が実装されているかをsysctl hwの実行結果とドキュメントから推測する
- SME日記その4 Streaming SVE modeでCNTWを実行してみる.
- SME日記その5 Streaming SVE modeでCNTWを実行してみる Part 2
プログラムコード
veclen.c
#include <stdint.h>
#include <stdio.h>
#include <arm_sme.h>
void streaming_fn(void)
{
uint64_t cntw, cntsw;
asm volatile ("smstart sm");
cntw = svcntw();
cntsw = svcntsw();
asm volatile ("smstop sm");
printf("Streaming mode: svcntw() = %llu, svcntsw() = %llu\n", cntw, cntsw);
}
int main(void)
{
streaming_fn();
}
ポイントとしては,次の点です.
-
svcntw()
とsvcntsw()
についてはエラーにならない -
__arm_locally_streaming
と__arm_has_sme()
はリンクエラーになる -
CNTW
という命令は存在するが,CNTSW
なる命令は存在しない -
svcntsw()
でどんなアセンブリコードを生成するのかは,調べても不明
コンパイル方法
clang -O2 -march=armv9-a+sme -o veclen veclen.c
実行の方法と結果
% ./veclen
Streaming mode: svcntw() = 16, svcntsw() = 16
ここまで,長かった!