Apple Silicon M4にはScalable Matrix Extension(SME),すなわち可変長行列演算拡張命令が備わっています.これを探求してみたいと思います.
下記記事を試そうとしたのですが,
下記記事にもあるように,サンプルプログラムがエラーになって動作しませんでした.
なので,インラインアセンブラで書いてみました.
まず,RDSVL命令を試します.
Read multiple of Streaming SVE vector register size to scalar register
ストリーミングSVEベクトルレジスタサイズの倍数をスカラーレジスタに読み取る
さっそく書いてみました.
rdsvl.c
#include <stdint.h>
#include <stdio.h>
uint64_t rdsvl8()
{
uint64_t len;
asm volatile ("rdsvl %0, 8"
: "=r"(len)
);
return len;
}
int main()
{
printf("%llu\n", rdsvl8());
}
コンパイル方法は次のとおりです.
clang -march=armv9-a+sme -o rdsvl rdsvl.c
実行結果は次のとおりです.
% ./rdsvl
512
すなわち,512ビット(64バイト)のレジスタ長を持っていることがわかりました.