Есть ли шаблонные математические функции в 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 здесь.