CUDA ドライバー API を使用して、.cl カーネルによって生成された PTX アセンブリ コードを実行しようとしました。私が行った手順は次のとおりです(標準のopencl手順):
1) .cl カーネルをロードする
2) JITコンパイルする
3) コンパイルされた ptx コードを取得して保存します。
ここまでは順調ですね。
ptx アセンブリ内にいくつかの特殊なレジスタ、%envreg3、%envreg6 などがあることに気付きました。ドライバー API。そのため、コードは無限ループに陥り、正しく実行できません。しかし、値を手動で設定した場合 (正確には %envreg6 を ptx 内のブロックサイズに置き換えます)、コードが実行され、正しい結果が得られます (CPU の結果と比較して正しい)。
これらのレジスタに値を設定する方法を知っている人はいますか? つまり、これらのレジスタに値を設定する cuLaunchKernel のフラグですか?