Cuda cuModuleLoadDataEx选项

Cuda cuModuleLoadDataEx选项,cuda,Cuda,我正在尝试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_TAR

我正在尝试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) 我当然尝试过在stack overflow和google上搜索如何正确设置选项的示例,但我找不到任何示例。
如果我不尝试设置任何选项,调用将成功,代码将正确运行。

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

看看这些示例,似乎当optionvalue需要是指向缓冲区的指针(如CU_JIT_INFO_LOG_buffer)时,可以将该指针作为选项值传递,但当它需要是简单整数(如CU_JIT_MAX_寄存器)时,可以将整数值强制转换为空*并传递:

void *optionValues[] = {
    (void*)(uintptr_t) CU_TARGET_COMPUTE_20,
};  

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

看看这些示例,似乎当optionvalue需要是指向缓冲区的指针(如CU_JIT_INFO_LOG_buffer)时,可以将该指针作为选项值传递,但当它需要是简单整数(如CU_JIT_MAX_寄存器)时,可以将整数值强制转换为空*并传递:

void *optionValues[] = {
    (void*)(uintptr_t) CU_TARGET_COMPUTE_20,
};  

不应该将
选项
作为指针传递,将
选项值
作为指向指针的指针传递吗?您是否尝试过使用内联PTX?不应该将
选项
作为指针传递,将
选项值
作为指向指针的指针传递吗?您尝试过使用内联PTX吗?