Wednesday 15 February 2017

CUDA と pthread

別に普通に動くはずなんだよな。実際に簡単なプログラムも作って pthread と両立したし。

なんだけど、どうも、

pthread_create された側から cuInit(0) すると何もいわずに落ちる

という技が。なので、main thread と CUDA thread を入れ替えてみた。で、結果的には動いたんですが...

thread を入れ替えると、データの初期化順序が狂うので、待ち合わせを行う必要がある。もちろん、

semaphore 使うのが正当ですが...

面倒くさいので、大域変数の spin lock で... ってのが裏目に。良くあるパターンなんだけど。spin lock の位置によって、dead lock したり、データ壊れたり、どっちかが先に終わってしまったり...

まぁ、楽しい時間だったともいうかな。

thread localとかのコンパイラの問題かと思って、CUDA部分だけ clang 使ったんですが、それでもだめだった。まあ、良くわからん。C++ でなく C なのがいけないのか。

No comments: