研究日誌。

大規模なグラフ処理に対してメモリ階層構造を考慮した高性能なソフトウェアを開発。

SONY NW-A846 購入

2010-08-31 00:08:40 | Weblog
これまで KENWOOD を使用していたが、起動のたびにディレクトリを舐めて file system を構築するのでものすごく時間がかかってしまう。ちょっと音楽を聴きたいのに 2,3 分またされるのは少々厳しい。また 25GB ほどの音楽ファイルを持ち歩きたいと考えていた。「SONY NW-A846 32GB」は上位機種の「NW-X1000」のワンセグ無しversionという位置づけで、少し安くなっていたので購入した。久々の SONY 製品だ。

SONY の取り込みソフトと言えば Sonic Stage であるが、長年 iTunes で管理してきたし、現在は MacOSX をメインに使っているので今更 Sonic Stage に移行したくないし、そもそも対応していない。

そもそも MacOSX や Linux での利用を考えると Sonic Stage が必須であると困るが、最近のプレーヤは Drag and Drop に対応している。さすがにアーティスト検索やアルバム検索までは使えなくてもしょうがないと考えていたが、PC との USB 接続を解除すると、ディレクトリを舐めてアーティスト&アルバム構成までも更新してくれるため、本当に Sonic Stage を使用する必要は無い。この商品のウリ(?)である歌詞表示は Sonic Stage が必須のよう。

真夏のジャズ・アカペラ・ワークショップ2010

2010-08-29 14:57:01 | Weblog
松岡由美子(VOX ONE、編曲者、バークリー音楽院教授)さんによる、ワークショップに参加してきた。グループレッスンにはお世話になった事があるが、歌う会はこれが初めて。

個人的に Whisper When I Speak が歌えなかったのは残念だったが、"Time after time" や "The water is wide" などの Vox One 曲、Both sides now を歌う事ができて非常に満足。新曲の "小さい秋見つけた" は変拍子で難解だがたまらないアレンジ。それから "Voice dance(Greg Jasperse)" というカバーではあるが、非常に軽快で楽しい曲。などなど楽しい時間はあっという間に過ぎてしまった。

個人的に "赤とんぼ" は 10 年前頃に行った Vox One @ 日暮里サニーホール で非常に印象に残った曲であったので、感激した。内声(特にテナー)のメロディラインがすばらしい。

TSPLIB のプロット by GNUPLOT

2010-08-24 01:17:36 | Weblog
TSPLIB フォーマットで書かれたファイルを GNUPLOT によりプロットするスクリプトを書いてみた。
#!/bin/sh
gnuplot <<EOF
set terminal postscript eps color enhanced 12;
set out '$(basename $1 .tsp).eps';
set grid x;
set grid y;
set size square;
set title '';
set nokey;
set style line 1 lt 1 lc rgb "royalblue";
plot "$1" using 3:2 every ::8 with dots linestyle 1 notitle;
EOF
$ sh plot.sh FILENAME
とすればよい

サイエンスセミナー2010

2010-08-23 00:07:05 | Weblog
最短路とスパコンというキーワードで中高生に対するセミナーを行った。

もちろん最短路ソルバは必ずしもスパコンが必要という訳でないが、非常に大きなクエリである場合(全米規模の全対全/主要点間最短路)にはやはり必要となる。実は最短路問題だけに限らずに最適化に興味を持ってもらおうという狙いもある。

やはり興味があるというのは大きく、学部生よりも意欲的であるように感じた。アンケートを見ても好評だったようだ。

オンラインソルバの仕組み

2010-08-22 19:17:12 | Weblog
ひとまずの枠組みは出来た新オンラインソルバであるが少し紹介をしておく。

これまでのオンラインソルバではシステムとソルバ部分がべったりくっついてしまい、新たにソルバを追加するのが非常に困難であった。それどころかソルバの version を更新するにしても変更箇所が多かったのでそれをどうにか簡単にできないかを念頭にいれ開発を進めている。

やっていうることは極々単純な事で、"マジックナンバーを使用しない"、"ソルバ情報を一般化する" ということだ。テキストファイルでの入出力ならば、どのようなソルバにも対応できるように改善した。

Gmail : POP アカウントの更新

2010-08-21 19:07:26 | Weblog
「POP アカウントの更新 by Emmanuel P」という Labs での拡張がある。

この機能を有効にすると、

[設定]
→ [アカウントとインポート]
→ [POP3 を使用したメッセージの確認]
→ [メールを今すぐ確認する]

と面倒な手順を一発で実現する [更新] がメール件数が表示しているあたりに作成される。非常に便利。

drop box @ vine linux

2010-08-19 12:48:41 | Weblog
dropbox という非常に便利な web service があることはもちろん知っていたが、この度ようやくアカウントをしようしてみた。

● MacOSX での install
dmg を用意してくれているので、double-click するだけ。

● Vine Linux での install
.rpm を使用するかと思いきや、実は apt-get で入る。
% sudo apt-get install self-build-nautilus-dropbox-0.6.1-1vl5

まだ速くなる

2010-08-18 20:03:12 | Weblog
というのも NUMA を考慮してメモリレイアウトを行っていないためである。単純なスレッド並列でもかなりの並列効率を示しているが、少しでも早い方がやはりうれしいので、改善を進めていこうと考えている。

実現方法として、
1. affinity を取得して pthreads で頑張る
2. MPI で別プロセスとして動かす
3. NUMACTL でできそう(?)
4. shellscript 等で単純プロセス分割 が考えられる。
ひとまず 4 が簡単なので試してみよう。

