2011-08-04 13 views
3

CUDA Programming Guideによれば、計算アーキテクチャ2.xを使用している限り、デバイス/グローバル関数内に動的にメモリを割り当てることができます。__device/global__内のメモリを動的に割り当てるCUDAカーネル

コマンド "いくつかのコマンド" -gencode =アーチ= compute_10、コード= \ "sm_10、compute_10の\" -gencode =:

私の問題は、私はこれをしようとしたとき、私は、コマンドラインのメッセージを取得するということですアーチ= compute_20、コード= \「sm_20、compute_20 \」等...

これは、あなたがデバイス/グローバル機能からホスト機能(malloc関数)を呼び出すことはできませんというエラーが続いています。

上記のメッセージは、計算1.xでコンパイルしようとしていることを示しています。私はVS2010を使用しており、 "CUDA C/C++"プロパティページの "compute_20、sm_20"に "Code Generation"を設定しているので、なぜ計算1.xでコンパイルしようとしているのか分かりません。私は間違いなく2.xをサポートするカードを使用しています。何か案は?

答えて

3

出力にnvccコマンドラインが表示されるはずです。実際、私はあなたがすべての-gencode/etcを貼り付けたビットだと思います。その中にあなたのコマンドラインです。したがって、sm_10とsm_20の両方のコードをコンパイルしていることを証明しているので、mallocを呼び出すときにエラーが発生します。

mallocの呼び出しを#if __CUDA_ARCH__ >= 200でラップし、エラーがなくなるかどうかを確認することで確認できます。

プロジェクトの.cuファイルの既定のプロパティでsm_20のプロパティをコンパイルするように設定していますが、の後にという名前を付けてプロジェクトに.cuファイルを追加したと思います。ファイルがプロジェクトに追加されたとき、デフォルトはおそらくsm_10とsm_20(.rulesファイルのデフォルト)に設定されていました。ファイル自体を右クリックすると、sm_20がチェックされていることがわかります。ちょうど馬鹿。

+0

あなたは正しいと思います。compute_20、sm_20の下でコンパイルするようにデフォルトのプロパティを設定しました。しかし、ファイル自体のプロパティを調べると、compute_20、sm_20、compute_10、sm_10の両方に設定されていました。これを変更すると、コードがコンパイルされるようになりました。 – Barjavel

関連する問題