CUDA驱动程序API和函数管理

时间:2012-05-03 16:11:31

标签: c++ cuda c++11 static-linking name-mangling

我有一个需要C ++ 11的项目,因此我将文件分为两类:使用C ++ 11的文件和使用C ++ 03的文件,因此与nvcc编译器兼容。当我的内核不是模板函数时,很容易加载模块并使用cuModuleGetDataEx查找函数名称。但是,当内核是模板时,函数名称在显式特化后会被破坏。这使得在使用CUDA Driver API加载模块后很难获得函数的句柄。例如,考虑这个功能。

template <class T, class SizeType>
global void
vector_add(const T* a, const T* b, T* c, const SizeType dim)
{
    const SizeType i = blockIdx.x * blockDim.x + threadIdx.x;
    if (i < dim) { c[i] = a[i] + b[i]; }
}

将其编译为PTX代码后,受损的名称为_Z10vector_addIfjEvPKT_S2_PS0_T0_。如何从主机代码中轻松查找和加载模板内核函数,而无需在文件中手动查找并复制其名称?

1 个答案:

答案 0 :(得分:1)

  

Blockquote我有一个需要C ++ 11的项目。

这一定是个玩笑,你的程序确实需要原型编译器...... 你没有提到你正在使用的编译器,但它看起来像gcc。

Know your compiler

我很确定你的CUDA部分不需要C ++ 11,把所有内容都放在C ++ 03文件中并像往常一样使用库,如果需要链接到C ++ 11原型编译器生成的话 - 可执行,这是最先进的。