SSブログ

Grand Central Dispatchを使ってみるテスト [Mac]

MCMCで複数のMarkov chainを計算させているときなど、マルチコアなCPUでは並列化したら速くなるのでは、と思うことがある。Mac OS X 10.6 Snow Leopardでは、Grand Central Dispatchという、並列化を容易にする仕組みが導入されたので、下のページを参考にちょっと試してみた。

↓のようなコードを書いてみた。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <dispatch/dispatch.h>


int main (int argc, const char * argv[]) {
	const unsigned int n_iter = 10;
	dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
		
	srandom((unsigned)time(NULL));
	dispatch_apply(n_iter, q, ^(size_t i) {
		unsigned int wait_time = (double)random() / RAND_MAX * 8.0;
		sleep(wait_time);
		printf("%d:%2d\n", (int)i, wait_time);
	});
	
	printf("done.\n");
    return 0;
}

結果

1: 3
0: 7
2: 7
3: 4
5: 2
4: 3
6: 5
7: 5
8: 1
9: 3
done.

という具合に、順番が不ぞろいになって出力される。

目論見としては、これでJAGSを並列化できないか、ということなのだが、まだ道は遠い。


nice!(0)  コメント(2)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 2

syou6162

系列相関みたいなのはどういう感じになるんでしょうか?

並列化楽しみにしてます
by syou6162 (2009-10-31 18:06) 

hiroki

いやあ、楽しみにされてもご期待に沿えるかどうか。なにせ見様見まねで始めてみたところですし。
by hiroki (2009-10-31 19:02) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0