2009年11月

2009年11月27日

主にセマフォの実装などに使用されてきた SWP/SWPB 命令は、もともと ARM v6 アーキテクチャ以降では廃止予定扱い(deprecated) になっていたのですが、ついに v7 からは、デフォルトで未定義命令扱いになり、実行すると例外が飛ぶようになったようです。

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204gj/Chdbbbai.html

例えば v7 アーキテクチャ向けに Linux や root filesystem をビルドする時、コンパイラのターゲットアーキテクチャオプションが v7 になっていないと、これが生成されてしまい、システムの奥底で突然謎の例外が発生してクラッシュしたりという、わかりにくい不具合の原因にも成り得るので注意が必要です。

より正確には、v7 でも完全に廃止されたわけではないようです。ARM Architecture Reference Manual (ARMARM) v7-A and v7-R を紐解いてみると、ARM v7-A の場合は System Control Register (SCTLR) というレジスタが存在し、bit[10] が SWP/SWPB Enable bit ということで、これが 1 の場合は実行が可能なようです。(reset 時は 0 。)

v6 以降では、新しく追加された LDREX/STREX を使うことが推奨されています。

それにしても、x86 に慣れた身からすると、プロセッサが後方互換性を捨てるなんていうのはありえない気がします。しかも完全に廃止したわけではなく、回路は残していて、実行も一応は可能というのも不思議です。

この変更は multiprocessing 向け対応の 1 つなのだそうです。ARM はこれからますますマルチコアやマルチプロセッサに対してアグレッシブに取り組んでいくぞという意思表示なのでしょうか。

2009年11月25日

前回の記事に対して、浜地さんからD が若いかどうかは微妙なラインという指摘をいただきました。

言われてみればその通りです。最近(?) Ruby on Rails などで話題になっている Ruby も、開発が始まったのは 1993 年からということで、実は Java (1996) よりも歴史があったりします。

# Java の前身の Oak は 1990 年から開発が始まっていたりと、また微妙ですが。

というわけで、DWARF 3 の対応言語の登場時期を、ざっくりと並べてみました。

続きを読む

2009年11月19日

まつもとゆきひろさんによって開発が開始されたオブジェクト指向スクリプト言語Rubyを初めとして、趣味/仕事を問わず、新しいプログラミング言語を設計/開発したいという需要は昔から一定数存在するようです。

言語処理系に関する本は昔から多数出版されてきていて、去年と今年、日本語の本だけでも10冊以上は出ているのではないかと思います。今年出版された日本語のものだけでも、5冊以上あります。

コンパイラ - 原理・技法・ツール (第二版)
プログラミング言語を作る
ふつうのコンパイラをつくろう 言語処理系をつくりながら学ぶコンパイルと実行環境の仕組み
※ 以下の3冊は、私は未読です。amazonの検索でヒットしたもの。
MLによる最新コンパイラ構成技法
やさしいインタープリタの作り方入門―オリジナルなインタープリタを作成する
やさしいコンパイラの作り方入門―オリジナルなコンパイラを作成する

さらに、11/20 に、コンパイラの構成と最適化の第二版も出ます。

インタプリタやほとんど最適化しないレベルの言語処理系ならば問題にはならないのかもしれませんが、プログラムを高速に実行しようと思うと、途中に変換や最適化が必ず入ってくるので、元のソースコードと生成物の乖離が進みます。効率的に最適化されたプログラムをデバッグするためには、デバッグ情報が不可欠です。

しかし、ソースコードの解釈方法や、機械語の生成方法については多数の文献が存在するわりには、デバッグ情報の生成について触れている本はあまり (私が知る限り、一冊も) 聞きません。デバッガベンダーとしては少し悲しいところです。

翻ってデバッグ情報 (DWARF3) の仕様を見てみると、以下のような言語への対応が仕様に入っているようです。ほとんどが伝統的な言語とその後継ですが、D 言語が入っているというのが個人的には意外でした。(D は 2007 年にDigital Mars 社からバージョン 1.0 のコンパイラが出たばかりの、かなり若い言語です。あと Unified Parallel C という言語は初耳です。)

