GPU で PTX サブプログラムを生成、JIT コンパイル、実行するプログラムがあります。プログラムは問題なく動作しており、実行時間もかなり良好です。CPU に対して約 500 倍のスピードアップです。問題は、コンパイルに時間がかかりすぎて、GPU の高速化がすべて消去されて速度が低下することです:)
質問は、これを行うためのより高速で効率的な方法はありますか? 一部のリソースを再利用して、プロセスをよりストリームのようにすることはできますか?
編集: 各 PTX プログラムは 1 回だけ実行され、それらはすべて非常に異なるため、JIT キャッシュは何のメリットもありません。
これは私のコードで、nvidia が提供するサンプル JIT アプリとほぼ同じです。
CHECK_ERROR(cuLinkCreate(6, linker_options, linker_option_vals, &lState));
// Load the PTX from the string myPtx32
CUresult myErr = cuLinkAddData(lState, CU_JIT_INPUT_PTX, (void*) ptxProgram.c_str(), ptxProgram.size()+1, 0, 0, 0, 0);
// Complete the linker step
CHECK_ERROR(cuLinkComplete(lState, &linker_cuOut, &linker_outSize));
// Linker walltime and info_log were requested in options above.
//printf("CUDA Link Completed in %fms. Linker Output:\n%s\n", linker_walltime, linker_info_log);
// Load resulting cuBin into module
CHECK_ERROR(cuModuleLoadData(&hModule, linker_cuOut));
// Locate the kernel entry poin
CHECK_ERROR(cuModuleGetFunction(&hKernel, hModule, "_myBigPTXKernel"));
// Destroy the linker invocation
CHECK_ERROR(cuLinkDestroy(lState));