2014年2月23日日曜日

VirtualBox の共有フォルダを自動でマウントする

VirtualBox のゲスト OS が Debian の場合に共有フォルダを自動でマウントしたかったが /etc/fstab の読み込み時には vboxsf がまだ使えないようなので /etc/rc.local で共有フォルダをマウントするようにした。たとえばホスト OS の共有フォルダ share を /mnt/share にマウントするには mount -t vboxsf share /mnt/share を /etc/rc.local に追記すればよい。

参考:
http://blog.goo.ne.jp/j_adversaria/e/9eace0f5c9a27066ce6121fd895d8192

2014年2月7日金曜日

rotate_left_shift(x, 1) - x の最適化

uint32_t x に対して掲題の計算を行いたい。

rotate shift 命令のないプロセッサの場合は

((x << 1) | (x >> 31)) - x

を計算することになり四命令 (<<, |, >>, +) が必要となる。しかしこの演算は

x + (x >> 31)

と等価であるので後者であれば二命令 (>>, +) で実現できて効率が良い。

実際に等価である事は次のようにして確認できる。基本的なアイデアは x を上位 1 bit と下位 31 bit に分けて考えることである。

演算子 | の左右の有効ビットは左が上位 31 bit で右が下位 1 bit であるので重なりがない。よって | を + に置き換えられる。

((x << 1) + (x >> 31)) - x

加法は結合法則と交換法則を持つので外側の括弧を外して演算の順序を入れ替えても良い。

(x << 1) - x + (x >> 31)

真ん中の x を下位 31 bit と上位 1 bit に分ける。

(x << 1) - (x & 0x7FFF FFFF) - (x & 0x8000 0000) + (x >> 31)

前の二項は x の下位 31 bit の二倍から x の下位 31 bit を引いたものなので x の下位 31 bit に等しい。

(x & 0x7FFF FFFF) - (x & 0x8000 0000) + (x >> 31)

最上位ビットのみの数値の引き算は足し算と等しい。

(x & 0x7FFF FFFF) + (x & 0x8000 0000) + (x >> 31)

前の二項は x そのものである。

x + (x >> 31)

2014年2月2日日曜日

Ubuntu/x86 で NEON のコードをクロスコンパイルして実行する

必要な作業は以下の三つ。

  • クロスコンパイル環境を構築する
  • QEMU を入れる
  • NEON のコードを書いて実行する

クロスコンパイル環境を構築する


$ sudo apt-get install g++-arm-linux-gnueabi binutils-arm-linux-gnueabi

QEMU を入れる


$ sudo apt-get install qemu

NEON のコードを書いて実行する


#include <stdio.h>
#include <stdint.h>
#include <arm_neon.h>

int main(int argc, char* argv[])
{
    uint32_t src[] = {0, 1, 2, 3, 4, 5, 6, 7};
    uint32_t dst[4];
    uint32x4_t i0 = vld1q_u32(src);
    uint32x4_t i1 = vld1q_u32(src + 4);
    uint32x4_t i2 = vaddq_u32(i0, i1);
    vst1q_u32(dst, i2);
    for (size_t i = 0; i < sizeof(dst)/sizeof(*dst); ++i) {
        printf("%d ", dst[i]);
    }

    return 0;
}

のようなコードを書いてビルドする。

$ arm-linux-gnueabi-g++ -mfpu=neon -mfloat-abi=softfp test.cpp

QEMU の実行には root 権限が必要なこととターゲットのライブラリパスを指定する必要があることに注意する。
$ sudo qemu-arm -L /usr/arm-linux-gnueabi/ a.out 
4 6 8 10

Blogger に Syntax Highlighter を導入した

http://naichilab.blogspot.jp/2013/04/blogger-syntax-highlighter.html

を参考にした。

2014年1月26日日曜日

GnuCash の UI のフォントを変更する

少し前の版から GnuCash のフォントがあまり綺麗でなく困っていたが

http://d.hatena.ne.jp/tsuyoshi_to/20120331/p1

により解決した。手順は以下のとおり。

GnuCash のインストールディレクトリの gnucash\etc\pango に pango.aliases がなければ作成し以下の記述を追加する。

tahoma = "Meiryo,tahoma,browallia new,mingliu,simhei,gulimche,ms gothic,latha,mangal"
sans = "Meiryo,arial,browallia new,mingliu,simhei,gulimche,ms gothic,latha,mangal"
serif = "Meiryo,times new roman,angsana new,mingliu,simsun,gulimche,ms gothic,latha,mangal"
monospace = "Meiryo,courier new,courier monothai,mingliu,simsun,gulimche,ms gothic,latha,mangal"
 

Windows 7 Ultimate x64 環境で GnuCash 2.6.0 にて動作確認した。