3.2バージョンのCUDAドキュメントの付録Dでは、CUDAデバイスコードのC++サポートを参照しています。
CUDAは「コンピューティング機能2.xのクラス」をサポートしていることは明らかです。しかし、私は計算能力1.1と1.3のデバイスで作業しています。この機能を使うことができます!CUDAデバイスコードでサポートされている実際のC++言語構造は何ですか?
例えば、このコードは動作します:
// class definition voluntary simplified
class Foo {
private:
int x_;
public:
__device__ Foo() { x_ = 42; }
__device__ void bar() { return x_; }
};
//kernel using the previous class
__global__ void testKernel(uint32_t* ddata) {
Foo f;
ddata[threadIdx.x] = f.bar();
}
私はまた、このようなスラスト::ランダムランダム生成クラスとして広範なライブラリを使用することができますよ。 私は、__device__
マークされた関数の自動インライン化のおかげでこれを行うことができたと思いますが、これはメンバー変数withalの処理については説明していません。
このような機能を同じ条件で使用したことがありますか、または私のCUDAコードがこのように動作する理由を説明できますか?リファレンスガイドに何か間違いがありますか?
あなたの答えは、制限に関する興味深い点をもたらします。コンパイル時の必要性は、コンピューティング能力<2.Xのデバイスを扱う際に考慮すべきポイントのようです。 – jopasserat
問題を調査したところ、私はあなたよりも良い答えを見つけることはできません。したがって、私はあなたの経験に頼っています:)とにかく、私は今ではC2050を所有していますので、コードを移植可能な状態に保つために実行を比較することができます。あなたの答えをありがとう@ CygnusX1 – jopasserat