Main Content

レジスタ カウント nvlink エラー

問題

NVIDIA コンパイラ (nvcc) は、コンパイル時に計算されたレジスタ最大数の不一致があると、リンク段階で失敗することがあります。生成された CUDA カーネルは、NVCC によって決定された最大レジスタ カウントでコンパイルされます。カーネルは、別の CUDA ファイルでデバイス関数を呼び出す可能性があります。デバイス関数は、カーネルの最大レジスタ カウントを超える多数のレジスタを使用するようにコンパイルされている可能性があります。

次のパターンのエラー メッセージが表示される場合があります。

nvlink error : entry function 'xxx' with max regcount of n calls function 'yyy' with regcount of m.

nvlink error : entry function 'xx' with max 
regcount of n calls function 'yyy' with 
regcount of m.

ここで、'xxx''yyy' は関数のマングル名、nm は整数、mn より大きい値です。

考えられる解決策

NVCC の '-maxrregcount n' コンパイラ フラグを使用して、レジスタの最大数を指定します。GPU コード構成パラメーターのコンパイラ フラグ オプションを使用して、コンパイラ フラグを NVCC に渡します。次に例を示します。

cfg = coder.gpuConfig;
cfg.GpuConfig.compilerFlags = '-maxrregcount n';

ここで、n は、nvlink によってスローされたエラー メッセージ内のレジスタ カウントの最小値 (整数) とします。