HIP - модель программирования AMD GPU, соответствующая CUDA от NVIDIA. У меня есть фрагмент кода из исходного кода 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 - это просто псевдоним для целого числа, но что означает {}, когда он вызывается в аргументе?