Как SLI решает, какой VBO принадлежит какому GPU в OpenGL?
Я стремлюсь использовать SLI в режиме AFR для увеличения FPS. У меня сложилось впечатление, что драйвер NVIDIA SLI будет автоматически и интеллектуально распределять VBO для отдельных графических процессоров. Это правильно?
У меня есть код, который имеет большое количество вершин / граней, представленных VAO с тремя различными VBO (вершины, цвет, индексы). Нет увеличения fps при использовании двойного GPU с SLI.
Я дублирую VAO и VBO с одними и теми же вершинами / гранями и чередую вызов glDrawElements между двумя VAO, надеясь, что драйвер NVIDIA SLI будет достаточно умен, чтобы знать, что один VAO для одного GPU, но, к сожалению, по-прежнему не увеличивается fps. Может кто-нибудь сообщить мне, что я сделал не так?
Я также попытался закомментировать один из вызовов glDrawElements для одного из VAO, и он показывает двойной FPS и мерцающую сцену с реальной сценой и черным экраном, как и ожидалось.
1 ответ
Как уже упоминалось здесь,
Следует отметить, что хотя частота, с которой поступают кадры, может быть удвоена, время создания кадра не уменьшается
Кроме того, я никогда не слышал о VAO или VBO, которые были посвящены одному GPU. Насколько я знаю, оба адаптера имеют одинаковые клонированные буферы. Дублирование происходит без вашего ведома, и каждый графический процессор использует свою собственную копию для создания своей части кадра. Я могу ошибаться, но я сомневаюсь в этом.
Вот почему, если у вас есть адаптеры VRAM 2x2 ГБ, вы не получите 4 ГБ VRAM. Вы все еще работаете с 2 ГБ. Кроме того, если ваши адаптеры SLI имеют разную емкость, память большей карты уменьшается, чтобы выровняться с меньшей. Весь прирост производительности достигается за счет параллельной обработки двух графических процессоров и того факта, что пропускная способность вашей памяти в два раза больше. Насколько мне известно, записи в память выполняются в многоадресном режиме, поэтому здесь нет больших накладных расходов.
РЕДАКТИРОВАТЬ: Прочитайте эти интересные моменты о SFR и AFR. Оказывается, что AFR рекомендуется для большой загрузки вершин, тогда как SFR лучше для загрузки пиксельных шейдеров. Это была интересная находка даже для меня. При использовании AFR вы также должны убедиться, что вы используете двойной буфер, чтобы получить максимальную отдачу от него. Недостаток нескольких буферов буквально убивает AFR. ВЫКЛЮЧИТЕ vsync - это тоже убивает!