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を並列化できないか、ということなのだが、まだ道は遠い。
系列相関みたいなのはどういう感じになるんでしょうか?
並列化楽しみにしてます
by syou6162 (2009-10-31 18:06)
いやあ、楽しみにされてもご期待に沿えるかどうか。なにせ見様見まねで始めてみたところですし。
by hiroki (2009-10-31 19:02)