【问题标题】:cuModuleLoadDataEx optionscuModuleLoadDataEx 选项
【发布时间】:2012-06-07 18:00:21
【问题描述】:

我正在尝试对 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) 我当然尝试在堆栈溢出和谷歌上搜索如何正确设置选项的示例,但我找不到任何。 如果我不尝试设置任何选项,则调用成功并且代码正常运行。

【问题讨论】:

  • 不应该将options 作为指针传递,而将optionValues 作为指向指针的指针传递?
  • 您是否尝试过使用内联 PTX 代替?

标签: cuda


【解决方案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,
};  

【讨论】:

    猜你喜欢
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 2015-07-24
    • 2016-09-13
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多