programming

gcc で openmp

gcc も 4.1 系から OpenMP に対応するみたい.使い方は,コンパイル時に"-fopenmp"を付けてコンパイルし,libgomp をリンクするだけ.とりあえず gcc-4.1.0 のprerelease版では動作した.

Linux の共有ライブラリを作るとき PIC でコンパイルするのはなぜか

Linux の共有ライブラリを作るとき PIC でコンパイルするのはなぜか - bkブログ より.gcc で -fPIC を指定するとposition independent code(PIC)なコードが出力される.では,どれぐらいオーバヘッドがあるのかという点に関してベンチマークの結果を交えて…

ruby で svg を作成(その1)

初めての ruby-svg http://ruby-svg.sourceforge.jp/ をつかって,ruby で svg を吐き出すスクリプトを作ったので,メモ.とりあえずこんな感じ. require 'svg/svg'; svg = SVG.new('4in 4in', '0 0 640 480') st = SVG::Style.new() {self.style.stroke = …

icc で openmp

ポイント #pragma { } でブロックを指定する ブロック内が複数のスレッドで並列処理される プロセスは,マスタスレッドと複数のスレーブスレッドから構成される ブロックの出口で スレーブスレッド間で barrier 同期が掛る (nowaitを指定すると, barrier同…

Profile feedback in GCC

http://www.radiumsoftware.com/0512.html#051221

ついにgccがiccを超えたかもしれない.

まだ正式版ではないけれど,かなり安定してきたらしいgcc4.1.変更点一覧*1によると,とにかく最適化が改善された模様.そこで,とりあえず以下のようなコードをつかって,最適化(特にauto-vectorization)ぐあいを確認してみた. #define SZ 320*240*10 vo…

鼻から悪魔

久しぶりに鼻から悪魔なバグに遭遇してしまった.鼻から悪魔(nasal demons)に関しては以下のURLが詳しい. http://catb.org/~esr/jargon/html/N/nasal-demons.html http://www.st.rim.or.jp/~phinloda/cqa/cqa7.html引用すると When the compiler encounters…

ffmpeg で連番画像から 動画を作成

/tmp/out000001.ppm,/tmp/out000002.ppm と続く連番画像列から,動画を作成する方法 ffmpeg -i /tmp/out%06d.ppm -aspect 4:3 -f avi -vcodec mpeg4 -vb 5000k -r 10 test.avi"-r" でフレームレートを指定できる.上記例だと 秒10コマの動画が出来上がる.

Linus たのしそう

linux v2.6.15-rc5 の changelog より引用 commit 436b0f76f2cee6617f27a649637766628909dd5d Author: Linus Torvalds Date: Sat Dec 3 21:10:42 2005 -0800 Linux v2.6.15-rc5 Hey, for no other reason than the fact that I'll be off-line for a week. O…

elisp の構文

catch throw elispは関数型言語だけど,やっぱり手続き的な書き方もできるみたい. (catch 'loop (throw 'loop 返り値) ) save-excursion 最初に point とか mark を保存して, progn と同様にシーケンシャルに処理をおこなう.処理終了後は保存して…

emacs の Wanderlust で ssh ポートフォワードを使う.

mew だと,デフォルトで ssh のポートフォワードに対応できているが, wanderlust は対応していないっぽい.むむ.というわけで elisp の勉強がてら,mewの実装を参考に wanderlust 用のものを 作ってみた.まずmewのソースを読む. mew のsshによるポートフ…

distcc と ccache を混ぜる

distcc と ccache を使えるように設定しておいて,あとは export CCACHE_PREFIX=/usr/bin/distccとするだけ.

distcc を ssh経由で使う.

distcc を ssh 経由で利用する方法.distccd が ssh 経由で起動されるため,わざわざデーモンを起動する必要がない. $ export DISTCC_HOSTS="localhost @pc01 @pc02 @pc03" $ export DISTCC_DIR="/tmp/.distcc_dir"あとは CC や CXX を distcc に変えるだけ…

svn で$Id:$などを展開

http://developer.momonga-linux.org/~zaki/svnfaq-mo.html $ svn propset svn:keywords Id hoge.c

