ようやくコンパイラにNEONのクワッドワードのレジスタを使うコードを吐き出してもらえるようになったので、わずかにハードルを上げてみたいと思います。当初から予定通りで、内積計算ですね。ベクトルの要素毎に単純な掛け算をしているのと比べると、それらの和をとっていかなければならないので、計算はちょっとだけ複雑。それに何と言っても結果はスカラー。コンパイラはどのように料理してくれるのでしょうか。
ぐだぐだ低レベルプログラミング(18) Arm NEONをつかってみる3
続けざまにぐだぐだです。前回、なんとかコンパイラがクワッドワード(128ビット)幅のレジスタを使ったNeon命令を吐き出すようになりましたが、何か思っていたより複雑なコードになっていました。もしやと思ってよく考えてみたら、それは私の書いたコードがイケないことに気付きました。それでもコンパイラ様は必死に注文にこたえるべく、コード生成をおこなってくれた結果、なにやら複雑なコードが生成されてしまったのでした。自分の書いたコードをコンパイラ様が素直に解釈できるようにちょいと直せば良かったのでした。それでようやく、クワッドワードかつシンプルなコードが出力されるようになりました。
ぐだぐだ低レベルプログラミング(17) Arm NEONを使ってみる2
ぐだぐだです。前回は、NEONを使ってみると書いておりましたが、今日見直してみれば、本当の意味のNEONじゃありませんでした。すみません。最近では、ArmのVFP(Vector Floating Point. 一応「ベクトル」計算機だったのね)は、NEONお供というか補完用の命令セットでなっているみたいです。NEONが1レジスタに複数の要素を入れて同時に処理できるのに比べるとVFPはパイプライン方式のベクトル化(昔はこれが本道だったような気もしますが)。1レジスタには1要素であります。こちらの命令が生成されていた。ま、今じゃNEONの一部と言えないこともないですが、狙いは1レジスタに複数要素のSIMDなので違う。狙い通りのコードを生成するにはどうするの?
ぐだぐだ低レベルプログラミング(16) Arm NEONを使ってみる1
鳥なき里のマイコン屋(71) Kendryte K210、RISC-V搭載AIチップ
Literature Watch Returns(9) 「世界のAIマイコン」特集、トラ技2019-11月号
店頭にならんで直ぐに購入させていただいたのですが、しばらく「寝かせて」しまいましたスミマセン、トラ技2019年11月号であります。特集「世界のAIマイコン」、しかし、その上の青文字を見逃してはいけません、64bit/400MHz RISC-Vです。世界のと言いつつ、その実態はK210(RISC-Vコア)の特集といって良いでしょう(そのくせRISC-Vそのものは前面に出てこない)。愛用のJetson NanoもRaspberry Piなども登場はしますがぶっちゃけ比較相手。しかし、このチップ、物欲をそそります。読めばボードが欲しくなる、そしてお手頃価格!そういえば前回も特集読んでJetson Nanoポチりました。どうしたものでしょ。
“Literature Watch Returns(9) 「世界のAIマイコン」特集、トラ技2019-11月号” の続きを読む
トホホな疑問(13) Python、lxml、デフォルト名前空間とXPath
ぐだぐだ低レベルプログラミング(15) 変数アクセスのコードを眺めてみれば3
前回までで大域変数について、単純な変数、初期値のあるもの無いもの、配列、構造体とコンパイラの吐き出したメモリアクセスのコードを一通り調べてみました。今回は、関数の中のローカル変数、引数について調べてみます。前回、前々回と同じく、環境はRaspberry Pi 3 model B+上のRaspbian OS、コンパイラはgcc 8.3.0 です。なお、生成されたアセンブリ言語コードの読みやすさを優先に、最適化オフ、デバッグ情報ありです。 “ぐだぐだ低レベルプログラミング(15) 変数アクセスのコードを眺めてみれば3” の続きを読む
土木でエレキ(21) 台風19号、橋梁崩落、損傷
今も必死で復旧作業に取り組んでいらっしゃる皆さま方、非常にお疲れのことと思います。くれぐれも事故の無いようお気をつけください。そして、あの大雨の夜の闇の中で各地で悲劇が起きていたことがようやく判明してきたようです。未だ全貌は分かりませんが、亡くなられた方が増え続けています。痛ましいことであります。
あまりに多数の河川の多数の箇所で決壊が起きたようです。決壊にいたらないまでも越水したところはさらに多いようです。今も水が引いていないし、まずは堤防の復旧と排水を急がないとならない状況だと思います。しかし、ニュースを見ると、橋梁の流出、落橋、損傷もまた多数。橋の復旧は堤防の後でしょうが、取り急ぎ場所だけでも書きとめておく必要を覚えました。ニュースになったような鉄道橋、道路橋あたりを中心として、後日の控えとして列挙しておきます。あまり増えてほしくはないリストですが、何か判明すればまた戻ってきて書き込みたいと思います。(追記10/20)
ぐだぐだ低レベルプログラミング(14) 変数アクセスのコードを眺めてみれば2
前回は、Cコンパイラの吐き出した単純な大域変数へのメモリアクセスのコードを眺めてみました。今回は、大域変数でも構造体と配列へのアクセスを見てみます。今回も環境は、Raspberry Pi 3 model B+上のRaspbian OS、コンパイラはgcc 8.3.0 です。なお、生成されたアセンブリ言語コードの読みやすさを優先に、最適化オフ、デバッグ情報ありです。
ぐだぐだ低レベルプログラミング(13) 変数アクセスのコードを眺めてみれば
ぐだぐだ低レベルプログラミング(12) オブジェクトファイルその2
前回は、オブジェクトファイルと言いながら、絶対番地のHEXファイルなど、ついついFlashライタでもなければ使わないようなものにフォーカスしてしまいました。今回は、心を入れ替えて(どう?)、本道のリンク可能なオブジェクトファイルを調べてみたいと思います。コンパイル、アセンブルした後のオブジェクトファイルとリンクした後の実行可能なオブジェクトファイル、例によってRaspbian上のArmの32ビットコードで見てみます。