Темные силы
Давно бытует мнение, что очень многое, связанное с видеокартами - это большая тайна за семью печатями. И все к этому так привыкли, что данная идеология уже вошла в привычку. Выражение “записать в память видюхи” - относится к магическому ритуалу, требующему огромных жертвоприношений богам. А такие вещи как шейдеры - уже вошли в обиход как мощные заклинания по вызову потусторонних сил. Но не бойтесь, вместе, мы в силах подчинить себе этих демонов. Ну или по крайней мере вы сможете понять - достаточно ли у вас сил (светлых?) чтобы с этими демонами совладать.
Данная глава - первая глава цикла научно-популярной фантастики про современные графические процессоры. Эта глава - общий обзор технологий. В данной главе не будет веселых картинок с котиками, никаких анекдотов, и смешных историй. Тем, кто ждет здесь конкретики, деталей и пруфов - прошу перейти к другим главам или вообще не читать данные статьи. И еще - прошу считать все, что написано в данных статьях цикла - плодом моего многолетнего опыта, все события и персонажи вымышлены, любые совпадения с действительностью считать чистой случайностью.
Не хотелось бы опускаться в дебри истории и вспоминать как вообще проходило развитие графических процессоров. Но кому интересно хотя бы примерно представить становление трехмерной графики графики, есть статья на Wiki, основанная на истории компании 3dfx. По сути, именно с этой компании начался безудержный рост производительности графических средств ускорения. Ссылка: https://ru.wikipedia.org/wiki/3dfx_Interactive
И так, что такое видеокарта в современном понимании этого слова. Это настоящий компьютер. Да, считайте, что в вашем персональном компьютере или ноутбуке, живет еще один компьютер. И в сравнении с видеокартами прошлого века, современные видеокарты - это поистине сложные аппаратные и программные комплексы. Видеокарта содержит в себе очень много компонентов, отвечающих за разнообразные функции. Попробую перечислить их, чтоб вы понимали, что это не просто кусок железа с процессором, который молотит картинки.
Первое, это поддержка аппаратных устройств вывода графики, то есть дисплеев. Хотелось бы сказать мониторов - но так было бы некорректно, ибо это могут быть и матрицы ноутбуков и всякие специализированные устройства, такие как устройства видеозахвата). Целый блок управления (а точнее контроллер) с аппаратными прерываниями. Контроллер позволяющий идентифицировать дисплей, получить его параметры цвета, его EDID и всякие другие параметры, управлять разверткой и разрешением. Подробнее об этом будет сказано в отдельной главе.
Второе, подсистема управления питанием. Современные видеокарты умеют сохранять энергию. Они очень редко работают в полную силу. И нагрузить их на 100 процентов возможно только в очень тяжелых и грамотно спроектированных вычислениях (синтетических тестах, майнинге криптовалюты или в алгоритмах трассировки лучей). Модуль отвечает за частоты памяти и ядра, а также умеет включать и выключать неиспользуемые юниты. Также, в определенных конфигурациях, модуль может вообще выводить в спящий режим всю видеокарту, оставляя работать только минимально необходимый набор функций (контроллер управления питанием со своими Plug&Play прерываниями).
Третье. Подсистема BIOS видеокарты (или Video BIOS - VBIOS). Как правило хранит в себе микрокод видеокарты (прошивка) и настройки (тайминги, частоты, напряжения и тп). Так-же содержит настройки определенных возможностей видеокарт (как например - поддержка стерео мониторов, мониторов с 64 битным цветом, синхронизация видеокарт и другое). Микрокод видеокарты представляет собой логику работы ядер, логику работы конвейеров команд, списки поддерживаемых шейдерных инструкций, поддерживаемые режимы организации видеопамяти и многое другое. Микрокод - святая святых видеокарты. Он зашифрован, расшифровывается внутренним контролером, но считать расшифрованный микрокод невозможно. Подменить его тоже невозможно. VBIOS - как правило зашит в видеокарту, и как правило релизные версии видеокарт нельзя перепрошить, даже если у вас вдруг оказался на руках этот VBIOS. Конечно бывают исключения, когда речь заходит не о дискретной видеокарте, а о APU, или какой-то другой системе со встроенной графикой типа Tegra. Но это совсем другой разговор.
Четвертое, собственно регистры видеокарты. В видеокарте очень много регистров. Их так много, что если описать их все, получилась бы книга размером в три словаря Ожегова, не меньше. Некоторые регистры отвечают за механизмы работы видеокарты, за адреса прерываний, за тайминги, и размеры некоторых выделенных областей, за работу кольцевых буферов и многое другое, Другие регистры могут отображать текущее состояние различных ядер видеокарты, такие как, например, главное исполнительное ядро команд - или по простому CE - command engine. Указывает в каком режиме находится командное ядро, в каком режиме выполняется команда, какая это команда, адреса этой команды, в общем многие параметры, доступные только для чтения. Есть регистры отвечающие за исполнение шейдерных инструкций - такие регистры обычно недоступны для их прямого изменения. Они изменяются только посредством шейдерных команд.
Не хотел выделять еще одну подсистему отдельно от перечисленных, а именно подсистема вычислений. Почему я ее не выделяю? Все очень просто - она завязана на многих как аппаратных, так и программных частях, сильно завязана на архитектуру вычислительных ядер (а у каждого производителя она своя) и сильно завязана на реализацию взаимодействия с ОС. Поэтому про вычисления я скорее всего по-рассуждаю на примере одного из знаменитых вендоров видеокарт. Этой теме, возможно, будет посвящена отдельная статья в данном цикле. Возможно и не одна.
Это были названы самые важные аппаратно работающие части видеокарты. Конечно, на большинство из этих частей, можно влиять посредством драйвера. Так как в мире немало операционных систем, то в данном цикле статей, при разговоре о драйверах я всегда подразумеваю OS Windows. И будет не очень правильно описывать, как может работать драйвер видеокарты и какие у него могут быть возможности, без предварительного сказа об организации памяти в современных видеокартах и некоторых интерфейсах, предоставляемых операционной системой, для взаимодействия приложений, драйвера, и видеокарты.
На этой ноте, я завершу вводную часть. Надеюсь, вам было интересно, и вы заинтересованы в продолжении.
© TermoSINteZ
Некрономикон GPU. Часть первая
Дата публикации 13 фев 2018
| Редактировалось 13 фев 2018