OpenCL, половина против производительности с плавающей точкой

В настоящее время я работаю над приложением, которое требует хранения и обработки большого количества переменных (~ 4 ГБ в float)

Поскольку точность отдельных переменных менее важна (я знаю, что они будут ограничены), я увидел, что мог бы использовать половину OpenCL вместо float, поскольку это действительно уменьшило бы объем памяти.

Мой вопрос двоякий.

  • Есть ли какой-то удар по производительности при использовании половины вместо поплавка (я бы создавал графические карты для операций с плавающей запятой)

  • Есть ли какой-то удар по производительности для смешивания чисел с плавающей точкой и половин в вычислениях? (то есть поплавок раз в полтора.)

Sincerily,
Андреас Фалькенстрём Мериц

1

Решение

Процессоры и графические процессоры ARM имеют встроенную поддержку half в их ALU, так что вы получите почти двойную скорость, а также значительную экономию энергии. Редактировать: То же самое касается графических процессоров PowerVR.

Настольное оборудование поддерживает только half в блоках загрузки / хранения и текстурирования, AFAIK. Несмотря на это, я бы ожидал half текстуры лучше, чем float текстуры или буферы на любом графическом процессоре. Особенно, если вы можете разумно использовать фильтрацию текстур.

4

Другие решения

Ядра OpenCL почти всегда привязаны к скорости памяти или скорости ПК. Если вы конвертируете приличную часть ваших данных в половину числа с плавающей запятой, это позволит быстрее передавать ваши значения. Почти наверняка быстрее на любой платформе / устройстве.

Что касается производительности, половина редко хуже, чем поплавок. Я совершенно уверен, что любое устройство, которое поддерживает половину, будет выполнять вычисления так же быстро, как и с плавающей точкой. Опять же, даже если здесь есть небольшие накладные расходы, вы с лихвой восполните это в свои гораздо более высокие сроки перевода.

2

По вопросам рекламы [email protected]