Плавающие точки половинной точности в CUDA - PullRequest
6 голосов
/ 27 июля 2011

Есть ли в CUDA что-то с плавающей точкой половинной точности?

Справочная информация: я хочу манипулировать текстурой opengl, используя glTexSubImage3D, с данными из PBO, которые я генерирую с помощью CUDA. Текстура хранится в формате GL_INTENSITY16 (который является плавающим типом с половинной точностью afaik), и я не хочу использовать glPixelTransferf (GL_x_SCALE, ...) для масштабирования от целочисленных значений, так как кажется, что это гораздо быстрее без масштабирования.

Любой совет?

1 Ответ

14 голосов
/ 27 июля 2011

CUDA только изначально поддерживает 32- и 64-битные типы с плавающей точностью.

И драйверы, и API-интерфейсы среды выполнения поддерживают привязку к текстурам с плавающей половиной, но в результате чтения в ядре будет возвращено значение, переведенное в 32-битную плавающуюномер точки.Стандартные библиотеки CUDA включают функции __half2float() и __float2half_rn() для преобразования типов с плавающей запятой половинной и одинарной точности (половина с плавающей запятой хранится в 16-битном целом числе).Таким образом, можно было бы выполнять манипуляции в 32-битных ядрах с точностью чтения и записи, используя 16-битные типы.Но для родной 16-битной плавающей запятой, я думаю, вам не повезло.


ПРАВКА, чтобы добавить, что в 2015 году NVIDIA расширила поддержку с плавающей запятой половинной точности с помощью инструментария CUDA 7.5, добавив half иhalf2 типов и встроенных функций для их обработки.Также было объявлено, что (еще не выпущенная) архитектура Pascal будет поддерживать совместимые с IEE754-2008 операции с половинной точностью в аппаратном обеспечении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...