В настоящее время я работаю над приложением, которое требует хранения и обработки большого количества переменных (~ 4 ГБ в float)
Поскольку точность отдельных переменных менее важна (я знаю, что они будут ограничены), я увидел, что мог бы использовать половину OpenCL вместо float, поскольку это действительно уменьшило бы объем памяти.
Мой вопрос двоякий.
Есть ли какой-то удар по производительности при использовании половины вместо поплавка (я бы создавал графические карты для операций с плавающей запятой)
Есть ли какой-то удар по производительности для смешивания чисел с плавающей точкой и половин в вычислениях? (то есть поплавок раз в полтора.)
Sincerily,
Андреас Фалькенстрём Мериц
Процессоры и графические процессоры ARM имеют встроенную поддержку half
в их ALU, так что вы получите почти двойную скорость, а также значительную экономию энергии. Редактировать: То же самое касается графических процессоров PowerVR.
Настольное оборудование поддерживает только half
в блоках загрузки / хранения и текстурирования, AFAIK. Несмотря на это, я бы ожидал half
текстуры лучше, чем float
текстуры или буферы на любом графическом процессоре. Особенно, если вы можете разумно использовать фильтрацию текстур.
Ядра OpenCL почти всегда привязаны к скорости памяти или скорости ПК. Если вы конвертируете приличную часть ваших данных в половину числа с плавающей запятой, это позволит быстрее передавать ваши значения. Почти наверняка быстрее на любой платформе / устройстве.
Что касается производительности, половина редко хуже, чем поплавок. Я совершенно уверен, что любое устройство, которое поддерживает половину, будет выполнять вычисления так же быстро, как и с плавающей точкой. Опять же, даже если здесь есть небольшие накладные расходы, вы с лихвой восполните это в свои гораздо более высокие сроки перевода.