Совместное использование ресурсов GPU в коде - PullRequest
1 голос
/ 08 февраля 2012

Моя программа использует OpenGL для рисования на экране. Эта задача малоинтенсивна, но чувствительна к задержкам. Другой процессорный поток моей программы делает некоторые вычисления, которые очень интенсивны, но имеют низкий приоритет. Я реализовал эти расчеты, используя OpenCL для запуска на GPU. С тех пор я наблюдаю слишком большую визуальную задержку при рисовании OpenGL.

Можно ли управлять загрузкой графического процессора или планировать задачи на графическом процессоре? Я использую AMD Radeon GPU. Насколько я знаю, для OpenCL есть расширение Device Fission, которое полезно в таких случаях, но поддерживается только для процессоров, не так ли?

Другая вещь, которая меня беспокоит, заключается в том, что системный монитор AMD показывает занятость графического процессора на уровне 55%. Так что, на мой взгляд, должно быть достаточно ресурсов для запуска обеих частей, OpenGL и OpenCL, без остановки.

Обновление. Я провел небольшой эксперимент с моей функцией ядра OpenCL. Глобальный размер работы был ограничен небольшим числом, чтобы гарантировать, что некоторые вычислительные блоки будут простаивать, когда работает ядро ​​OpenCL. Чтобы компенсировать это, каждый рабочий элемент выполняет больше работы. Так что GPU сейчас менее загружен, но ядро ​​работает дольше. В результате OpenGL становится медленнее. Следовательно, похоже, что рисование OpenGL и вычисления OpenCL не могут быть выполнены одновременно. Где я могу найти информацию о том, какие карты поддерживают такую ​​функциональность? А как насчет графических процессоров NVIDIA?

1 Ответ

0 голосов
/ 08 февраля 2012

Мне кажется, ваша проблема может быть ограничена памятью. Это даст много шуток на GPU. Основным узким местом графического процессора является чтение и запись в глобальную память, а также копирование данных в графический процессор и из него.

Чтобы убедиться, что вы не копируете больше данных, чем необходимо, посмотрите, можете ли вы поместить какие-либо общие данные непосредственно в графический процессор, если вы копируете туда и обратно между памятью хоста и устройства. На каких больших массивах данных вы работаете? Небольшие наборы данных = низкая загруженность графического процессора без значительного увеличения производительности по сравнению с процессором.

Большинство графических процессоров могут одновременно выполнять только одну задачу, то есть вы не можете рисовать и рассчитывать одновременно на всех графических процессорах. Поэтому вам придется подождать, пока не начнутся расчеты, и vica verca, которая, конечно, вводит небольшую задержку, если вы рисуете, когда это возможно / не стремитесь к фиксированному FPS, но FPS, который настолько высок, насколько это возможно. .

...