Пожалуй, большинство проблем, возникающих при сборке нового компьютера или модернизации старого, связано с видеокартой. При этом решаются проблемы чаще всего методом перебора драйверов или простой заменой одной видеокарты на другую. А может, нужно просто получше разобраться в принципах работы графической подсистемы современного компьютера и применить, так сказать, научный подход? Если вы - сторонник второго метода, тогда эта статья - для вас.
Зачем AGP?
Все знают, что Accelerated Graphics Port (AGP) - особая высокоскоростная шина, предназначенная специально для видеокарты, в отличие от универсальных PCI и ISA. Она появилась одновременно с чипсетами для процессоров семейства Intel Pentium-II и теперь используется повсеместно. Для чего же потребовалось создавать эту шину, ведь до нее видеокарты нормально работали и на шине PCI?
Что такое 3D-ускоритель? Это, фактически, процессор, рассчитывающий в реальном масштабе времени трехмерную сцену (рендеринг). Сейчас общепринята полигональная модель этой самой сцены, т.е. объекты состоят из полигонов (треугольников), покрытых текстурами. Задача видеокарты, в составе которой "трудится" 3D-ускоритель, - принимать координаты треугольников, заполнять их одной или несколькими текстурами (текстурирование), рассчитывать освещенность, прозрачность, рельефность и т.п., проецировать на двумерную плоскость экрана, рассчитывая перекрытие одних объектов другими (используется Z-буфер) и др. Так как работа должна выполняться максимально быстро (вам ведь нужно хотя бы 30 кадров в том же "кваке"), все операции над каждым пикселом производятся конвейерно - каждый пиксел проходит несколько отдельных независимых стадий, одновременно в обработке находятся несколько пикселов - на разных стадиях. Понятно, что данные (а в первую очередь текстуры, накладываемые попиксельно на каждый треугольник) должны подаваться тоже непрерывно, чтобы конвейер не останавливался.
Сначала видеокарты с 3D-ускорителями работали с памятью по шине PCI, закачивая текстуры в свою набортную (локальную) память, к которой и обращался конвейер рендеринга в ходе работы. С ростом сложности трехмерных сцен и повышением качества и размера текстур возникли две проблемы: 1) нужна обширная локальная видеопамять; 2) нужно обеспечить максимальную скорость подачи данных на конвейер. Шина PCI с задачей скорости не справлялась, так как на ней работает много других устройств. Видеопамять дорога, возможности ее расширения в общем случае отсутствуют. В итоге фирма Intel разрабатывает новую локальную шину на основе все той же PCI, но с учетом специфических требований видеокарт с 3D-ускорителем.
Шина AGP соединяет всего одно устройство (AGP-мастер) с AGP-контроллером в составе системного чипа - "северного моста", а тот, в свою очередь, связан с контроллером памяти. Таким образом, пересылка данных между видеочипом и памятью производится по выделенному каналу - шине AGP. Для оптимальной загрузки этого канала все запросы на чтение и запись имеют приоритеты и выстраиваются в очереди, причем сам запрос и транзакция (акт передачи блока данных) не обязательно следуют друг за другом. Транзакции могут выполняться как в стиле PCI, так и AGP, когда данные передаются только в направлении "память-мастер". То есть смысл новой шины в том, чтобы предоставить видеочипу возможность обращаться за данными в основную память по своему, отдельному, каналу.
DMA и DME
Есть две причины, по которым видеочип обращается к основной (системной, оперативной) памяти. Первое - загрузить оттуда в свою видеопамять необходимые для работы данные (например, текстуры для очередной трехмерной сцены). Это - обычный режим DMA (Direct Memory Access), который используют, например, контроллеры жестких дисков. Не ради этого была задумана новая шина. Режим DME (Direct in Memory Execution) позволяет видеочипу использовать основную память как источник данных для конвейера, добавляя (подключая) основную память к своей локальной видеопамяти при необходимости. Так как основная память выделяется под нужды прикладных программ страницами по 4 Кб, нужно обеспечить имитацию непрерывного блока памяти. Был выбран метод трансляции адресов по таблице, причем то, как строится эта таблица и как обеспечивается переадресация, остается на совести разработчика чипсета и драйвера GART (Graphic Aperture Remapping Table). Апертура - это тот диапазон адресов, при обращении к которому включается механизм переадресации на реальные страницы памяти. Таким образом, конвейер рендеринга может обращаться за данными прямо к основной памяти, а не к своей локальной - это часто называют AGP-текстурированием.
SBA
Перед тем, как начать перекачку данных (транзакцию), нужно подать запрос и указать адрес блока основной памяти. Шина AGP предусматривает два механизма передачи адреса контроллеру AGP. Первый - передача по тем же каналам, по которым передаются данные. Адрес - 64-битный, передается за два приема (шина AGP - 32-битная, как и PCI). Второй способ - передача по отдельной боковой шине, адрес - 48-битный, боковая шина - 8-битная. Этот режим называется Sideband Addressing, SBA. Основной канал полностью отдается под данные, адреса по нему не передаются, в итоге загрузка шины более полная.
Четыре скорости передачи
Тактовая частота шины AGP в два раза выше частоты PCI и составляет 66 МГц. Таким образом, мы получаем 66x4=264 Мб/c. Этого было мало уже при проектировании шины AGP, поэтому была добавлена возможность передавать по два 4-байтных блока за один такт (добавлен еще один тактовый сигнал с частотой 133 МГц). Первый режим назвали 1x, второй - 2x. Однако и 528 Мб/с (133x4=528) для работающего в режиме DME конвейера недостаточно. Режим 4x подымает вдвое частоту дополнительного тактового сигнала, таким образом уже четыре блока передается за один такт. Рост частоты потребовал снижения диапазона изменения напряжения, поэтому видеочип, работающий в режиме 4х, ориентируется на 1.5В, а не на 3.3В. Вот откуда появились перемычки на некоторых видеокартах, поддерживающих этот режим работы.
AGP на практике
Однако жизнь показала несостоятельность ключевых идей, лежащих в основе AGP. Конечно, было бы хорошо вообще выкинуть большую часть памяти из состава видеокарты, оставив только буфер кадра (в котором каждому пикселу на экране соответствует 16 или 32 бита) и Z-буфер, а все текстуры поставлять прямо из основной памяти. Но режим DME современными видеочипами практически не используется! Причина - пропускная способность системной памяти. Например, память PC100 позволяет получать данные со скоростью 8x100=800 Мб/с (шина памяти - 64-битная), половину этой пропускной способности займет процессор (хорошо еще, что у него есть кэш, который позволяет обращаться к памяти только в 5% случаев) и контроллеры, работающие в режиме DMA. В итоге имеем всего 400 Мб/с. Сравните - локальная видеопамять, которая работает на частоте около 200 МГц, имеет шину шириной (на современных видеокартах) 256 бит - 16х200=3200 Мб/c. Какой тогда смысл использовать канал AGP? Лучше нарастить память на борту видеокарты.
Выход есть, конечно. Первое - сжимать текстуры. Этот способ одинаково подходит и для основной, и для локальной памяти. Первой до этого додумалась S3 - для ее чипов это было наиболее актуально, потому что "Саваджи" имели узкую шину локальной памяти - 64 бита. Теперь сжатие текстур используют все современные ускорители. Второй трюк - тайловая архитектура (чипы серии PowerVR), текстурирование только тех треугольников, которые не будут закрыты другими на экране. Третий способ - передача данных на удвоенной скорости. Это - память DDR, скоро она будет использоваться в качестве не только локальной видеопамяти, но и обычной системной. Но к тому времени требования к скорости обмена данными между чипом и памятью поднимутся еще выше, так что постоянный рост объемов памяти на борту видеокарт будет продолжаться.
Надеюсь, вы уже поняли, что наращивание скорости самой шины AGP не дает ничего при отсутствии роста скорости шины основной памяти. Зачем эти 1.6 Гбайт/c при режиме 4x, если память PC100 даже теоретически не может выдать больше 800 Мбайт/с?
Макс КУРМАЗ,
max_kurmaz@mail.ru
Комментарии
При двух видеокартах, Win 98 хватает PCI адаптер как основной, а у меня AGP хороший, а PCI плохенький. Из-за этого DirectX не может пользовать AGP и WinDVD или WinTV не работают на экране подключенном к AGP.
Под Win200, похоже ситуация та же самая, и операционка не пользует АGP.
Может автор статьи подскажет как с этим справиться?
Я ATI Mach64 поменяла на ATI Xpert и все заработало. Похоже DirectX не поддерживал мультидисплеи при первой карте.