Есть ли шаблонные математические функции в cuda?

Я искал шаблонную математическую функцию в cuda, и я не могу найти ее. В обычном C++, если я вызываю std::sqrt, он шаблонизируется и будет исполнять другую версию в зависимости от того, является ли аргумент float или double. Я хочу что-то вроде этого для кода устройства CUDA. В моих ядрах реальный тип передается в качестве параметра шаблона, и сейчас мне приходится выбирать между использованием sqrtf для float и sqrt для double. Я думал, что тяга может иметь эту функцию, но это только для комплексных чисел.

0 ответов

[Превращение комментариев, удаленного ответа и некоторой дополнительной истории в ответ, чтобы убрать это из очереди неотвеченных для тега CUDA, пожалуйста, отредактируйте и измените по своему усмотрению]

TL; DR; да

В исходный набор инструментов на основе Open64 была добавлена ​​приличная поддержка шаблонов в течение 2008-2009 гг. (Что сделало возможными такие вещи, как Komrade и более поздний Thrust), а современный интерфейс действительно является правильным подмножеством C++. Поскольку поддержка шаблонов и компиляция хоста C++ были встроены в цепочку инструментов где-то в цикле разработки CUDA 2, вспомогательный код и математические библиотеки превратились в полностью основанную на шаблонах систему перегрузки.

В результате стандартные математические функции в CUDA перегружаются в зависимости от типа аргумента, поэтому вы можете написать sqrt(float) для вычисления квадратного корня одинарной точности, или sqrt(double) для вычисления квадратного корня двойной точности.

Это описано в документации CUDA здесь.

Другие вопросы по тегам