エラー行以外にも目を向けろ!

今日も欠陥だらけのプログラムをいじっていましたら

こんなエラーが

Screenshot_from_2015-01-13 17:46:02

code=4(cudaErrorLaunchFailure)ってなんぞやーってな感じでしたが

たまたまなのか修正できましたので、解説
まず、このエラーが出た部分のプログラムは

cudaMemcpy(d_A ,h_A ,size ,cudaMemcpyDeviceToHost);  ホスト→デバイスにコピー

gpu<<<block, thread, sharedsize>>>(d_A ,d_B);       デバイスで実行

cudaMemcpy(count ,h_B ,size ,cudaMemcpyDeviceToHost); ホスト→デバイスにコピー *ここでエラー*


こんな感じで何をやっているのかというと

ホストからコピーした配列をGPUでビットカウントし、ホストにリストア

これだけです

しかし、一番下の部分でエラーが出てしまいました

同じ分、GPUにコピーできるのに

CPUにはコピーできないということは

メモリ操作系でのエラーではない!?と睨んだ私は

色々調べてみました

おかしい部分を見つけました

それは、ブロックスレッドのサイズでした

ブロックとスレッドのサイズの指定がおかしかったため

ちゃんと実行されず

ホスト→デバイスにコピーする際に不具合が生じているみたいでした

実際にブロックとスレッドのサイズを修正すると

ちゃんと動きました

エラーが出た場所だけではなく

その付近も疑うことが大切だと、改めて痛感しました…

P.S

そもそも、ちゃんとブロック・スレッドのサイズを自動計算してくれるプログラムなら

こんなことはまずありえないか

Comment

Comment Form
公開設定

Trackback


→ この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。