jer*_*yin 0 c++ templates function-pointers hip
HIP是与NVIDIA的CUDA对应的AMD GPU编程模型。我有一个来自 HIP 源代码的代码片段,我无法完全理解。提醒一下,理解以下代码snippnet不需要任何HIP背景知识,但更多的是C++模板/函数指针的问题。
typedef int hipLaunchParm;
template <typename... Args, typename F = void (*)(hipLaunchParm, Args...)>
inline void hipLaunchKernel(F&& kernel, const dim3& numBlocks, const dim3& dimBlocks,
std::uint32_t groupMemBytes, hipStream_t stream, Args... args)
{
hipLaunchKernelGGL(kernel, numBlocks, dimBlocks, groupMemBytes, stream,
hipLaunchParm{}, std::move(args)...);
}
Run Code Online (Sandbox Code Playgroud)
我对以下内容感到困惑:
typename... Args有什么用?如果 F 是一个函数指针,为什么它需要在参数中被双重引用?
F 不一定是函数指针。那只是默认类型。您可以传递任何可调用的†,只要它可以使用给定的参数调用,并且您希望避免在不需要时复制有状态的函数对象。有些甚至可能无法复制。这可能是他们在这里使用参考的原因。
†就 C++ 而言。我不知道 HIP/CUDA 可能有的限制。
第一个模板参数
typename... Args有什么用?
它允许将可变数量的参数传递给委托函数。
hipLaunchParm只是integer的别名,但是在参数中调用时{}是什么意思呢?
T{}是临时值初始化的语法。在整数的情况下,这意味着零作为参数传递。
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |