我有一些足够有用的代码,可以作为自己的内核并独立运行。另一方面,我有另一段代码,它使用第一段作为大型算法的阶段。因此,我希望两者都通过内核启动调用第一个函数作为简单的devsion。
现在,您无法从另一个__global__
函数调用__global__
函数;并且你不允许将一个函数标记为__global__
__device__
(这实在太糟糕了,我原以为这是可能的)。那么你可以 如何进行该函数调用?
答案 0 :(得分:2)
我的解决方法是:
namespace detail {
__device__ void foo(int) { /* ... */ }
} // namespace detail
__global__ void foo(int x) { detail::foo(x); }
__global__ void bar(int x) { detail::foo(baz(x)); }
哪个有效,但有一个虚拟包装器,你需要复制函数头,这有时很繁琐,所以我不喜欢这种方法。