2011-11-22 59 views
3

关于我遇到的链接和多重定义函数时遇到的另一个问题,我想简单地将我的cuda代码包装在单例类中。具有私有全局内核方法的C++类

沿

class Singleton{ 
public: 
    __host__ void doSomething(); 
private: 
    __global__ void someKernel(); 
}; 

即显然只装置可用于方法和上面给出“无效存储器限定符的组合”的东西。我想将我的代码包装在一个类中以获得更多结构化的代码,但是如果我需要从外部放置每个内核,则没有多大意义。

同样的问题已经在NVIDIA的网站先前提出的,但没有一个答案 http://forums.nvidia.com/index.php?showtopic=176623

我也理解与这个指针的问题,但即使是静态方法不能是全球性的。

+1

这里真的有问题吗? CUDA语言不允许在类中使用'__global__'声明,大多数原因与内核无法调用内核的原因相同,并且不支持外部链接。工具链和硬件都不能做任何支持这些事情所需的东西。 – talonmies

+0

尽管它们看起来很优雅,但它们是不好的选择。继续使用静态方法或全局函数,它们可以帮助您调用对象及其功能。因此,您也可以维护状态(如果需要) – sarat

回答

1

如果你想调用代码看起来更加有组织,你可以从方法调用你的内核,如果有帮助的话。

+0

是的静态成员应该没问题。无论如何,我打算通过参数将各种设备指针传递给内核。 – JoeTaicoon

+0

我其实并没有看到你问题中的最后一行,所以我的回答变得毫无用处。对于那个很抱歉。 – Vlad

+0

写道“从一个方法调用你的内核”。想想看,在类中使用静态内核方法或者在类外部使用内核函数时,使用C++在ah文件中定义类并在cpp文件或cu文件中实现它的方式会产生很大差异。 – JoeTaicoon