【问题标题】:Is there a way to accelerate CUDA PTX JIT compilation?有没有办法加速 CUDA PTX JIT 编译?
【发布时间】:2014-08-27 22:22:58
【问题描述】:

好吧,我有一个程序可以在 GPU 上生成、JIT 编译和运行 PTX 子程序。程序运行得很好,运行时间也很好——与 CPU 相比,速度提高了大约 500 倍。问题是编译时间太长,抹去所有 GPU 加速,将其转为减速:)

问题是,有没有更快、更有效的方法来做到这一点?我可以重用一些资源,让流程更像流吗?

编辑:每个 PTX 程序只运行一次,而且它们都非常不同,因此 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));

【问题讨论】:

  • 我认为通常的建议是提前编译,将您的 ptx 转换为 cubin。如果您不能提前生成 ptx 子程序,也许您可​​以安排 ptx-jit 使其在其他内核执行时发生?如果你的内核执行时间很短,那也不是很容易管理,除非你可能会去多线程。

标签: c++ cuda jit ptx


【解决方案1】:

【讨论】:

  • 感谢您的建议。我实际上不明白为什么你被否决了,因为 JIT 缓存真的可以加快速度。不幸的是,我的 PTX 程序只运行一次,所以缓存不是我的选择
  • 如果您多次运行程序,缓存很有用
  • 值得指出的是,JIT 缓存是自动的,并且是 CUDA 中的默认设置(并且已经存在多年),所以这个答案表明在 OPs 案例中已经发生并且正在发生的事情。跨度>
猜你喜欢
  • 2022-01-03
  • 2010-09-18
  • 2019-04-20
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 2016-03-22
  • 2011-11-09
相关资源
最近更新 更多