CUDAのいわゆる「n秒ルール」について

出典: トータル・ディスクロージャ・サイト(事実をありのままに)

CUDAのKernel実行が何秒か連続するとプログラムの動作が止まる」という事実は、CUDAのエンジニアの間では比較的広く知られている事実。ただし、具体的にどういう条件なのかがまとめられた記事は、意外に少ないようだ。一応リリースノートには具体的な条件が書いてあるのだが、このいわゆる「n秒ルール」について、日本語で簡単にまとめてみた。

5秒ルール: NVIDIAのドライバやランタイムの制約

古いリリースでは10秒前後で実行が止まると経験的に言われていて、「10秒ルール」と言われることも多かったこの問題点であるが、現行のCUDAでは、一つのKernelの実行が5秒間継続した場合に、ドライバやランタイムがKernelを止めるとはっきり明記されている。ただし、この「5秒ルール」は「ディスプレイを出力中のGPU」に対する制約であり、ディスプレイを繋げていないGPUを使ってCUDAのKernelを実行する場合は「5秒ルール」の制約は受けない。

なおWindowsの場合は、OSによるディスプレイの出力設定が「5秒ルール」の基準となり、実際にディスプレイを出力していなくても「5秒ルール」の制約は受けるので注意である。

2秒ルール: WindowsのWDDMドライバの制約

Vista/Server 2008以降のWindowsで採用されているグラフィックスカード用のドライバモデル「WDDM」は、GPUから反応が続かない状態が2秒続いた場合に、その状態を引き起こしたプロセスをWindowsが強制終了させてしまう。「5秒ルール」で強制終了させられるのは「Kernel」であったが、「2秒ルール」の強制終了の対象は「プロセス」である点には注意すべきである。

あくまでも基準は「GPUからの反応」であり、一つ一つのKernelが2秒に満たない場合であっても、CPUを介さずにGPUにタスクが連続して供給される状態が2秒続けば強制終了の対象となる。特にCPU使用率を抑えたCUDA実行の記事で紹介したテクニックを使う際に問題になりやすいので、注意が必要である。「2秒ルール」を避けるためには、定期的にcudaDeviceSynchronizeなどを使って制御をCPUに返してやる必要がある。

なお、Tesla向けに供給されている「Tesla Compute Cluster (TCC)」と呼ばれる特殊なドライバは、WDDMとは異なるドライバモデルを使っているようであり、「2秒ルール」の制約は受けない。

n秒ルールの簡単な回避方法

GPGPU用のグラフィックスカード(Windowsの場合はTesla推奨)とは別に、ディスプレイ出力用のグラフィックスカードを用意してしまうのが手っ取り早い回避方法である。特にグラフィックス出力との連携を行わない場合は、数千円で準備できるようなエントリーレベルのグラフィックスカードを用意してしまうのも手であろう。


この記事へのコメントをお寄せください

  • サイトへの書き込みに差し支えございましたら トータルディスクロージャーサイトサポート係へメールをお送りください
  • トータル・ディスクロージャ・サイトに投稿された文章と画像は、すべてその著作権がHPCシステムズ株式会社に帰属し、HPCシステムズ株式会社が著作権を所有することに同意してください。
  • あなたの文章が他人によって自由に編集、配布されることを望まない場合は、投稿を控えてください。
  • コメントを書き込む場合は名前にひらがなを織り交ぜてください。
  • あなたの投稿する文章と画像はあなた自身によって書かれたものであるか、パブリック・ドメインかそれに類する自由なリソースからの複製であることを約束してください。あなたが著作権を保持していない作品を許諾なしに投稿してはいけません!

<comments hideform="false" />


Comments

ノート:CUDAのいわゆる「n秒ルール」について

個人用ツール