从__global__函数中调用__global__函数的替代方法?

时间:2016-10-15 12:12:31

标签: cuda

我有一些足够有用的代码,可以作为自己的内核并独立运行。另一方面,我有另一段代码,它使用第一段作为大型算法的阶段。因此,我希望两者都通过内核启动调用第一个函数作为简单的devsion。

现在,您无法从另一个__global__函数调用__global__函数;并且你不允许将一个函数标记为__global__ __device__(这实在太糟糕了,我原以为这是可能的)。那么你可以 如何进行该函数调用?

1 个答案:

答案 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));  }

哪个有效,但有一个虚拟包装器,你需要复制函数头,这有时很繁琐,所以我不喜欢这种方法。