C++ AMPでは、カーネル関数またはラムダにはrestrict(amp)とマークされています。これは、C++の許可されたサブセット(listed here)に厳しい制限を課します。 CUDAは、カーネル関数のCまたはC++のサブセットで自由を許しますか?CUDAカーネルコードよりもrestrict(amp)の方が制限がありますか?
7
A
答えて
18
Visual Studio 11およびCUDA 4.1以降では、restrict(amp)
関数はCUDAの類似の__device__
関数よりも制限的です。最も顕著なことに、AMPはポインタの使用方法をより制限しています。これは、HLSL(グラフィックシェーダ)コードのポインタを許可しないAMPのDirectX11計算基板の自然な結果です。制約によって、CUDAの低レベルIRはPTXであり、これはHLSLより一般的な目的です。ここで
は、ライン比較によるラインです:
| VS 11 AMP restrict(amp) functions | CUDA 4.1 sm_2x __device__ functions |
|------------------------------------------------------------------------------|
|* can only call functions that have |* can only call functions that have |
| the restrict(amp) clause | the __device__ decoration |
|* The function must be inlinable |* need not be inlined |
|* The function can declare only |* Class types are allowed |
| POD variables | |
|* Lambda functions cannot |* Lambdas are not supported, but |
| capture by reference and | user functors can hold pointers |
| cannot capture pointers | |
|* References and single-indirection |* References and multiple-indirection |
| pointers are supported only as | pointers are supported |
| local variables and function | |
|* No recursion |* Recursion OK |
|* No volatile variables |* Volatile variables OK |
|* No virtual functions |* Virtual functions OK |
|* No pointers to functions |* Pointers to functions OK |
|* No pointers to member functions |* Pointers to member functions OK |
|* No pointers in structures |* Pointers in structures OK |
|* No pointers to pointers |* Pointers to pointers OK |
|* No goto statements |* goto statements OK |
|* No labeled statements |* Labeled statements OK |
|* No try, catch, or throw statements |* No try, catch, or throw statements |
|* No global variables |* Global __device__ variables OK |
|* Static variables through tile_static |* Static variables through __shared__ |
|* No dynamic_cast |* No dynamic_cast |
|* No typeid operator |* No typeid operator |
|* No asm declarations |* asm declarations (inline PTX) OK |
|* No varargs |* No varargs |
あなたはrestrict(amp)
の制限hereについての詳細を読むことができます。 CUDA C Programming Guideの付録DのCUDA __device__
の関数でC++のサポートについて読むことができます。
+0
はIIRC C++ AMPが有効でなかったが、時々、並列コンピューティングに優れた慣行を奨励するために、明示的な選択に基づいている可能性の特徴について、ここでの議論がありますAMP-開発チーム - テクニカルラウンドテーブル –
関連する問題
- 1. F#見積もりの別の制限はありますか?
- 2. クラウドの制限があります
- 3. パケットキャプチャにはどのような制限がありますか?
- 4. LUTに制限があります:無制限の次元で
- 5. ValueError:min_faces_per_person = 70があまりにも制限的です
- 6. ダッシュ、ファイルパスに制限があります
- 7. NDjangoテンプレートは通常のDjangoテンプレートよりもどのような制限がありますか?
- 8. 原子のようなものがありますか?OpenCLのcudaオペレーション
- 9. ハッシュ関数の出力をバケットの数よりも少なく制限する必要がありますか?
- 10. ifやそれ以外のものには制限がありますか? (バッチ)
- 11. PerlNetの制限はありますか?
- 12. onSaveInstanceStateの制限はありますか?
- 13. beforeRouteLeaveの制限はありますか?
- 14. カレンダーエクステンダーの制限はありますか?
- 15. Browserifyには何らかの制限がありますか?
- 16. Watson Conversationのエンティティ値の数に制限がありますか
- 17. GoogleのAPIには何の制限がありますか?
- 18. CUDA printfの制限
- 19. Umbracoのカスタムフォームには制限がありますか?
- 20. Pythonでxarrayにファイルサイズの制限がありますか?
- 21. ipaファイルには何らかの制限があります
- 22. ハイパーエッジファブリックのpdfにはサイズ制限がありますか?
- 23. X-Rate-Limitには2つの制限がありますか?
- 24. リバティにはヒープサイズの制限がありますか?
- 25. WebDriver IWebElementsには特定のサイズ制限がありますか?
- 26. メイクファイルに変数のサイズに制限がありますか?
- 27. PHPのfile_get_contentsには制限がありますか?
- 28. ストリームの長さには制限がありますか?
- 29. なぜPythonのevalに長さ制限がありますか?
- 30. PostgreSQLのサブクエリにネスト制限がありますか?
次の質問に関連していてもよいです。 http://stackoverflow.com/questions/4899425/what-are-the-real-c-language-constructs-supported-by-cuda-device-code –
良い質問ですが、恐らくそれは本当に匹敵しません(おそらくプログラマーに移行してください.SE?):nvccはC++ 11をまだサポートしていませんので、ラムダについて話すときには、はるかに遠くにはありません。一方、AMPはマイクロソフトから始めて全く異なる制限があります。 DirectXを実装していないという欠点があります。科学的なアプリケーション。しかし、あなたは_language_制限だけを意味すると思いますか? – leftaroundabout
@leftaroundabout:はい、私は_language_制限について話していますが、C++ 03のままにしても問題ありません。ラムダはC++ AMPでカーネルコードを起動するための規定されたメカニズムであるため、ラムダについて言及しました。 http://channel9.msdn.com/Shows/Going+Deep/C-: – Eugene