плавать против плаватьN - PullRequest
3 голосов
/ 20 января 2012

Есть ли преимущество при использовании floatN вместо float в OpenCL?

например

float3 position;

и

float posX, posY, posZ;

Спасибо

Ответы [ 3 ]

8 голосов
/ 20 января 2012

Это зависит от аппаратного обеспечения.

Графические процессоры NVidia имеют скалярную архитектуру, поэтому векторы предоставляют им небольшое преимущество по сравнению с написанием чисто скалярного кода.Цитирую Руководство по передовым практикам NVidia OpenCL (ссылка в формате PDF):

Архитектура CUDA представляет собой скалярную архитектуру.Следовательно, при использовании векторных типов и инструкций выигрыш в производительности отсутствует.Они должны использоваться только для удобства.Также в целом лучше иметь больше рабочих элементов, чем использовать большие векторы.

С процессорами и графическими процессорами ATI вы получите больше преимуществ от использования векторов, поскольку в этих архитектурах есть векторные инструкции (хотя яЯ слышал, что это может быть по-другому на последних версиях Radeon. Хотелось бы, чтобы у меня была ссылка на статью, где я читал это.для процессоров:

Ресурсы с плавающей запятой SIMD в CPU (SSE) требуют использования векторизованных типов (float4) для обеспечения генерации упакованного кода SSE и извлечения хорошей производительности из оборудования SIMD.

В этой статье приводится сравнение производительности графических процессоров ATI ядра, записанного с векторами, по сравнению с чисто скалярными типами.

2 голосов
/ 20 января 2012

В архитектурах Nvidia и AMD память разделена на банки по 128 бит.Зачастую чтение одного значения типа float3 или float4 будет быстрее для контроллера памяти, чем чтение трех отдельных значений типа float.

Когда вы читаете значения с плавающей точкой из последовательных адресов памяти, вы в большой степени полагаетесь на компилятор для объединениячитает для вас.Нет гарантии, что posX, posY и posZ находятся в одном банке.Объявление его как float3, как правило, приводит к тому, что расположения компонентных поплавков попадают в один и тот же банк.

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

1 голос
/ 20 января 2012

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

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