- 508 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:17:08 ]
- pthreadとの組み合わせでうまく動作せずに困っています。
引数として渡す構造体に、float * device_Xを用意して for(int k=0;k<NUM_THREADS;k++){ cudaMalloc((void**)&targ[k].device_X, sizeof(float)*(hostX.nRow)*(hostX.nCol)); cudaMemcpy((void*)targ[k].device_X, host_X, sizeof(float)*(hostX.nRow)*(hostX.nCol), cudaMemcpyHostToDevice); pthread_create(&handle[k], NULL, compute_thread_func, (void *)&targ[k]); } と渡すと、pthread内で cudaMemcpy(temp,argument->device_X, //argumentは渡されたvoid* argをキャストしたもの sizeof(float)*(nRow)*(nCol), cudaMemcpyDeviceToHost); としてもうまく取り出せません。(中身がぐちゃぐちゃになる) 同様の処理をpthreadで呼び出す関数内で行うとうまく動作します。 スレッドごとにメモリを取るのだから、中でやってもいいのですが気になります。 何か原因になっていそうなことは無いでしょうか。
|

|