MacOSX: フラッシュメモリとの相性

2010-08-17 20:04:32 | Weblog
いくつか現象が確認されたので、まとめておく。

 1. SONY 音楽プレーヤ(NW-A846)
正しくマウントされるが、アンマウントがうまくいかない。 端末から umount するとうまくいく。

2. KENWOOD MGR-A7 正しくマウントされない。
本体から Mac へのコピーを行うと落ちる。アンマウントされたのかと思い USB ケーブルを抜くと「正しく接続が終了されませんでした」と警告され、KENWOOD MGR-A7 内に不要なファイル群が作成される。そのまま KENWOOD MGR-A7 立ち上げるとメモリオーバーですと言われるので、.(ドット)から始まる隠しファイルを削除。端末からでないと .DS_Store が作成されるのでなんとも気持ちが悪い。

Core i7 速いな。

2010-08-16 19:40:09 | Weblog
1コアなら最速マシンであろう Intel(R) Core(TM) i7 CPU 965 @ 3.20GHz で比較実験を行った。SSSP の実行時間が4秒を切る。

○ 最短路ソルバ
mbp: Dijkstra's algorithm with multi-level buckets (by A.V.Goldberg)
msp-1.13: Dijkstra's algorithm with binary-heap (by Y.Yasui)

○ クエリ
全米道路ネットワーク(USA-road-d.USA.gr)上での1対全最短路問題(SSSP)


○ SSSP1クエリあたりの実行時間(SSSP/query)[スレッド数]
mbp : 4.27 sec.
msp-1.13[1] 3.97 sec.
msp-1.13[2] 2.05 sec.
msp-1.13[4] 1.16 sec.
msp-1.13[1](LargePage) 3.97 sec.
msp-1.13[2](LargePage) 2.00 sec.
msp-1.13[4](LargePage) 1.12 sec.

SCIP on MacOSX

2010-08-15 20:03:45 | Weblog
SCIP + SOPLEX + ZIMPL

0. GMP を install

1. SOPLEX と ZIMPL を build しておく。

2. SCIP を SOPLEX と ZIMPL を利用するための link
<pre>   (a) to use SOPLEX (Version >= 1.4.0)
       - ln -s [path to SOPLEX' *.h files] [path to SCIP]/lib/spxinc
       - ln -s [file libsoplex.[...].a] [path to SCIP]/lib/libsoplex.$(OSTYPE).$(ARCH).$(COMP).a
         for each operating system and architecture to use
         (e.g. "cd scip; ln -s /soplex/lib/libsoplex.linux.x86.gnu.opt.a lib/libsoplex.linux.x86.gnu.a")
         Warning! The ".opt" in the name of the SOPLEX library does not appear in the name of the soft-link.
   (g) to use ZIMPL as additional file reader for reading *.zpl files
       - mkdir [path to SCIP]/lib/zimplinc
       - ln -s [path to ZIMPL's *.h files] [path to SCIP]/lib/zimplinc/zimpl
       - ln -s [file libzimpl-[version].[options].a] [path to SCIP]/lib/libzimpl.$(OSTYPE).$(ARCH).$(COMP).a
       Note that ZIMPL needs the GNU multiprecision library (GMP) and the Z compression library (ZLIB) to be
       installed on your system.</pre>

なぜか current directory でしか ln できなかったので、
  cd [path to SCIP]/lib;
しておくとよい。

Cygwin on Windows 7 64bit

2010-08-14 10:44:03 | Weblog
cygwin.exe だけで install 完了。
PATH の設定などしなくても動くのは少々驚いた。

あえてやるとすれば、.bashrc に PS1 と CYGWIN を設定するくらい。
CYGWIN=tty は emacs 用。これを設定しないと C-x C-c で終了できなくなる。

export PS1='[u@h W]$ ';
export CYGWIN=tty;

affinity の設定

2010-08-13 23:42:40 | Weblog
これで各コアの共有状態を把握する事ができる。
$ for i in {0..23}
    for j in {0..3}
      cat /sys/devices/system/cpu/cpu$i/cache/index$j/shared_cpu_list
L1 cache memory は各コア専有のものを所持しているはずなので、これが share されているのであれば、Hyper Threading が ON になっていると予想される。

shared_cpu_list と同じディレクトリにある type で種類を確認する事ができる。Instabul では次のようになっている。

index0 : L1 'Data' cache
index1 : L1 'Instruction' cache
index2 : L2 cache
index3 : L3 cache

index3 を確認する事で、同一ソケット上のコア番号を取得する事ができる。

numactl-2.0.3 install

2010-08-12 14:53:28 | Weblog
CentOS5 の NUMACTL のversion は 0.9.8 と低い。
% rpm -qa | grep numactl
numactl-0.9.8-11.el5
また yum(rpm) から install するのではなく、source から build すれば numa.h などの便利そうなルーチンも使えるようになる。


手順は非常に簡単で configure なしの make のみ。
$ su -
# wget http://numactl.sourcearchive.com/downloads/2.0.3-1/numactl_2.0.3.orig.tar.gz
# tar zxvf numactl_2.0.3.orig.tar.gz
# mkdir /usr/local/numactl-2.0.3
# make 
# make install prefix=/usr/local/numactl-2.0.3

すでに 0.9.8 が install 済みで、rpm で install したものを source から build した binary で上書きするのも気持ちがわるいので、以下のような shellscirpt で対処した。
#!/bin/sh
prefix=/usr/local/numactl-2.0.3/
lib=$prefix/lib64
bin=$prefix/bin/numactl

LD_LIBRARY_PATH=$lib $bin $*