スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

CUDAで "too many resources requested for launch"

FermiアーキテクチャのGPUは、Compute capablity 2.xに対応しており、1ブロックあたり1024スレッドを走らせることが仕様上可能のはずである。しかし、自分でプログラムを書いている間に、なぜかブロック毎のスレッド数を1024にすると、表題のようなエラーによりカーネルが走らない、という現象に遭遇した。

この現象は、簡単なサンプルプログラム等では発生しない。ある程度の規模のカーネルコードでないと起きないのだが、ブロック毎のスレッド数を512に減らすと問題なく動作する。

しばらく原因が分からず苦しんだのだが、Stack Overflowのこのスレッドあたりを見てようやく解決した。

原因は何だったかというと、nvccのフラグに-Gオプションを指定していたことである。これはデバッグ用のオプションであるが、これを指定すると、通常のコードよりもレジスタを多く使用するコードが生成されるらしい。その結果、カーネルがある程度以上にレジスタに確保される変数を多用している場合、1024スレッド並列に動かそうとするとブロック全体で使用可能なレジスタ容量の上限を超え、結果としてカーネルの起動エラーとなるらしい。

-Gオプションの指定をやめると、同じコードで問題なく動作するようになった。デバッグ用のオプション指定でかえってデバッグにえらく手間取るはめになってしまい、なんとも本末転倒であった。
スポンサーサイト
プロフィール

GM3D

Author:GM3D
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。