CUDA OccupancyCalculatorで稼働率を計算します



Calculate Occupancy Rate Cuda Occupancy Calculator



私のグラフィックカードはRTX2060 superで、その計算能力は7.5です。私は最近、CUDAが稼働率を自動的に計算する計算機、つまりCUDA OccupancyCalculatorを提供していることを発見しました。これは公式Webサイトからダウンロードできます。



ダウンロードした後、説明を読み、下の図の紫色の円にいくつかの値を設定しました。ずっと考えていたのですが、なぜ入居率が63%だったのかわかりません。私は今それを理解し、ここに記録します。



まず、緑色の円内のデバイスの機能を無視しないでください。これらの少数が稼働率にどのような影響を与えるのか、私は知りませんでした。

1.誰もが占有式を知っています:各SMのアクティブなワープの数/各SMの最大のワープの数。デバイスの各SMの最大ワープが32固定されていることがわかります。ここで、アクティブなワープが20である理由が問題になります。ピンク色の円の部分の最小値が占有率を決定する要因であるため、上の図のピンク色の円のレジスターファクターから稼働率が計算されていることがわかります。レジスター係数は次のことを示します:(各SMには10個のアクティブなブロックがあります)*(各ブロックには2個のワープがあります)= 20。(したがって、占有率の式の分子、つまりアクティブなワープの数はこの方法から得られます)。

2.では、なぜレジスタファクタの各SMに10個のアクティブブロックがあるのでしょうか。そのため、水色のCは10です。C= B / Aであることは簡単にわかります。したがって、質問はA == 2およびB == 20になります。



3.Aの式を確認しました。= IF(myAllocationGranularity = 'block'、CEILING(CEILING(MyWarpsPerBlock、myWarpAllocationGranularity)* MyRegCount * limitThreadsPerWarp、myAllocationSize)、MyWarpsPerBlock)緑色の円は、レジスタ割り当ての粒度が「ブロック」ではなくワープであることを示しています。 = myWarpsPerBlock = 64/32 = 2

4.Bの式を確認しました。

= IF(myAllocationGranularity = 'block'、limitRegsPerBlock、FLOOR(limitRegsPerBlock / CEILING(MyRegCount * limitThreadsPerWarp、myAllocationSize)、myWarpAllocationGranularity))そして、緑色の円は、レジスタ割り当ての粒度が「ブロック」ではなくワープであることを示しているため、B = FLOOR (limitRegsPerBlock / CEILING(MyRegCount * limitThreadsPerWarp、myAllocationSize)、myWarpAllocationGranularity)紫色の円に設定値を代入した後:

これまでのところ、3つのABCがどのように計算されるかを知っています。

5.ワープのB位置が32である理由について、次の式を読みました。SMあたりの最大ワープは、灰色の部分のデバイス特性をチェックすることを意味します= 32。

要約:とにかく、知らないことに遭遇したとき、インターネット上に答えがないことが多く、多くの人の答えが間違っているため、自分でチェックして自分でチェックしたいことがよくあります。とにかく、それはCUDAが提供する自動計算機であり、セルをクリックすると数式を見つけることができます。インターネット上の多くの人々は間違っており、一部のCUDAグループがすべてゾンビであることを望んでいません。に