gcc
2013年06月27日
以前にgccでNEONのSIMD命令を生成させる方法という記事を書きましたが、今はかなり状況が変わっています。コンパイラのオートベクタライズの最適化はずっと進化していて、簡単なコンパイルオプションをつけるだけでNEONのSIMD命令を活用することができるようになっています。
2013年02月08日
ビルドにmakeコマンドを使うときにはMakefileにファイルの依存関係を書いておく必要があります。
しかし、開発の途中でインクルードするヘッダファイルが増えてくると、これらの依存関係を手作業で記述するのは面倒です。(そして、これをサボったことでハマることもよくあることです。:)
ここでは、gccの機能を使ってこれを自動化する方法を紹介します。
2012年04月11日
Ubuntu 12.04LTSでのarm-linux-gnueabihf-gccのツールチェインのhfはHard Floatの意味です。
関数呼び出し規約(Calling Convention)が変更されて、double, floatの引数はFPUのレジスタに積んで渡し、戻り値もFPUのレジスタを使うようになっています。今までは、FPUが利用可能だったとしても、Soft Floatと互換性を保つために汎用レジスタで引き渡していました。当然これらは混ぜて使うことはできません。全てのライブラリに影響があります。
簡単なプログラムで実際に生成されるコードを見てみます。
2012年01月24日
昨日、自分で修正したプログラムが意図した通りに動作しなくて少し悩んだのですが、それはunsignedの型の変数に負数を代入して、0と比較している部分が正しく動かなかったためでした。unsignedの型の変数は0より小さくなることはありません。
でも、こんなケースではgccはwarningを出して教えてくれたはず。実はオプションの指定が必要でした。
2010年04月26日
これもまた、ELC(Embedded Linux Conference)でのセッションの紹介です。
ELCのスライドのページのDenys Vlasenkoさんの"Link time dead code and data elimination using GNU toolchain"を見てください。
2010年01月22日
NEON 命令のためのヘッダ、テストケース、ドキュメントなどを生成するために O'Caml プログラムが使われているようです。
Contents of /trunk/gcc/config/arm/neon-gen.ml
Contents of /trunk/gcc/config/arm/neon-schedgen.ml/a>
Contents of /trunk/gcc/config/arm/neon-testgen.ml
Contents of /trunk/gcc/config/arm/neon.ml
Contents of /trunk/gcc/config/arm/neon-docgen.ml
OCaml は言語処理系の開発によく使用される言語なのですが、まさか GCC の内部でも使われている(直接は関わっていないのですが。生成済みのヘッダが trunk に commit されているので、GCC のビルドの際には O'Caml 処理系は必要ありません。)とは思ってなかったので意外でした。(佐藤先輩に教えていただきました。)
参考リンク:
Modern Compiler Implementation in ML
有名なタイガーブックです。ML の他にも、Java と C による同内容の本が出ていて、Java が一番いろいろなところで参考文献として挙げられている気がします。
Fail-Safe C: 安全なC言語コンパイラ
O'Caml で書かれた C コンパイラです。
CIL (C Intermediate Language)
C のソースコードを解析して、解析が容易な形 (中間言語) に変換する O'Caml のライブラリです。ANSI C だけではなく、GNU 拡張や MS 拡張 (の一部) までサポートしているそうです。ソースコード解析系の研究で、比較的よく使われているような印象です。
2009年09月10日
この記事ではgcc 4.4.0を使用しています。もっと新しいgccの場合はこちら。
2013年06月27日 ARMのNEONのSIMD命令をgccのオートベクタライズの最適化で使う方法
AndroidのSDKのgoldfishのCPUをcortex-A8に置き換えてNEONのSIMD命令を試す(その2) のときにはarm_neon.hに定義されているintrinsicsを使ってNEONのSIMD命令を生成させました。この方法だとNEONの命令について詳細を知っていなければなりませんし、なによりもそのプログラムがNEONに依存したものになってしまいます。
今回はコンパイラの最適化の機能を使ってNEONのSIMD命令を生成させるコツを紹介します。
2009年08月28日
デバッガの肝の一つとして、ELF バイナリに入ってるデバッグ情報の解析があるのですが、そこらへんはほぼ全て社長と佐藤さんが行ってきたそうです。
私は入社してから今まで、ほぼずっとシミュレータ周りの開発をしてきましたので、どちらかというと PARTNER のコア部分とは少し離れた位置にいます。
しかし、デバッガベンダーに勤めていながら、全くデバッグ情報の解析について知らないというわけにもいかないので、少しずつ勉強していく過程をメモしていこうかと思います。
続きを読む
2009年08月14日
ARM11のCP15にパフォーマンスモニタがあり、そのサイクルカウンタを利用して簡単にプログラムの2点間の時間を計測することができます。
計測用の関数を手軽に使えるようにソースコードを一つのヘッダファイルにまとめてみました。
ある関数を複数の方法で実装して、どちらが速いかを比較する場合に便利です。