2012-11-26 88 views
4

CUDA是否支持CUDA内核的JIT编译?是否可以对CUDA内核进行即时(jit)编译?

我知道OpenCL提供此功能。

我有一些变量,在运行时间期间不改变(即,仅依赖于输入文件),因此,我想在内核编译时定义与宏这些值(即在运行时)。

如果我在编译时手动定义这些值我的寄存器使用滴从53到46,有什么极大的提高了性能。

+2

CUDA代码[可被编译(http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compilation-nvcc)向[中间格式PTX代码](HTTP: //docs.nvidia.com/cuda/parallel-thread-execution/index.html),然后将[jit-compiled](http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc /index.html#just-in-time-compilation)到运行时的实际设备架构机器代码。我不确定这会满足您的需求,但是我不确定您的代码在运行时会如何编译不同(即宏将取决于什么)。 –

+0

我从输入文件中读取了一些标量值,我希望在内核编译时定义它们。例如:#define epsilon 3.0 – user1829358

+1

如果您有几个可能的常量组合,则可以使用CUDA中的模板为每个组合生成单独的代码。编译器可以在运行时为您选择正确的内核。 –

回答

1

如果可行供您使用Python中,你可以使用优秀pycuda模块在运行时编译的内核。结合模板引擎(如Mako),您将拥有一个非常强大的元编程环境,该环境可让您动态调整内核,以获取适合您的架构和特定设备属性(显然有些事情很难做到完全动态和自动)。

你也可以考虑只是保持你的内核的不同参数的几个不同的版本,这之间你的程序可以在运行时根据所选择的任何输入你喂养它。

+1

谢谢你的想法。使用pycuda似乎对我有点矫枉过正。但是,如果没有其他方法,我可能会给它一个机会。是否没有类似于OpenCL的clBuildProgram的cuda驱动程序调用? – user1829358

+0

至少在香草CUDA中,我没有意识到任何类似于“clBuildProgram”的东西。如果GPU二进制文件尚不可用,那么CUDA确实会对设备无关的PTX代码进行运行时编译,但我不知道如何在您的用例中利用它。 –

相关问题