/var/log/soymsk

id:soy_msk


MPICH2 on Windows7 64bit with visual studio 2010

1台のPCで並列処理を行う場合、openMPMPI の2通りがあるらしい。
MPI はPCクラスタ上で実行する分散処理フレームワークだけれども、一台で実行する場合でもopenMP以上の性能が出る場合があるとのことなので、まずインストールをやってみた。

1, MPICH2 or OpenMPI
MPIには openMPI, MPICHなどいくつかの実装がある。openMPIはver1.5からwindowsバイナリの配布が始まったけど、実例が少なそうなので却下。

MPICHの方はこなれた実装らしく、割と情報が多かった。

2, MPICH2のインストール
MPICH本家のサイトよりWindows用バイナリをダウンロード。
最新版はなぜかリンク切れでダウンロード出来なかったので、少し古いバージョンをインストールした。

[注意]
Windows版では、インストール作業を管理者権限で行う必要があり、インストーラーのアイコンから起動してもダメ。

コマンドプロンプトを管理者権限で実行し、以下のコマンドを叩いてインストール。
msiexec /I [インストーラー.msi]
, サンプル
インストールするとサンプルも同時にインストールされる。
[INSTALL_DIR/example] にサンプルがあるので
mpiexec -n [サンプルexe]
で実行出来るか試す。


ここで実行できない場合、MPICHのインストールを管理者権限で行っていない、ファイヤーウォールを開けていないなどが考えられる。

PCクラスタ上で計算する場合は各PCにMPICHをインストールして、アカウントを登録しる必要があるが、今回は単なる並列処理なので省略。

, 設定
Visual Studio 2010でコンパイルしてみる。

設定としては、
1, Include ディレクトリ
2, ライブラリディレクトリ
3, ライブラリファイルをプロジェクトに追加
が必要。1,2 で十分かと思ったが、3がないとコンパイルできない。

サンプルと同じようにコマンドプロンプトから
mpiexec -n [実行ファイル]
で実行。

MPICH2 on Windows7 64bit with visual studio2010

1台のPCで並列処理を行う場合、openMP と MPI の2通りがあるらしい。
MPI はPCクラスタ上で実行する分散処理フレームワークだけれども、一台で実行する場合でもopenMP以上の性能が出る場合があるとのことなので、まずインストールをやってみた。

1, MPICH2 or OpenMPI
MPIには openMPI, MPICHなどいくつかの実装がある。openMPIはver1.5からwindowsバイナリの配布が始まったけど、実例が少なそうなので却下。

MPICHの方はこなれた実装らしく、割と情報が多かった。

2, MPICH2のインストール
MPICH本家のサイトよりWindows用バイナリをダウンロード。
最新版はなぜかリンク切れでダウンロード出来なかったので、少し古いバージョンをインストールした。

[注意]
Windows版では、インストール作業を管理者権限で行う必要があり、インストーラーのアイコンから起動してもダメ。

コマンドプロンプトを管理者権限で実行し、以下のコマンドを叩いてインストール。
msiexec /I [インストーラー.msi]
, サンプル
インストールするとサンプルも同時にインストールされる。
[INSTALL_DIR/example] にサンプルがあるので
mpiexec -n [サンプルexe]
で実行出来るか試す。


ここで実行できない場合、MPICHのインストールを管理者権限で行っていない、ファイヤーウォールを開けていないなどが考えられる。

PCクラスタ上で計算する場合は各PCにMPICHをインストールして、アカウントを登録しる必要があるが、今回は単なる並列処理なので省略。

, 設定
Visual Studio 2010でコンパイルしてみる。

設定としては、
1, Include ディレクトリ
2, ライブラリディレクトリ
3, ライブラリファイルをプロジェクトに追加
が必要。1,2 で十分かと思ったが、3がないとコンパイルできない。

サンプルと同じようにコマンドプロンプトから
mpiexec -n [実行ファイル]
で実行。

続]フォーマット別音楽管理

PCで聴く場合はFlacで、iPhoneなどで聴く場合はaac,mp3みたいにいろんな形式で音楽ファイルを持っていると、いざFlac形式の音楽だけを聴きたい場合にしっくり管理する方法がなかった、ということは過去記事にも書いた。


でも、foobarならいろいろカスタマイズできて、上手い具合に管理できそうなのでメモ。


環境

ディレクトリ:
[アーティスト]->[アルバム]->[音楽ファイル:*.flac, *.mp3]

プレイヤー:
[Foobar2000]



方法

"Preferences"->"Media Library"->"Album List" でViewsに以下のようなクエリを追加


name: by artist/filetype
query: %%|%album%|%codec%|[[%discnumber%.]%tracknumber%. ][%track artist% - ]%title%


%codec%を追加することでfoorbarのviewに

[アーティスト名]->[アルバム名]->[flac or mp3] ->[音楽ファイル]

という階層ができるので、flacだけ聴きたい場合はそのアルバム下のflacをまるごとプレイリストに放り込むだけ。

これでだいたいやりたいことを実現できた。


その他、使えるフォーマットについて公式?に書いてある。

eclipse CDTで実行エラー

CDTでバイナリを実行してもコンソール上ですぐに[terminated]となってしまい実行できなくなった件:

結論として、ライブラリが不足していると起こるらしい。スタックトレースには

のように表示されるはず。

一見コマンドプロンプトからは起動できていたので気付かなかった。
実行構成の環境に環境変数のPATHを追加してやったらちゃんとeclipse上から実行できたので解決!

前はこんな現象なかったように思うんだけどなんでだろ。というかライブラリが足りないならそれをちゃんと表示してほしいなぁ。

10進数->n進数

10進数->n進数(n = 2 ~ 35)の変換。ググッてもn進数というのはなかなかなかったので。STLは少しおおげさか。

const char *numset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWYZ";
void cardinal_encode(int num, int ocar) {
	if(num == 0) {cout << "0" << endl; return;}
	if(ocar > strlen(numset) || ocar < 2) return;
	vector<int> nl;
	
	while(num / ocar != 0) {
		nl.push_back(num % ocar);
		num /= ocar;
	}
	nl.push_back(num);
	reverse(nl.begin(), nl.end());
	for(unsigned int i = 0; i < nl.size(); i++){
		cout << numset[nl[i]];
	}
	return;
}