gnuplot で 3次元ベクトル場を描画

set arrow from x1,y1,z1 to x2,y2,z2というファイルを用意し load コマンドで読み込んだ状態で splot を実行するとベクトル場が描画できる.

emacs でコメント行を整列

コメント文の先頭カラムを揃える方法 C-x ; でカラムを指定し,M-; で整列する.

makefile で basename, dirname を使いたい

つぎのように書けば良い. $(@D) dirname($@) $(@F) basename($@)

makefile の自動変数

makeで使える自動変数のメモ. $@ The file name of the target $ The name of the first prerequisite libhoge.a: hoge.o huga.o ar curs $@ $<は libhoge.a: hoge.o huga.o ar curs libhoge.a hoge.o huga.oと展開される.

デバッグ情報付きで debian のパッケージを作る.

行儀が良いパッケージなら環境変数 DEB_BUILD_OPTIONS で nostrip を指定して dpkg-buildpackge すれば良いみたい. $ export DEB_BUILD_OPTIONS="nostrip" $ dpkg-buildpackge -us -uc -rfakeroot

トランザクション

「トランザクションとは,不可分な一連の操作をまとめた単位」トランザクションって何?と聞かれたら,ここまでは,さくっと答えられないとエンジニアとして問題あり.で,さらに「トランザクションは, ACID性と呼ばれる四つの性質を満たす必要がある.」な…

スピンロックから始めるLinuxカーネル入門

http://hira.main.jp/wiki/pukiwiki.php?%A4%E8%A4%A6%A4%B3%A4%BD

C でバックトレース表示

普通のやつらの下を行け: C でバックトレース表示 - bkブログより glibc に含まれる backtrace() と backtrace_symbols_fd() を使うと実行中の C プログラムのバックトレースを表示できます とのこと.デバッグ用マクロとかで使うと便利そう.ちなみに,シグ…

icc の最適化を部分的にoff

iccの最適化のバグを見つけてしまった.boost/random.hpp を使った乱数生成処理を"-O2"とか"-O3"を付けてコンパイルすると,乱数の値が常にゼロになってしまう."-O0"ならば正しく乱数が生成できるので,最適化のバグであることは間違いない.iccのバージョ…

Test-And-Set操作について

test and set 操作について復習をしたのでメモ.test and set (TAS)操作では,次のような処理をアトミックに行う. int test_and_set(int *mem){ old = *mem; if (0 == *mem){ *mem = 1; }else{ /* do nothing */ } return old; }例えば 2.6系のlinux (i386)…

コンパイラを切り替える方法.

コンパイラを切り替える方法には色々あるが,以下のような設定ファイルを作って source で読み込むのが一番便利そう. source /opt/intel/idb/9.0/bin/idbvars.sh source /opt/intel/cc/9.0/bin/iccvars.sh source /opt/intel/fc/9.0/bin/ifortvars.sh expor…

debian で intel compiler を使う(その2)

intelコンパイラのiccやifcをデビアンで使う方法.debian で intel compiler (icc) - ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き -の続編.iccやifcは頻繁にバージョンが上がるので,パッケージを変換するスクリプトと,インストール後設定ファイ…

デビアンのパッケージを展開する

$ dpkg -x hoge.deb ディレクトリ名

debian のパッケージを作る方法(その2)

参考文献Debian New Maintainers' Guide 必要なファイル configure に対応しているソースからdebianのパッケージを作る際に、最低限必要なファイルは以下の4つ。 debian/control パッケージの管理情報 debian/changelog debian/copyright debian/rules ビル…

直線・円の描画アルゴリズム

http://www2.starcat.ne.jp/~fussy/algo/index.htm Bresenhamアルゴリズムとか、その拡張版など。古典的アルゴリズムがよくまとまっている。

デバッグ用Cマクロ

printf()でデバッグメッセージを出力するマクロ。以前から同じようなマクロはよく書いてきたが、最近やっと仕様が固まったのでコピペできるように日記に書いておく。特徴としては マクロが埋め込まれたソースファイル名とその行数を出力。 マルチスレッドな…