4

占有計算機を理解するのに問題があります。512スレッドが正常に機能する開発コードで問題が発生していますが、1024スレッドでは数値が不安定になります。

私はWindows7でTeslaC2050を実行しており、Matlab(Matlabを使用する必要があるのは私のせいではありません)とMexfunctionで開発しています。

結果に影響を与えているコード上の他の制限を見つけるために、占有計算機をいじってみようと思いました。

ブロックごとに1024スレッドを入力すると、占有率は0%になります。512スレッドの場合、占有率は33%です。私は少なくとも1024スレッドで何かを得るだろうと思っていたでしょう。コードと占有率計算ツールは、最大704スレッドで良好な結果をもたらすことに気づきました(これは実際のスレッドを表すものではありません)。

この領域についての私の理解の欠如が、コードに表示されているエラーを修正できない理由だと思います。なぜ私がこれらの結果を得ているのか誰かが説明できますか?

番号は次のとおりです。

  • 計算能力2.0
  • 共有メモリサイズ49152
  • ブロックあたりのスレッド数512または1024
  • スレッドごとのレジスタ44
  • ブロックごとの共有メモリ0

ptxas info:44レジスタ、232バイトcmem [0]、144バイトcmem [2]、28バイトcmem[16]を使用

4

1 に答える 1

4

ブロックごとにあるレジスタの総数は32768です(これはSDKのdeviceQueryで確認できます)。カーネルによると、44個のレジスタ/スレッドを使用します。ブロックあたり1024スレッドでカーネルを起動すると、制限を超える合計44 * 1024=45056レジスタが取得されます。ordetでブロックあたり1024スレッドで実行するには、スレッドあたり32以下のレジスタを使用するようにカーネルを最適化する必要があります。

于 2012-07-31T07:45:47.490 に答える