レジスタ カウント 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'
は関数のマングル名、n
と m
は整数、m
は n
より大きい値です。
考えられる解決策
NVCC の '-maxrregcount n'
コンパイラ フラグを使用して、レジスタの最大数を指定します。GPU コード構成パラメーターのコンパイラ フラグ オプションを使用して、コンパイラ フラグを NVCC に渡します。次に例を示します。
cfg = coder.gpuConfig;
cfg.GpuConfig.compilerFlags = '-maxrregcount n';
ここで、n は、nvlink
によってスローされたエラー メッセージ内のレジスタ カウントの最小値 (整数) とします。