Есть ли способ ускорить компиляцию CUDA PTX JIT?

У меня есть программа, которая генерирует, JIT-компилирует и запускает подпрограммы PTX на GPU. Программы работают просто отлично, а время выполнения довольно хорошее — примерно в 500 раз быстрее, чем у CPU. Проблема в том, что компиляция занимает слишком много времени, стирая все ускорения GPU, превращая его в замедление 🙂

Вопрос в том, есть ли более быстрый и эффективный способ сделать это? Могу ли я повторно использовать некоторые ресурсы, сделать процесс более похожим на поток?

Изменить: каждая PTX-программа запускается только один раз, и все они очень разные, поэтому JIT-кеширование не приносит никакой пользы

Это мой код, который в значительной степени совпадает с примером приложения JIT, предоставленным nvidia:

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));

-1

Решение

Вы можете рассмотреть JIT-кэширование.
http://devblogs.nvidia.com/parallelforall/cuda-pro-tip-understand-fat-binaries-jit-caching/

0

Другие решения


По вопросам рекламы [email protected]