続きを読む

2009年11月17日

私はちょうど去年の ET 2008 の最終日、2008/11/21 に KMC に入社したので、今回が始めての ET です。

いちおう初出社の日 (既にその前から普通に来ていて、いろいろ準備してましたが) なのに、「会社来ても ET で誰もいないと思うから、休みにしても良いよ。それとも ET 来る ?」と言われた記憶があります (笑) さすがにまだ入社前でしたので、前回はおとなしく京都で留守番してました。

北海道大学の博士課程を中退して KMC に入社したのですが、札幌時代に OSC Hokkaido で知り合い、いろいろとお世話になった古賀さんの会社、サムシングプレシャス様が弊社の隣のブースということで、これも何かの縁でしょうか。久しぶりの再会を楽しみにしていたりもします。

思えばあれからもう一年経ったのだなと。あっという間でした。たくさんいろいろなことを勉強させていただきました。今回の ET でも、いろいろと得るものが多いのだろうと期待しています。

ET 2009 に参加されるみなさま、何卒よろしくお願いします。

以下、京都マイクロコンピュータ出展イベント/展示会より転載です。
続きを読む

2009年11月13日

多くの CPU の命令セットでは、0 との比較を特別扱いしています。
そのため、ループを書く際には、なるべく 0 と比較するように書いた方が速いので良い、という主張をたまに聞きます。

しかし、一般的な for 文のイディオム for (i = 0; i < N; i++) を崩してまで、0 と比較するように書く意味が、本当にあるのでしょうか ? それぐらいは、現代のコンパイラならば勝手に最適化してくれそうな気もします。

というわけで、x86、ARM、SH、MIPS、PPC で検証してみました。

x86 は、手元の MinGW の gcc 4.4.0 です。
それ以外の CPU は、弊社の exeGCC 4 (GCC 4.3.3 ベース) を使用しました。最適化レベルは、全て一般的な -O2 です。(FPU は無関係だと思われるので、全て disable モードでコンパイルしています。)

続きを読む

2009年11月11日

これまで紹介してきたように、exeGCCのVLINK機能を使うと、ターゲット上で動くプログラムをまるでPARTNER-Jetの拡張機能のような雰囲気で動かすことができます。

今回はフラッシュメモリの書き込みプログラムの事例を紹介します。
続きを読む

2009年11月09日

今月30日に代々木で開催されるAndroid Bazaar and Conference 2009 Fallで「GOLDFISHをいじってみよう」というタイトルで少し話をさせていただきます。

このブログに書いたgoldfish関連のことを話します。よろしかったらご参加ください。

(2009.11.18 追記)

先日Androidのマスターのソースにeclairブランチがマージされました。予定を変更して新しく追加になったDalvik VMのJITの実験版やWebkitのV8についてGOLDFISHでいじってみたことを話そうと思います。

こちらのページに発表資料を置きました。

関連

Android SDKのgoldfishのCPUをarm1136に置き換える方法

AndroidのSDKのgoldfishのCPUをcortex-A8に置き換えてNEONのSIMD命令を試す

AndroidのDalvikVMのインタープリタをFPU命令で少し高速化する

AndroidのユーザーランドをFPUを有効にしてリビルドする



2009年11月05日

健康診断の時、尿酸値が非常に高いという指摘をされたという話を以前書きました。
こちらは、当然現在も治療を継続中です。ザイロリックという尿酸の生成を抑制する薬を毎日 1 錠、そして毎日 1 時間程度の運動(ウォーキングやランニング) を続けています。人間ドックの時は 9.6 あった尿酸値も、今では 7.2 にまで下がりました。

(それでもまだ危険水域ですが。ちなみにこの検査結果は 2 ヶ月前のものなので、今ではもっと下がってるかもしれません。薬を一回に 3 ヶ月分もらえるので、病院に行くのは 3 ヶ月に一度なもので。)

実はそのとき、視神経乳頭陥凹という耳慣れない指摘もされていたのです。これは、緑内障の典型的な症状なのだそうです。
(まだ 20 代なのに、若い人には珍しい病気を二つも…)

続きを読む

記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード