1

.cu コードのコンパイル中に --ptax-options=-v を使用すると、次の結果が得られました。

ptxas info: Used 74 registers, 124 bytes smem, 16 bytes cmem[1]

私のカードの devQuery は次を返します。

rev:  2.0
name: tesla c2050
total shared memory per block: 49152
total reg. per block: 32768

ここで、これらのデータを次のように cuda 占有計算機に入力します。

1.) 2.0
1.b) 49152
2.) threads per block: x
    registers per thread: 74
    shared memory per block (bytes): 124

x*74<=32768 になるように x (ブロックあたりのスレッド数) を変更していました。たとえば、x の代わりに 128 (または 256) を入力します。占有計算機で必要なすべての値を正しく入力していますか? ありがとう。

4

1 に答える 1

4

ptxas-options=--verbose(または -v) 形式の出力を生成します

ptxas : info : Compiling entry function '_Z13matrixMulCUDAILi16EEvPfS0_S0_ii' for 'sm_10'
ptxas : info : Used 15 registers, 2084 bytes smem, 12 bytes cmem[1]

重要な情報は

  • 1行目にターゲットアーキテクチャがあります
  • 2行目は<Registers Per Thread>, <Static Shared Memory Per Block>, <Constant Memory Per Kernel>

占有率計算機に入力すると

  • フィールド 1 を設定します。) 上記の例では、Compute Capability を「sm_10」に選択します。
  • フィールド 2 を設定します。) Register Per Thread を
  • フィールド 2 を設定します。) Share Memory Per Block に + DynamicSharedMemoryPerBlock を 3 番目のパラメータとして渡します<<<GridDim, BlockDim, DynamicSharedMemoryPerBlock, Stream>>>

Occupancy Calculator Help タブには追加情報が含まれています。

あなたの例では、Fermi アーキテクチャはスレッドあたり 63 レジスタに制限されているため、フィールド 1 を正しく設定していないと思います。sm_1* は、スレッドあたり 124 レジスタの制限をサポートします。

于 2013-02-26T02:57:06.827 に答える