2016-12-15 27 views
-2

私はCUDAコードではなく、大規模な構造体を持っているCUDA:大規模な構造体でコンパイル失敗> 4ギガバイト

struct cDevData { 
    ~5GB worth of stuff ... 
}; 

私は窓が静的コードとデータを制限するためcudaMallocとシステムのセットアップ時にその構造を保持するために必要な領域を割り当て2GBまで。迷惑ですが、ファイン。もちろん、私は、64ビットアプリケーションをコンパイルするんだけど、私はデバッグ構成のために、次のエラーを取得ないとき:

ptxas C : /Users/user/AppData/Local/Temp/tmpxft_0000123c_00000000-4_kernel.ptx, line 2897; error : Value out of range for type .b32 
ptxas fatal : Ptx assembly aborted due to errors 

そして不思議Release構成のための異なる1:

error C2089: 'cDevData' : 'struct' too large 

をそれだけで起こって開始しました私はこの構造のサイズを4GB以上に増やしました。 私は32ビットアプリケーションをコンパイルしようとしましたが、別の(予期される)エラーclass is too largeが表示されます。 何が起こっていて、その周りに道があるのですか?

システム:Windows 7、Visual Studio 2012、CUDAツールキット8.0、GPU = Titan。

+1

実際のコードをコンパイル、ディスアセンブル、調査することなく、私は誰でもあなたの最初の診断を超えて答えを与えることができない、つまり構造が大きすぎるとは思わない。 – talonmies

+2

こんにちは、SOユーザーからの助けが必要な場合は、[最小限の完全かつ実証可能な例](http://stackoverflow.com/help/mcve)を提供する必要があります。 – Taro

+2

それを受け入れるのは大きすぎて分割するのはどうですか?とにかく周囲に多くの人を抱かせることができるようなものではありません。 – tera

答えて

1

これは、NVCCとVS2012の2つのバグの組み合わせです。 NVIDIAの応答から:

「リリース構成で生成されたエラー」エラー:C2089: 'cDevData': 'struct' too large」がホストコンパイラから発生しています。したがって、この問題はWindows上のホストコンパイラの制限に起因します。デバッグ設定で公開されているその他の問題を修正します。ただし、修正後であっても、ホストコンパイラの制限により、Windows上でコンパイルが失敗します。

この問題がVS2015以降で修正されるかどうかわかりません。 一方で、boost::mplといくつかのマクロを堅実に使用して構造体のようなセマンティクス(名前によるフィールドへのアクセス、多次元配列のような複雑なフィールド型など)を保持することで、この問題を回避しました。したがって、私のコードでは、最小限の変更が必要でした(フィールドの参照を->に変更し、sizeof(cDevData)を別のマクロに置き換える)。

関連する問題