1

我正在尝试对 PTX 代码进行 JIT 编译。代码编译并运行,但与生成它的 cuda C 相比,速度非常慢。
试图尝试为什么运行从 cuda C 生成的 PTX 代码较慢(两者都针对 compute_20/sm_20),我想在我的调用 cuModuleLoadDataEx 中设置选项以确保它针对的是 compute_20/sm_20,但我似乎无法通过选项正确。目前我有

CUjit_option options[] = {
    CU_JIT_TARGET
}
CUjit_target_enum target = CU_TARGET_COMPUTE_20
void *optionValues[] = {
    &target
};
int32_t err = cuModuleLoadDataEx(&hModule, ptxSrc, 1, options, optionValues);

但是调用返回 1 (cudaErrorMissingConfiguration) 我当然尝试过在堆栈溢出和谷歌上搜索如何正确设置选项的示例,但我找不到任何东西。如果我不尝试设置任何选项,则调用成功并且代码正确运行。

4

1 回答 1

1

搜索 CUDA SDK 附带的示例程序,您会发现许多 cuModuleLoadDataEx 示例,尽管它们似乎都没有指定 CU_JIT_TARGET。我在 matrixMulDrv、vectorAddDrv 和其他一些函数中看到了这个函数调用。

查看这些样品,似乎当OptionValue需要成为缓冲区的指针(例如CU_JIT_INFO_LOG_BUFFER)时,您可以将该指针作为选项值传递,但是当需要简单的整数(例如CU_JIT_MAX_REGISTER)时,您就会铸造Integer integergergergergergergergergergergergergergergerger将值传递给 void* 并将其传递:

void *optionValues[] = {
    (void*)(uintptr_t) CU_TARGET_COMPUTE_20,
};  
于 2012-06-08T16:20:40.850 回答