【发布时间】:2018-01-07 21:57:32
【问题描述】:
CUDA 是否支持 CUDA 内核的 JIT 编译?
我知道 OpenCL 提供了这个功能。
我有一些在运行时不会更改的变量(即仅取决于输入文件),因此我想在内核编译时(即运行时)用宏定义这些值。
如果我在编译时手动定义这些值,我的寄存器使用量会从 53 下降到 46,这会大大提高性能。
【问题讨论】:
-
cuda 代码 can be compiled 到 intermediate format ptx code,然后将 jit-compiled 到运行时的实际设备架构机器代码。我不确定这是否会满足您的需求,但是因为我不确定您的代码在运行时将如何以不同的方式编译(即宏将依赖什么。)
-
我从输入文件中读取了一些标量值,我想在内核编译时定义它们。例如:#define epsilon 3.0
-
如果可能的常量组合很少,可以使用 CUDA 中的模板为每个组合生成单独的代码。然后编译器可以在运行时为您选择正确的内核。
-
ArrayFire 在运行时进行 JIT 编译,以针对传入的数据大小和形状优化内核(我在 ArrayFire 上工作,这就是我所知道的)。所以是的,可以在 CUDA 中做!
-
我相信答案是“不”。但是,如果您只想更改几个常量,则可以使用模板 (see this blog post)。它们远没有在运行时编译代码那么强大。我喜欢 OpenCL 的主要功能之一。