0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Scalable Matrix Extension (SME)Advent Calendar 2024

Day 11

SME日記その10 Streaming SVE modeでCNTWを実行してみる(再考)

Posted at

SME日記その4 Streaming SVE modeでCNTWを実行してみる.に寄せられたコメントを踏まえて,再考してみます.

SMEシリーズ

いただいたコメント

推測を外したお詫び(?)にこの記事の実行結果をちゃんと説明しておくと、まず、Streaming SVE Modeへの切り替えは正しく行われます。そして、Streaming SVE Modeで printf が実行され、その内部で実行される浮動小数点命令がStreaming SVE Modeに対応していないのでSIGILLになります。デバッガーを使えば一発でわかります。

printf の内部でクラッシュするのは、(理由は違いますが)x86-64でアセンブリー言語を書くプログラミングをしているとたまに遭遇するので、懐かしい気分になりますね。

検証プログラムコード

cntw.c
#include <stdint.h>
#include <stdio.h>

void smstart()
{
  asm volatile ("smstart sm");
}

void smstop()
{
  asm volatile ("smstop sm");
}

uint64_t cntw()
{
  uint64_t count;
  asm volatile ("cntw %0"
                : "=r"(count)
               );
  return count;
}

int main()
{
  smstart();
  uint64_t c = cntw();
  smstop();
  printf("%llu\n", c);
}

コンパイル方法

clang -O2 -march=armv9-a+sme -o cntw cntw.c

実行の方法と結果

% ./cntw                                     
16

まとめ

お騒がせしました.確かにprintfをStream SVE Mode の外に追い出せば,実行できました.これは注意しないといけないですね.

そして,デバッガを使うことも大事...

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?