Чи варто турбуватися про місце відліку GPU?


9

Чи впливає місцеположення, яке стосується продуктивності графічного процесора, як і продуктивність процесора?

Наприклад, якщо я надішлю 200 команд малювання до графічного процесора, чи побачу (потенційно) помітну різницю, якщо дані кожної команди є суміжними в пам'яті замість того, щоб стрибати навколо буферів / карт текстур?

Побічне запитання: я припускаю, що GPU захищає від помилкових проблем спільного використання, маючи більшість ресурсів, незмінних. Але у випадку, коли їх немає, це те, чому нитки завжди виконують чотири фрагменти?

Відповіді:


10

Місцевість довідника має значення, але вам не потрібно так сильно хвилюватися ... тому що ви не маєте абсолютного контролю.

Під час використання OpenGL / DirectX у вас зазвичай обмежений контроль над компонуванням пам'яті, драйвер буде робити все інше. Наприклад, ви можете спробувати декілька макетів вершинних буферів, таких як використання перемежованих або непереплетених даних вершин, і залежно від ваших даних / драйвера / GPU продуктивність буде відрізнятися. Профілюйте та виберіть те, що найкраще відповідає вашій заявці.

Наприклад, в оптимізації конвеєра GPU Gems Pipeline, локальність посилання згадується двічі , перший:

Доступ до даних вершин відносно послідовно. Сучасні графічні процесори кешують пам'ять під час отримання вершин. Як і в будь-якій ієрархії пам'яті, просторова локалізація посилань допомагає максимізувати звернення в кеш, зменшуючи, таким чином, вимоги до пропускної здатності.

І друге

Оптимізуйте кеш вершин після T і L. Сучасні графічні процесори мають невеликий кеш-пам'ять «перший-в-перший» (FIFO), який зберігає результат останніх перетворених вершин; попадання в цей кеш економить усі роботи з трансформації та освітлення, а також усі роботи, виконані раніше в трубопроводі. Щоб скористатися цим кешем, ви повинні використовувати індексовані примітиви, і ви повинні замовити вершини, щоб максимізувати локальність посилання над сіткою. Є доступні інструменти - включаючи D3DX і NVTriStrip (NVIDIA 2003) - які можуть допомогти вам у виконанні цього завдання.

На мій погляд, ці рекомендації відповідають тому, про що я говорив, і означають, що ви не маєте абсолютного контролю над компонуванням пам'яті, але те, над чим ви маєте контроль, наприклад, як викладені всі вершини VBO, може впливати на продуктивність.

Якщо у вашій програмі є ефективність, спочатку слід виявити вузьке місце, можливо, це не проблема місцевості посилання даних, але це може бути через те, що існує величезна кількість даних без відсікання, наприклад, ви не здійснюєте вибивання фрусту. і т. д. Ви можете перевірити мою відповідь тут по темі.

Я думаю, що вам слід більше турбуватися про місце розташування посилань при використанні OpenCL / CUDA, якщо ви часто мали абсолютний контроль над компонуванням пам'яті.


3

Спочатку графічні процесори використовувались лише для мультимедійних програм, які демонструють невелике повторне використання даних. По мірі того, як графічні процесори все частіше використовуються для додатків загального призначення (отже, термін GPGPU), вони тепер містять кеши керованого обладнання великих розмірів, наприклад, у графічному графічному процесорі Fermi є 768 КБ кеш-пам'яті останнього рівня, у графічному процесорі Kepler - 1536 кб кеш-пам'ять останнього рівня, а GPU Maxwell має 2048 Кб кешу останнього рівня. Це, поряд із великим обсягом досліджень кеш-процесорів GPU, показує, що локальність даних, безумовно, важлива для GPU. Детальні відомості див. У моєму опитувальному документі та посилання на вищезазначене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.