Сила шейдеров

для раздела Блоги

Русский оверклокинг, бессмысленный и беспощадный
Ivan_FCB об этой статье


К написанию этой статьи меня подтолкнул Foxtrot, в рамках обсуждения задания «Сила шейдеров». На коварный вопрос о возможности/невозможности использования карт с программной обрезкой конвейеров Вашему покорному слуге было предложено не выказывать восточную хитрость, обойдясь демонстрацией потенциала такого «финта ушами», с вероятностью огрести небольшой бонус для команды. Ну, а так как я весьма меркантильная сволочь, предложение было воспринято на «ура!».
Поясню, что моя видеокарта относится к последнему поколению графических процессоров nVidia с неунифицированной архитектурой. Т.е., на руках у меня чип G71, производившийся в рамках 90нм техпроцесса, у которого был отключен один квад пиксельных процессоров и один вершинный процессор. Итак, приветствуем/завидуем/жалеем меня – 7900GS, обладающая 5 пиксельными квадами (20 пиксельных процессоров) и 7 вершинными процессорами.
Логическую схему чипа можно увидеть на этой картинке:

Будучи не шибко просветленным, даже по прочтении кучи заумных статей об этой архитектуре, возможно, дальше я выскажу немало бреда. Но, может быть, я, при каком-то приближении, окажусь прав.
В принципе, схему работы этого чипа я представил так – процессор подает данные о рассчитываемой сцене на GPU. Блок вершинных процессоров рассчитывает треугольники для сцены, а пиксельные квады натягивают на рассчитанные треугольники текстуры. Т.о., можно сказать, что первым (в хронологическом порядке) фактором, который будет ограничивать производительность GPU, будет скорость работы вершинных процессоров – все-таки, именно с результатами его работы придется работать пиксельным конвейерам. (sic! я не умаляю важности того факта, что таким «бутылочным горлышком» может быть любой другой блок GPU, но, мне показалось оптимальным исходить именно от этой точки зрения).

Как это все начиналось.
Еще в самом начале обдумывания задания, которое, как мне кажется, было направлено на выявление самой эффективной архитектуры ГП для 3DMark05, я учитывал возможность отключить неэффективно работающие блоки, которые негативно сказываются на коэффициенте “Total Score/(ppu+vpu)”. Примечание: здесь и далее - PPU как «пиксельный процессор», VPU как «вершинный процессор». Плюс, отключение лишних процессоров приводило к тому, что появлялись предпосылки к избыточности пропускной способности памяти и блоков ROP, а так же возможность большего разгона.
Для начала, нужно было выявить то соотношение квадов ppu и vpu, при котором коэффициент бы достигал наилучших значений. Для этого карта была прошита частотами GPU=500MHz(delta=0), MEM=700MHz и оставлен только профиль для 3D, т.к. при наличии раздельных профилей для 2D/3D в GT3 бессистемно происходил сброс частот секунд за 7 до окончания теста, с соответствующим падением результата субтеста – бороться с этим явлением было лень, т.к. дело, скорее всего, в перегреве и соответствующем переходе в режим 2D/3D-low.

Конфигурация:
1. Core 2 Duo E6400 (2MB L2, 266FSB) @ 3.52GHz (440 FSB) 1,625в
2. Abit IP35-E (Vnb=1,49, Vtt=1,45, PCI-E=115MHz, PL=6)
3. ApogeeGT DDRII-1066 @ 1056MHz 4-5-5-14-35 2,3в
4. Прочее из профиля
Программное обеспечение:
1. Windows XP SP2, урезанная посредством nLite.
2. ForceWare 163.71
3. NVStrap driver из состава RivaTuner 2.0 FR
4. Intel 8.5.0.1008
5. DirectX 9.0c с обновлениями от 08.2008.
6. 3DMark05 v.1.3.0 Professional

C целью реализации своих планов по «порабощению человечества», был придуман/одобрен следующий некислый алгоритм: отключать последовательно по одному вершинному конвейеру для каждой из 5 возможных комбинаций квадов PPU. Т.е., провести 35 прогонов теста и найти наиболее оптимальное соотношение активных блоков ppu и vpu для достижения наилучшего коэффициента и, руководствуясь результатами анализа полученных результатов, выжать «по максимуму» уже в максимальном разгоне, слегка подкорректировав дельту и применив прочие «тра-ля-ля» для увеличения результатов.
Начнем рассматривать результаты и пытаться их анализировать в хронологическом порядке (статья писалась по ходу дела: вечером - бенчи, утром – статья… Все по канонам классической литературы).

5 квадов (20 пиксельных процессоров)

Наилучшей комбинацией, в которой эффективность конвейеров достигает своего пика, является комбинация 5 квадов процессоров пикселей с 6 процессорами вершин, хотя, учитывая погрешность, эффективными являются все комбинации диапазона 7-5 vpu. GT1, по видимому, зависит, в основном, от производительности пиксельных процессоров, чего не скажешь о GT2 и GT3 – там картина более сложная. И начиная с 2 vpu падение производительности только лишь чуть не дотягивает до теоретических значений потери производительности блока процессоров вершин. Производительность в тесте “Pixel shader” начинает заметно снижаться уже при использовании 3 vpu.

4 квада (16 пиксельных процессоров)

Заметно возросла общая эффективность конвейеров – примерно на 13-15%. Видимо, сказывается меньшая нагрузка на блоки ROP и пропускную способность памяти. Теперь падение производительности, которое бы кореллировало с теорией, происходит только в случае с одним используемым vpu. Начинает проявляться тенденция к тому, что на n квадов требуется большее n количество vpu для максимально эффективной работы GPU. Тенденция к тому, что GT2 наиболее зависим от скорости вершинных процессоров, проявляется все яснее. Производительность пиксельных конвейеров в тесте “Pixel shader” закономерно снизилась (за исключением комбинации 16pp:1vp, где случилась дополнительная просадка в 10% по сравнению с использованием 2 vpu), но цифры тестов вертексных шейдеров, в принципе, те же, что и в случае с 5 квадами.

