Оригинал материала: https://3dnews.ru/173026

Понимание и рассчёт скорости заполнения (fillrate) акселератора

Терминология

О видах памяти и скорости её заполнения высказано столько мнений, что я решил написать статью по этому поводу. Прежде всего давайте определимся с терминологией:

  • Пиксел - самый маленький элемент буфера кадров, обычно 16-ти или 32-х битный. Так же может обладать Z координатой, тоже 16-ти или 32-х битной.
  • Сэмпл Текселя - самый маленький элемент текстуры. Обычно 16-ти или 32-х битный.
  • Тексел - цвет текстуры, принадлежащий пикселу. Обычно он либо точечно апроксимирован (один сэмл текселя), билинейно фильтрирован (четыре сэмпла текселей) или трилинейно фильтрирован (восемь сэмплов текселей)

Как подсчитать ширину канала памяти?

Для этого нужно знать всего две вещи - ширину шины в битах и частоту памяти в мегагерцах. Память с шириной шины 128 бит может за один раз передавать 16 байт, так как один байт это восемь бит (128бит / 8 = 16 байт). Double Data Rate (DDR) память имеет в два раза большую эффективную частоту, так как за один такт она передаёт данные два раза.

Память с 128-бит шиной и 166Mhz SDRAM может максимально передавать 128бит / 8 бит в байте * 166 мегагерц = 2.656 гигабайт в секунду.

Память с 128-бит шиной и 166Mhz DDR способна передавать 128 бит / 8 бит в байте * 166 мегагерц * 2 (поскольку DDR) = 5.312 гигабайт в секунду

Как посчитать максимальную скорость заполнения?

Для рассчёта максимального теоретического fillrate вы должны знать следующее:

  • Доступную ширину канала памяти (см. выше)
  • Глубину пиксела (сколько бит - 16 или 32)
  • Глубину Z буфера (16 или 32 бита)
  • Глубину текселя

Когда акселератор рендерит треугольник, он разбивает его на единичные пиксели. В нормальной ситуации он делает с каждым пикселем следующее:

  • Читает старое значение Z из Z-буфера
  • Пишет новое значение в Z-буфер
  • Считывает тексел(и)
  • Пишет новый пиксел в Z-буфер

Учитывая это мы можем рассчитать скорость заполнения для заданной ширины канала памяти.

В первом примере у нас до 16 байт, способных пройти через систему памяти для каждого пиксела. Теперь берём для нашего примера память с 128 битной шиной и частотой в 166 мегагерц, смотрим сколько можно протолкнуть через эту память, уместив в 2.656 гигабайт в секунду. Получается 2.656 / 16 = 166 мегапикселей в секунду. Вот несколько моделей и их требований по передаче данных через шину для одного пиксела:

  • 32 бита, 32-х битный Z-буфер, 32-х битная текстура = 16 байт на пиксел
  • 16 бит, 32-х битный Z-буфер, 16-ти битная текстура = 12 байт на пиксел
  • 32 бит, 16-ти битный Z-буфер, 16-ти битная текстура = 10 байт на пиксел
  • 16 бит, 16-ти битный Z-буфер, 16-ти битная текстура = 8 байт на пиксел
  • 16 бит, 16-ти битный Z-буфер без текстуры = 6 байт на пиксл

Вот несколько подсчётов:

Чип со 128-ми битной шиной на 166Mhz SDRAM (к примеру GeForce на SDRAM)

  • Максимальная скорость заполнения в полном 32-х битном режиме (16 байт на пиксел) - 166 мегапикселов в секунду
  • Максимальная скорость заполнения в 16-ти битном режиме (8 байт на пиксел) - 332 мегапиксела в секунду

Чип с шиной 128 бит и частотой 166Mhz типа DDR (к примеру GeForce на DDR)

  • Максимальная скорость заполнения в 32-х битном режиме при 16 байтах на пиксел 322 мегапиксела в секунду
  • Максимальная скорость заполнения в 16-ти битном режиме при 8-ми байтах на пиксел - 664 мегапиксела в секунду

Чип с шириной шины в 128 бит и 183Mhz типа SDRAM (например TNT2 Ultra)

  • Максимальная скорость заполнения в 32-х битном режиме при 16-ти байтах на пиксел - 183 мегапиксела
  • Максимальная скорость заполнения в 16-ти битном режиме при 8-ми байтах на пиксел - 366 мегапикселов в секунду

Получается, что TNT2 Ultra способна рендерить в 32-х битном режиме больше пикселей в секунду, нежели SDRAM версия GeForce. Примечание: конвейер TNT2 лимитирован порогом в 300 мегапикселов в секунду. Можно так же подсчитать, какой поток данных требуется обновления визуального ряда:

Ширина экрана в пикселах * высота экрана * байт на пиксел * частоту регенерации

Примечание: байт на пиксел = 2 для 16-ти битного буфера кадров и 4 для 32-х битного.
Пример - 1600x1200*4*75Hz=576Мб в секунду, так что получается 20% теоретической скорости заполнения TNT2 Ultra, а значит на 20% уменьшается теоретическая скорость заполнения. Другим случаем является использование памяти в случае мультитекстурирования. Насколько ещё одна текстура опускает скорость заполнения в большой степени зависит от приложения, фактора увеличения текстуры, ориентации и др. Короче, если не вникать в детали, то шаблоны тоже отнимают часть канала памяти. Я это писал просто, чтобы показать как 3D акселераторы используют память, а не для того, чтобы рассуждать о разных типах памяти. Это просто математика.


Дополнительные материалы:

Unreal Tournament 2003 в роли бенчмарка
3DMark 2003: увидеть будущее
Max Payne в роли бенчмарка
Serious Sam в роли бенчмарка
Тестовый пакет 3DMark 2001 Pro
Тестовый пакет 3DMark 2000



Оригинал материала: https://3dnews.ru/173026