2011-12-24 12 views
5
私は、次のやっている

ため__shared__変数のために許可されていません。コンパイラは質問のタイトルに記載されているようにエラーを投げています。なぜこれが問題なのか分かりません。初期化子がCUDA

答えて

7

共有変数の静的初期化はCUDAでは不正です。問題は、すべてのスレッドが共有メモリの静的初期化をどのように処理すべきかのセマンティクスがプログラミングモデルでは定義されていないことです。どのスレッドが書き込みを行うべきですか?値がスレッド間で均一でないとどうなりますか?どのようにコンパイラがそのような場合のコードを発行し、ハードウェアはそれをどのように実行すべきですか?

無意味な例では、ブロック内のすべてのスレッドに同じ共有変数を値(基本的には静的にコンパイルされたメモリ競合)を初期化するように要求しています。

+1

だから、正しい方法は何ですか? – Programmer

+0

PLease note。上記では、ブロック内の各スレッドにexForBlockLessThanpに同じ値を割り当てようとしています。 – Programmer

+0

条件文を使用して、カーネルの先頭でスレッドを初期化します。 – talonmies

関連する問題