3 квада (12 пиксельных процессоров)

В этом режиме, практически, на 16 блоков ROP приходится всего 12 пиксельных процессоров, что позволяет с уверенностью говорить о достижении избыточности этих блоков для подобной конфигурации. В остальном, полученная картина становится похожа на таковую в случае с 4 процессорами квадов. Разве что, наиболее эффективным является наличие 5 vpu для загрузки 12 ppu. Цифры теоретических тестов вершинных шейдеров вновь повторяются – видимо, тест заточен именно под vpu. А в случае с тестом “Pixel shader” количество vpu все же оказывает влияние.

2 квада (8 пиксельных процессоров)

Переломным моментом, когда скорость падения итогового балла возрастает, можно назвать переход на использование 3 процессоров вершин. Т.е., оптимальным вариантом для 3Dmark05, в случае восьми активных пиксельных процессоров, является присутствие 4 vpu. Или, используя «мой подход», можно сказать, что четыре процессора вершин могут в полной мере загрузить работой 2 пиксельных квада. Налицо сильная зависимость GT2 и GT3 от вершинников, в то время, как катастрофический удар по GT1 наносит переход с двух на один vpu – видимо, один vpu никак не может считаться достаточным для работы сразу двух процессоров квадов даже в относительно зависящем от производительности пиксельных конвейеров тесте.
В "теории" мы видим отсутствие значительного влияния наличия/отсутствия вершинников на работу пиксельных процессоров. Производительность vpu, в случае использования сложных вершинных шейдеров, гораздо лучше кореллирует с теорией.

1 квад (4 пиксельных процессора)

Нагляден тот факт, что обрезка вершинных конвейеров с 7 штук до 3 наносит минимальный ущерб итоговому баллу – в случае перехода с 4 вершинников на 3 (т.е., при 25% сокращении бюджета вершинных процессоров) мы имеем максимальное падение fps в 9,28% в GT2. Интересен и тот факт, о котором мы уже говорили ранее – GT2 наиболее зависит от производительности вершинных процессоров, GT3 в этом «параде зависимых» находится на втором месте.
Кстати, если рассматривать теоретическую производительность, то еще раз становится абсолютно очевидной малая зависимость теста “Pixel shader” от количества vpu. В то же время, сокращение вершинных процессоров начинает оказывать существенное влияние на скорость в тестах “Vertex Shader Simple/Complex” тоже далеко не сразу – критической точкой мне видится переход с 6 на 5 вершинников. Думается, производительность в этом тесте ограничивается, очевидно, относительно кривой работой коммутатора, который не может толком нагрузить все вершинники работой – опять таки, цифры повторяют таковые в других вариантах конфигурации ppu. Можно привести такую таблицу эффективности работы vpu, приняв за 100% производительность vpu в конфигурации 4ppu:1vpu для теста “Vertex shader – Complex”:

Как видно, заметное падение эффективности происходит при переходе от 5 vpu к 6. Думается, в случае 7900GTX, у которой наличествуют 8 вершинников, эффективность работы каждого вершинника будет еще ниже.

Выводы
Делая резюме, хочется отметить, что приведенные цифры эффективности работы конвейеров действительны только для бенчмарка Futuremark 3DMark05 и только для ядра G70/G71. Вкратце же, итоги можно перечислить по пунктам:
1. Даже в рамках одного бенчмарка, требования к соотношению процессоров вершин/пикселей могут разительно различаться. Так, если GT1 требует соотношения qpp:vpu как 1:1,5 (цифра-ориентир, не более того – я не претендую на ее математическую обоснованность), то GT2/GT3 требуют как минимум 2-3 vpu на каждый квад.
2. Второе умозаключение автоматически следует из первого – переход на унифицированную архитектуру оправдан. Динамическое изменение баланса «виртуальных» vpu/ppu/gpu позволяет максимально эффективно использовать имеющиеся ресурсы графического процессора.
3. В рамках неунифицированных архитектур наращивание количества исполнительных блоков с целью повышения производительности неэффективно, без изменения подхода к нагрузке этих блоков. В моем случае, мне кажется очевидным, что наращивание количества тех же vpu в конечном итоге приведет к отсутствию прироста производительности из-за нарастающего падения эффективности каждого отдельного процессора вершин. Возможно, именно поэтому ATI внедрила в GPU поколения R5xx специальный блок Ultra Threaded Dispatcher, отвечавший за повышение эффективности использования вычислительных мощностей.
4. Эффективным способом повышения эффективности работы шейдерных процессоров является повышение рабочих частот графического чипа. Может быть, именно поэтому nVidia в поколении G80 пошла на раздельное тактование различных блоков GPU (тут я хотел бы подчеркнуть, что и раньше, со времен G70, практиковалось разделение частот для блока геометрии и прочего, но, в случае с G80, мне видится подход «по взрослому»).
5. Слабый графический процессор (a-la 4ppu:1vpu) в окружении 256bit шины памяти и 16 блоков ROP так же смешон, как R600 со 128bit шиной, пускай такая память и позволяет раскрыть весь потенциал чипа.

На этом заканчиваю свою статью и, с уважением к Вам, раскланиваюсь)

PS. Архив со скриншотами и валидациями античита можно скачать по этой ссылке. Пароль архива - 1221.
Telegram-канал @overclockers_news - это удобный способ следить за новыми материалами на сайте. С картинками, расширенными описаниями и без рекламы.
Оценитe материал

Возможно вас заинтересует

Популярные новости

Сейчас обсуждают