1

現在、2 つの SM を搭載した GeForce GPU カードを使用しています。私はその GPU カードでいくつかの実験を実行しており、同様の CPU 実装と比較して、コードが 5 倍高速に実行されることを観察しています。Tesla GPU などのより強力な GPU カードでまったく同じコードを実行すると、GeForce カードを使用した場合よりも実行時間が短縮されるのではないかと興味がありました。はいの場合、これはなぜですか?そうでない場合は、より強力な GPU カードがより高速になると期待しているため、コードを (高レベルで) どのように変更すればよいでしょうか。

4

2 に答える 2

2

各 SM は、一度に最大で 8 個程度のブロックを実行できます (共有メモリなどのより多くのリソースを必要とするブロックの場合は、多くの場合、それより少なくなります)。そのため、SM の数が多い GPU は、それに応じてより多くのブロックを実行できます。

コードをより大きな GPU に対応させるには、カーネル呼び出しで、システム内の SM の数に基づく (およびそれ以上の) ブロック数を指定します。これは、 を参照するdeviceProp::multiProcessorCountか、 を使用して呼び出すことcuDeviceGetAttributeで照会できCU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNTます。

于 2012-08-11T22:37:16.177 に答える
2

次のすべての条件が当てはまる場合、より多くの SM を備えた GPU からより良いパフォーマンスが期待されます。

  • 新しい GPU のアーキテクチャが既存のものと同じか新しいものである。
  • 新しい GPU のクロック速度は同等かそれ以上です。
  • 新しい GPU のメモリ スループットが同等またはそれ以上であること。
  • (最も重要な点)、コードは 2 つ以上の SM をビジー状態に保つのに十分なスレッド ブロックを使用します。

現在のハードウェアの傾向はコアの数を増やすことであるため、通常、スレッドの数を最大化することが非常に重要であることに注意してください。たとえば、Kepler アーキテクチャは、Fermi アーキテクチャに比べてコア数が 3 倍になります。

于 2012-08-11T22:48:01.377 に答える