最近8coreのワークステーションを使う機会があったのですが、そのCPUのパワーを引き出すことの難しさを身をもって経験しました。大量のデータを処理したかったのですが、HDDがボトルネックになって、全然CPUが活躍させられないのです。
これからの時代、より大量のデータを処理する局面が増えてくると思うのですが、いかにデータをCPUに流してやるかが重要なんですね。SSDとかだともっとましになるだろうし、または分散ファイルシステムにしてMapReduce的なことをするのも向いてるのかなあという印象です。
以前までのやってた研究だと、データはほんの少しでほとんどがいかに計算を速くするかを問題にしていたので、新鮮な経験でした。
2009年12月22日火曜日
2009年12月18日金曜日
Fedora12のevinceで日本語表示
最近UbuntuだけでなくFedoraも使うようになったが、FedoraはUbuntuに比べると日本語対応が弱いようで結構苦労する。標準では日本語のPDFも見られないし、日本語のLaTeXもレポジトリにないし。
今日はFedora 12上のevinceで日本語を表示する方法が判明したのでメモとして書いておく。
今日はFedora 12上のevinceで日本語を表示する方法が判明したのでメモとして書いておく。
- evinceのインストール: 多分標準で入る
- popplerのサイトからpoppler-data-x.y.z.tar.gzの最新版をダウンロード
- poppler-dataを展開
- Makefileのprefixを/usrに変更
- (rootで) make install
"prefix = /usr/local" => "prefix = /usr"
2009年12月14日月曜日
2009年7月9日木曜日
C++によるrubyの拡張
現在研究中のプログラムをライブラリ化して簡単に使えるように ruby の binding がうまくいくかを試してみようと思った。README.EXT.ja や Programming Rubyを参考に簡単なものを作ってみたが予想外に苦労するはめになった。それは、クラスにメソッドを登録するところで、以下のようなコードでもエラーが出るのだ。
エラーメッセージ
これは rb_define_method の引数の型が合わないことが原因で、reinterpret_cast を使って対処することにした。この方法が分かるまで本当に面倒だった。
VALUE initialize(VALUE self){
return Qnil;
}
...
void Init_something(void){
....
rb_define_method(klass, "initialize", initialize, 0);
....
}
エラーメッセージ
error: invalid conversion from ‘VALUE (*)(VALUE)’ to ‘VALUE (*)(...)’
これは rb_define_method の引数の型が合わないことが原因で、reinterpret_cast を使って対処することにした。この方法が分かるまで本当に面倒だった。
#define RB_FUNC(f) reinterpret_cast<VALUE (*)(...)>(f)
void Init_something(void){
....
rb_define_method(klass, "initialize", RB_FUNC(initialize), 0);
....
}
2009年5月25日月曜日
C++の前方宣言
C++には前方宣言というのがあって、うまく使うとヘッダファイルのインクルード関係を整理できる。なんとなく使っていたが、今日一つはまった点をメモ。
下に例を載せているが、クラス定義の中で前方宣言したクラスの変数を定義する際は、ポインタやテンプレート変数ならばいいけれども、そのまま使うことはできない。vectorのテンプレート変数にする分には問題ない。
ここらへんはごまかして勉強したのでダメですね。
下に例を載せているが、クラス定義の中で前方宣言したクラスの変数を定義する際は、ポインタやテンプレート変数ならばいいけれども、そのまま使うことはできない。vectorのテンプレート変数にする分には問題ない。
ここらへんはごまかして勉強したのでダメですね。
// case1: OK
class A; // 前方宣言
class B{
A *a;
};
// case2: OK
class A;
class B{
std::vector<A> a;
};
// case3: OK
class A;
template<class T=A>
class B{
T a;
};
// case4: NG
class A;
class B{
A a;
};
登録:
投稿 (Atom)