前回「表引き」命令を練習した後も練習すべき「SIMDのデータ処理命令は尽きまじ」などと思っておったお惚け老人です。しかしマニュアルをよく見てみれば、残り2つのカテゴリのうち一つは ARMv8.3、もう一つは ARMv8.0だけれども「optional」でした。ラズパイ4機で該当の「optional」使えるのか?
※「ぐだぐだ低レベル プログラミング」投稿順indexはこちら
※実機動作確認には以下を使用しております。
-
- Raspberry Pi 4 model B、Cortex-A72コア(ARMv8-A)
- Raspberry Pi OS (64bit) bullseye
- gcc (Debian 10.2.1-6) 10.2.1 20210110
ARMv8もいろいろレベルがあり、Arm Cortex-A72はARMv8の中でもベーシックな(命令数の少ない)ARMv8p0です。
※A64の最新のマニュアルは以下でダウンロード可能です。
Arm Architecture Reference Manual for A-profile architecture
SIMDデータ処理命令カテゴリ、残りの2つ
「データ処理命令」のみを練習するスタンスで取り組んできております年寄です(システム命令を素に実機上で練習するのはメンドイからね。手抜き。)長らく練習を重ねてまいりましたA64のSIMDデータ処理命令も残りのカテゴリは以下の2つとなりました。
-
- SIMD complex number arithmetic
- The Cryptographic Extension
しかし、マニュアルをば見やれば、複素数を扱うための “SIMD complex number arithmetic” は ARMv8.3以降の命令群でした。あちゃ~、ラズパイ4機(v8.0)では練習不可ね。
一方、AES暗号とSHA1、SHA256ハッシュ関数を計算するのに使える ”The Cryptographic Extension” の方は ARMv8.0 でした。しかし老眼の目でよくみたらば ARMv8.0の「前に optional 」と書いてあります。おっと必修科目じゃないのね。
こういう optional なときにlinux機でお役立ちなのが、/proc/cpuinfo です。ターゲット機上でcatした結果が以下に(コア4個あるので以下のような表示が4回繰り返されます。)
あれれ、もしかして AES とか SHA とかのオプションは実装されてない?
末尾の赤い線のところ、もしサポートされていれば aes とか sha とか書かれている筈なのだけれども。
そういえば、本シリーズの過去回で書かれているケースがありましたぜ。遥か昔の以下の回です。
ぐだぐだ低レベルプログラミング(3) Arm、32ビット?64ビット?
上記回の中で、Jetson nano機 (コアは Arm Cortex A57だけれども)で /proc/cpuinfoを確認してます。その時の結果を引用するとこんな感じね。
$ cat /proc/cpuinfo processor : 0 model name : ARMv8 Processor rev 1 (v8l) BogoMIPS : 38.40 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x1 CPU part : 0xd07 CPU revision : 1 ~以下略~
aes、sha1、sha2が並んでいるじゃありませんか。なお、sha2はsha256と同じっす。
ほえほえ~、同じ ARMv8だけれどもラズパイ4機にはaes, shaは無し、Jetson nanoにはありと。
どうしたもんかな~。ときどき思い出したように動かす Jetson nanoを何度目かの復活させるか?メンドイな、また次回よな。。。