0

私は CUDA 開発に不慣れで、MacPro で NSight 5 を使用しています。

2 つのパーティクルを使用して非常に単純なシミュレーションを実行しています (ver1ここver2では、別のタイプの構造体へのポインターを持つ 2 つの構造体ですlinks) 。

コードはコンパイルされましたが、このブロックの最後に到達すると問題が発生したようで、integrate_functor().

...    
thrust::device_vector<Vertex> d_vecGlobalVec(2);

d_vecGlobalVec[0] = ver1;
d_vecGlobalVec[1] = ver2;

thrust::for_each(
    d_vecGlobalVec.begin(),
    d_vecGlobalVec.end(),
    integrate_functor(deltaTime)
);
...

だから私の質問は:

  1. NSight では、 と のメンバー変数の値を確認できver1ますver2。しかし、このブロックのコードの最後の行の直前で、 の階層を展開するとd_vecGlobalVec、これらの値のいずれかが表示されます。対応するフィールド (たとえば、このベクトルの最初の要素) は空です。これはなぜですか?明らかに、値がデバイス上にある間、ver1ver2はホスト メモにありd_vecGlobalVecます。

  2. 2.

NSight チームのメンバーがこれを投稿しました。

したがって、一般に、ホストとデバイスのコードの間を行き来し、ホストとデバイスの変数をそれらの間に障壁がないかのように表示できる必要があるということですか?

システム:

NVIDIA GeForce GT 650M 1024MB

Mac OS X ライオン 10.7.4 (11E2620)

4

1 に答える 1

1

デバイスコードが実際に呼び出されていることを確認してください。すべての戻りコードをチェックし、デバイスが実際に出力で機能したことを確認します。スラストがより効果的であると信じる場合、ホスト上でコードを実行することがあります。

私は本当に10.8にアップデートすることをお勧めします-それはNVIDIAGeForce6xxシリーズを最もよくサポートする最新のドライバーを持っています。

また、最適なエクスペリエンスを得るには、表示とCUDAのデバッグ用に異なるGPUを使用する必要があることに注意してください。そうしないと、MacOSXが干渉してデバッガーを強制終了する可能性があります。

于 2013-02-04T23:03:32.283 に答える