別に普通に動くはずなんだよな。実際に簡単なプログラムも作って 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:
Post a Comment