HIP是与 NVIDIA 的 CUDA 对应的 AMD GPU 编程模型。我有一个我无法完全理解的 HIP 源代码的代码片段。提醒一下,对以下代码片段的理解不需要任何 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)...);
}
我对以下内容感到困惑:
- 如果 F 是一个函数指针,为什么它需要在参数中被双重引用?
- 第一个模板参数
typename... Args
有什么用? - hipLaunchParm 只是整数的别名,但在参数中调用时 {} 是什么意思呢?