2016-12-02 2 views
1

Я разрабатываю для графического процессора OpenCL 1.2.OpenCL half square root

Я пытаюсь использовать функцию половинного квадратного корня, чтобы вычислить квадратный корень из моего полутипа.

Однако для всех корневых функций half_square в конечном итоге это расширение макроса к стандартной функции квадратного корня.

Это приводит к ошибкам компилятора, так как ни одна из функций перегрузки не соответствует полутипу.

Я использую следующую прагму в моем файле ядро ​​#pragma OPENCL EXTENSION cl_khr_fp16 : enable

+0

Вы можете попробовать 'half_sqrt (x)'. Это гарантирует минимум 10 бит точности, но поставщик все же может решить реализовать его с помощью float. – Neapolitan

ответ

2

half поддержка типа в OpenCL доступна только если расширение cl_khr_fp16 доступно. Он является дополнительным и недоступен на всех устройствах. Приложение может запрашивать информацию о конфигурации с помощью op-кода CL_DEVICE_HALF_FP_CONFIG с clGetDeviceInfo для устройства OpenCL, которое поддерживает половину точности с плавающей запятой. См https://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/cl_khr_fp16.html

Исключением является, если изображения поддерживаются вы можете иметь изображения, которые содержат half типы, но все операции чтения и записи и расчеты производятся с одинарной точностью float. Другое исключение состоит в том, что вы можете использовать функции Load/Store Vector Data (например, vload_half) для загрузки и сохранения значений half из памяти в float скаляров и векторов. В любом случае такие вычисления, как sqrt, выполняются в half, просто хранение.

+0

Я использую Nvidea K20 GPU. Кажется, что половина хранения доступна, но не вычисляется. Спасибо за Ваш ответ. – johng