我正在尝试JIT汇编PTX代码。 代码编译并运行,但与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) 我当然试图搜索如何正确设置选项的示例,包括堆栈溢出和谷歌,但我找不到任何。 如果我不尝试设置任何选项,则调用成功并且代码正确运行。
答案 0 :(得分:1)
搜索CUDA SDK附带的示例程序,您将找到cuModuleLoadDataEx的一些示例,尽管它们似乎都没有指定CU_JIT_TARGET。我在matrixMulDrv,vectorAddDrv和其他几个中看到了这个函数调用。
查看这些示例,似乎当optionvalue需要是指向缓冲区的指针(如CU_JIT_INFO_LOG_BUFFER)时,您将该指针作为选项值传递,但是当它需要是简单整数(如CU_JIT_MAX_REGISTERS)时,将整数值转换为void *并传递:
void *optionValues[] = {
(void*)(uintptr_t) CU_TARGET_COMPUTE_20,
};