Современные графические акселераторы проф. каф. МО ЭВМ ННГУ Вадим Евгеньевич Турлапов RISC(Reduced Instruction Set Computer) - процессоры Основные особенности. 3 поколение Основные особенности RISC-процессоров: 1.Сокращенный набор команд (от 80 до 150 команд). 2.Большинство команд выполняется за 1 такт. 3.Большое количество регистров общего назначения. 4.Наличие жестких многоступенчатых конвейеров. 5.Все команды имеют простой формат, и используются немногие способы адресации. 6.Наличие вместительной раздельной кэш-памяти. 7.Применение оптимизирующих компиляторов, которые анализируют исходный код и частично меняют порядок следования команд. RISC-процессоры 3-го поколения Самые крупные разработчики RISC-процессоров: Sun Microsystems (архитектура SPARC - Ultra SPARC), IBM (многокристальные процессоры Power, однокристальные PowerPC - PowerPC 620), Digital Equipment (Alpha - Alpha 21164), Mips Technologies (семейство Rxx00 -- R 10000), а также Hewlett-Packard (архитектура PA-RISC - PA-8000). Особенности RISC-процессоров третьего поколения: •являются 64-х разрядными и суперскалярными (запускаются не менее 4-х команд за такт); •имеют встроенные конвейерные блоки арифметики с плавающей точкой; •имеют многоуровневую кэш-память, кэшируют предварительно дешифрованные команды; •применяют алгоритм динамического прогнозирования ветвлений и метод переназначения регистров, для внеочередного (интеллектуального) выполнения команд. сент2008 2 Архитектура IA-64. VLIW архитектура Предложенные в IA-64 архитектурные идеи близки к концепции VLIW (Very Large Instruction Word сверхбольшое командное слово). VLIW - это набор команд, реализующий горизонтальный микрокод с распараллеливанием. Несколько (4-8) простых команд упаковываются компилятором в длинное слово, которое соответствует набору функциональных устройств. VLIW-архитектуру можно рассматривать как статическую суперскалярную архитектуру, т.к. распараллеливание кода производится на этапе компиляции, а не динамически во время исполнения. Идеи VLIW сформулированы уже давно, но до настоящего времени они были известны в основном специалистам в области компьютерных архитектур. Имеющиеся реализации, например, VLIW Multiflow, не получили широкого распространения. Единственными популярными процессорами, архитектура которых близка к VLIW, была линия AP-120B/FPS-164/FPS-264 компании Floating Point Systems. Эти процессоры в 1980-е годы активно применялись при проведении научно-технических расчетов. Команда в этих системах содержала ряд полей, каждое из которых управляло работой отдельного блока процессора, так что все командное слово определяло поведение всех блоков процессора. Однако длина команды в FPS-х64 была равна всего 64 разрядам, что по современным меркам никак нельзя отнести к сверхбольшим. сент2008 3 Архитектура IA-64. EPIC и предикаты Выделение в архитектуре VLIW компонентов командного слова, управляющих отдельными блоками МП, вводит технологию явного параллелизма на уровне команд (EPIC - Explicitly Parallel Instruction Computing). Задача обеспечения эффективного распараллеливания работы отдельных блоков возлагается при этом на компилятор Проблема разработки соответствующих компиляторов. Распараллеливание работы в EPIC происходит статически при компиляции, в то время как современные суперскалярные RISC-процессоры осуществляют это динамически. Архитектура IA-64 В IA-64 два нововведения по сравнению с RISC-процессорами: •Применение технологии явного параллелизма на уровне команд (EPIC - Explicitly Parallel Instruction Computing). •Применение предикатных вычислений. Предикаты - способ обработки ветвлений (условных переходов). В сочетании с новым уровнем спекулятивных вычислений это значительно уменьшает количество условных переходов и, соответственно, ошибочных предсказаний направления переходов. В свою очередь, применение EPIC однозначно диктует появление в архитектуре большого числа функциональных устройств и сверхбольших файлов регистров. сент2008 4 Описание IA-64 1.Регистры IA-64: •128 64-разрядных регистров общего назначения; •128 80-разрядных регистров вещественной арифметики; •64 1-разрядных предикатных регистров. 2.Формат команды IA-64: •идентификатор команды; •три 7-разрядных поля операндов, - 1 приемник и 2 источника; •особые поля для вещественной и целой арифметики; •6-разрядное предикатное поле (64=2^6). 3.Предикация. 4.Загрузка по предположению. Вопрос: Почему поля операндов 7-разрядные? сент2008 Особенности EPIC: •Большое количество регистров. •Масштабируемость архитектуры до большого количества функциональных устройств •Явный параллелизм в машинном коде. Поиск зависимостей между командами производит не процессор, а компилятор. •Предикация. Команды из разных ветвей условного ветвления снабжаются предикатными полями (полями условий) и запускаются параллельно. •Загрузка по предположению. Данные из медленной основной памяти загружаются заранее. 5 Архитектура Е2К: 1 (2-5 – дополнительные). ИТМиВТ АН Подход, близкий к IA-64, уже был реализован в России - в произведенном суперкомпьютере Эльбрус-3, выпущенном в 1993 году институтом ИТМиВТ АН (Институт точной механики и вычислительной техники им. С. А. Лебедева РАН). В E2K используются команды переменной длины. Формат команд E2K: Заголовок Слог 1 ... Слог N •Команда E2K состоит из слогов (длиной 32 разряда каждый): 1 слог заголовка и еще от 1 до 15 слогов, указывающих на операции, которые могут выполняться параллельно. Причем данную архитектуру можно расширить до 32 слогов. •Слог заголовка содержит информацию о структуре команды и ее длине, что облегчает дешифрацию команды переменной длины. Применение заголовка позволяет не проводить предварительного декодирования команд перед их помещением в кэш команд. •В архитектуре E2K представлен сверхбольшой файл регистров: 256 универсальных регистров длиной по 64 разряда, т.е. они могут содержать как целочисленные данные, так и числа с плавающей запятой. •В E2K есть два почти симметричных кластера, каждый из которых содержит по 256 регистров. В этом процессоре также имеется 30 регистровых портов: 20 портов чтения (по 10 портов на кластер) и 10 портов записи. сент2008 6 Архитектура Е2К: 2 •В Alpha 21264 применяется реализованное во многих суперскалярных процессорах динамическое переименование регистров. Так как в E2K подобные задачи возлагаются на компилятор, то в нем этого механизма нет, но в циклах с постоянным шагом используется аналогичная схема циклической замены используемых регистров. •Еще одна особенность E2K - регистровое окно для процедуры. Это решение стало традиционным для машин серии "Эльбрус", однако особенно важным оно является для E2K, поскольку он содержит сверхбольшое количество регистров - 256. •Затраты на сохранение/восстановление регистров в данной ситуации становятся весьма значительными. Поэтому в E2K реализован механизм аппаратного переключения окон. Окно контекста регистров в E2K имеет переменную длину (до 192 регистров). Адресация регистров внутри контекста происходит относительно текущей базы, и при вызове другой процедуры достаточно сменить значение базы. •Кэш данных первого уровня в E2K имеет емкость всего 8 Кбайт и продублирован в каждом из кластеров.Кэш является прямоадресуемым, использует алгоритм сквозной записи данных. •Кэш данных второго уровня в E2K имеет емкость 256 Кбайт при времени доступа в 8 тактов. Он является двухканальным частично-ассоциативным и имеет 4 банка, то есть обеспечивает 4кратное расслоение кэш-памяти. Он также является неблокирующим. •В кэше данных второго уровня применяется алгоритм обратной записи. сент2008 7 Архитектура Е2К: 3 •Кроме того, в E2K представлен специализированный кэш предварительной выборки буфер предварительной подкачки. Он является частью устройства доступа к массивам и задействуется только при работе с массивами в циклах. Его емкость составляет всего 4 Кбайт, и он состоит из 2 банков с 2 портами в каждом из них. За один такт в буфер можно считать до 4 слов длиной 8 байт. Буфер организован как очередь FIFO и имеет до 64 зон предварительной выборки. •В Е2К предусматриваются два варианта подключения третьего уровня кэш: непосредственно к процессору Е2К, что позволяет разгрузить "системную шину" коммутатор, или через набор коммутаторных микросхем. •Функциональные устройства (ФУ) E2K разнесены по двум кластерам. Эти кластеры содержат по 3 одинаковых целочисленных конвейера - АЛУ (правда, один из кластеров имеет также ФУ деления - целочисленного и с плавающей запятой). •В каждом кластере представлены также адресные сумматоры, которые имеются для 2 из 3 путей ("каналов") данных. В результате каждый кластер может одновременно выполнять до 2 операций загрузки регистров или 1 операцию записи в оперативную память. Возможен и смешанный случай: 2 загрузки плюс одна запись. •Кроме того, имеется 4 канала для данных с плавающей запятой, по 2 на кластер. В каждом канале может выполняться команда типа MADD - "умножить-исложить", что дает темп 8 результатов с плавающей запятой за такт. сент2008 8 Архитектура Е2К: 4 •Набор команд E2K "богаче", чем у традиционных RISC-процессоров: в нем представлены четырехадресные команды, например, типа d = a + b + c. Такого нет и в IA-64. Для команд с плавающей запятой кроме полной поддержки IEEE754 в E2K реализована работа с 80-разрядным представлением Intel x86. При этом операнды хранятся в парах 64-разрядных регистров E2K. Сложение/умножение таких чисел не полностью конвейеризовано. В E2K реализованы также команды расширения ММХ x86. •В E2K целочисленный конвейер имеет длину 8 тактов (собственно выполнение идет на седьмом такте, а обратная запись - на восьмом) против 7 тактов в Alpha 21264. •Е2К обеспечивает очень высокий уровень одновременно выполняемых операций: в команде их кодируется до 23 (сюда, кроме арифметико-логических операций, входят также доступ в оперативную память, приращение индекса массива и т.п.). Эффективные показатели параллельной работы ФУ у E2K выше, чем у всех суперскалярных процессоров. •В архитектуре E2K, как и в IA-64, делается все, чтобы исключить обычные операции перехода. Для этого в E2K имеется 32 одноразрядных регистрапредиката, причем команда способна сформировать до 7 предикатов: 4 в операциях сравнения в АЛУ и еще 3 - в операциях логики. •Хотя в IA-64 предикатных регистров формально в 2 раза больше, чем в E2K, реально их столько же, так как в IA-64 хранятся пары - предикат и его отрицание. В IA-64 поля предикатов всегда представлены в команде, а в E2K - могут отсутствовать. Для указания предикатов применяются условные слоги (содержащие маски предикатов и ФУ), в которых может быть до 6 предикатов, указывающих нужно сент2008 9 ли выполнять соответствующие операции из "широкой" команды. Архитектура Е2К: 5 •Компилятор E2K порождает коды для обеих ветвей программы, возникающих при условном переходе, и, пользуясь большим числом ФУ и регистров, заставляет процессоры выполнять обе ветви программы. Пока условие перехода остается неизвестным, обе ветви выполняются спекулятивно. Когда, наконец, условие найдено, выбираются нужные результаты. Признак спекулятивного выполнения взводится в специальном бите соответствующего слога в коде операции. При ситуации исключения (exception) результат снабжается тегом недействительного значения. Та же процедура применяется и в IA-64. •В файле предикатов E2K, как и в регистровом файле, используются окна. Еще некоторые особенности архитектуры E2K: •тегирование данных (признак типа), поддерживаемое во всей линейке процессоров ЭВМ "Эльбрус"; •сегментно-страничная организация памяти; •поддержка мультипрограммирования в стиле x86. В сочетании с разработанными средствами двоичной компиляции и специальными аппаратными средствами ее поддержки, это позволяет выполнять x86-коды на E2K. •Поддерживается также двоичная компиляция для SPARC-архитектуры. сент2008 10 Обобщенная структура графического акселератора Шина ввода/вывода Может быть переложен на CPU (масштабируемость): DIME (Direct In Memory Execute) непосредственное выполнение в памяти. Основная и видеопамять находятся в общем адресном пространстве. Общее пространство эмулируется с помощью таблицы отображения адресов GARP (Graphic Address Remapping Table) блоками по 4 Кбайт. Процессор видеокарты непосредственно работает с текстурами в основной памяти без их копирования в видеопамять. сент2008 Геометрический процессор: механизм обработки треугольников Видеопамять Механизм рендеринга - буфер Блок(и) обработки текстур Драйверы: ICD (Installable Client Driver) – полная версия OpenGLсовместимого драйвера для профессиональных акселераторов MCD (Mini CD) – усеченная версия Miniport – минипорт для одной игры Буфер текстур TV,DVI DMA Блок обработки кадрового буфера z- буфер RGB Кадровый буфер ЦАП (RAM DAC) 11 Архитектура шейдеров. Vertex shaders Специализация регистров шейдера Vertex Shader 128bit Architecture Выходные регистры вершинног о шейдера: сент2008 Registers: Number of Registers Properties Input (v0 - v15) 16 RO Output (o*) GeForce 3/4TI: 9; RADEON 8500: 11 WO Constants (c0 - c95) vs.1.1 Specification: 96; RADEON 8500: 192 RO Temporary (r0 - r11) 12 RW Address (a0.x) 1 (vs.1.1 and higher) WO (W: only with mov) Version: Functionality: 0.0 DirectX 7 1.0 DirectX 8 without address register A0 1.1 DirectX8, DirectX 8.1 with 1 address register A0 2.0 DirectX 9 3.0 DirectX 9.0с Name Value Description oDn 2 quad-floats Цвет для пиксельного шейдера diffuse (oD0) и specular (oD1). oPos 1 quad-float Output position в однородном усеченном пространстве oTn до 8 quad-floats Выходные координаты текстуры oPts.x 1 scalar float Размер точки (скаляр) oFog.x 1 scalar float Коэффициент затуманивания 12 Вершинные шейдеры. Ассемблер 1.Объявление вершинного шейдера в С++, установка константных регистров 3.Примеры вершинного шейдера на ассемблере float c[4] = {0.0f,0.5f,1.0f,2.0f}; DWORD dwDecl_0[] = { D3DVSD_STREAM(0), //VSD-Vertex Shader Declaration D3DVSD_REG(0, D3DVSDT_FLOAT3 ), //inpRegister v0 D3DVSD_REG(5, D3DVSDT_D3DCOLOR), //inpRegister v5 // set a few constants D3DVSD_CONST(0,1),*(DWORD*)&c[0],*(DWORD*)&c[1] ,*(DWORD*)&c[2],*(DWORD*)&c[3], D3DVSD_END()}; pd3dDevice->SetVertexShaderConstant(28, &matProjTransp,4); // 4 строки pd3dDevice->CreateVertexDeclaration(dwDecl_0, &pVertexDeclaration ); mov a0.x,r1.x m4x3 r4,v0,c[a0.x + 9]; m3x3 r5,v3,c[a0.x + 9]; ; Scale by fog parameters : ; c5.x = fog start ; c5.y = fog end ; c5.z = 1/range ; c5.w = fog max dp4 r2, v0, c2 ; r2 = distance to camera sge r3, c0, c0 ; r3 = 1, sge=(>=?) ; camera space depth (z) - fog start add r2, r2, -c5.x ; 1.0 - (z - fog start) * 1/range mad r3.x, -r2.x, c5.z, r3.x mad r4,r3,c9,r4 ; r4=r3*c9+r4 2.Компиляция и создание, установка и удаление вершинного шейдера D3DXAssembleShaderFromFile("PShader.psh",0,0,0, &pCode,0); // for Assembler Shader D3DXCompileShaderFromFile(strPath,0,0,"Perlin", "vs_1_1",dwShaderFlags,&pCode,0,&pConstantTable)); pd3dDevice->CreateVertexShader((DWORD*)pCode-> GetBufferPointer(),&pVertexShader); pCode->Release(); m_pd3dDevice->SetVertexShader(pVertexShader); m_pd3dDevice->DeleteVertexShader(pVertexShader); сент2008 mov R1, -R2.xyyz mov R1.xw, R2 ; swizzling example ; masking example ; r0 = r1 x r2 (3-vector cross-product) mul r0, r1.yzxw, r2.zxyw mad r0, -r2.yzxw, r1.zxyw, r0 ; mov oD0,r4 13 Архитектура шейдеров. Pixel shaders Pixel Shader 128bit Architecture Этапы работы с пиксельными шейдерами • Проверка поддержки Pixel Shader • Установка Flags для текстуры (with D3DTSS_* flags) • Установка Texture (SetTexture()) • Определение констант (with SetPixelShaderConstant()/def) ps.1.4 сент2008 Type Nam e ps.1.1 Read/ Write Constant Registers cn 8 RO Texture Registers tn 4 RW RO Temporary Registers rn 2n RW Color Registers vn 2 RO • Pixel Shader инструкции o Адресации текстуры o Арифметические • Ассемблирование Pixel Shader • Создание Pixel Shader • Установка Pixel Shader • Освобождение ресурсов 14 Пиксельные шейдеры. Ассемблер 1.Объявление пиксельного шейдера в С++, установка константных регистров 3.Примеры пиксельного шейдера на ассемблере if(pCaps->PixelShaderVersion < D3DPS_VERSION(1,1)) return E_FAIL; //Flags m_pd3dDevice->SetTextureStageState( 0/*Stage*/, D3DTSS_COLORARG1, D3DTA_TEXTURE ); //… m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); //Set m_pd3dDevice->SetTexture(0, m_pWallTexture); //Define Constants HRESULT SetPixelShaderConstant(DWORD Register, CONST void* pConstantData,DWORD ConstantCount); def c0, 0.30, 0.59, 0.11, 1.0 ; [-1.0..1.0] ; t1 holds the color map ; bump matrix set with the ; D3DTSS_BUMPENVMAT* flags ps.1.1 ; start of asm. shader tex t0 ; bump map with du,dv,lum data texbeml t1, t0 ; compute u, v ; sample t1 using u, v ; apply luminance correction mov r0, t1 ; output result 2.Компиляция и создание, установка и удаление пиксельного шейдера tex t0 ; color map texdp3 t1, t0 ; t1 = (t1) dot (t0) mov r0, t1 ; output result lrp r0, v0, t0, r1 ; v0*t0+(1-v0)*r1 DXUtil_FindMediaFile(Shad,_T("environment.psh")); if(FAILED(D3DXAssembleShaderFromFile(Shad,0,NULL, &pCode,NULL))) return E_FAIL; if( FAILED(m_pd3dDevice->CreatePixelShader( (DWORD*)pCode->GetBufferPointer(),&m_dwPixShader) )) return E_FAIL; m_pd3dDevice->SetPixelShader( m_dwPixShader ); m_pd3dDevice->DeletePixelShader( m_dwPixShader ); сент2008 texcoord t0 ; convert texture ; coordinates to color mov r0, t0 ; move color into output ; (t1) holds row #1 of the 3x2 matrix ; (t2) holds row #2 of the 3x2 matrix ; t0 holds normal map tex t0 ; normal map texm3x2pad t1, t0 ;calc. z from row #1 ; calculates w from row #2 ; stores a result in t2 depending on ; if (w == 0) t2 = 1.0; ; else t2 = z/w; 15 texm3x2depth t2, t0 Акселераторы с шейдерами 3 поколения ATI Radeon X1800, X1900 8 вершинных шейдеров и 16 пиксельно-шейдерных конвейеров сент2008 8 вершинных шейдеров и 48 пиксельно-шейдерных конвейеров 16 Акселераторы с шейдерами 3 поколения (nVidea GeForce 6800, ATI Radeon X1900) Ключевые спецификации чипов серии ATI Radeon X1900: Полноценная поддержка шины PCI-Express X16 (250-500MB/sec x 16=4-8GB/sec) Полная поддержка Microsoft DirectX 9.0 Shader Model 3.0 Восемь вертексных геометрических процессоров 48 конвейеров обработки пиксельных шейдеров (пиксельно-шейдерных процессоров). Для сравнения: 16 - у X1800 (R520), 8 - у X1600 (RV530), 4 - у X1300 (RV515) 16 текстурных блоков (TMU, Texture Mapping Unit) 256 Мб или 512 Мб (до 1 Гб) 8-канальной графической памяти GDDR3 (с перспективой поддержки GDDR4). Внутренняя 512-битная кольцевая шина памяти, 256-битный интерфейс (используется 8 чипов 512-битной памяти GDDR3); новый дизайн ассоциативного текстурного, цветового и Z/stencil кэшей, иерархический Zбуфер, Z-компрессия со сжатием без потерь (до 48:1), быстрая очистка Z-буфера Декодирование всех форматов DTV/HDTV Режимы AA - 2x/4x/6x, со сжатием без потерь при соотношении до 6:1 во всех разрешениях Режимы анизотропной фильтрации (Anisotropic Filtering) - 2x/4x/8x/16x Ultra-Threaded Shader Engine - многопоточная обработка данных, одновременно до 512 пиксельных тредов, полноскоростная обработка 128-данных с плавающей запятой. Улучшенный механизм предсказания ветвления и обработки тредов До 1536 инструкций за проход Поддержка обработки текстур с высоким разрешением (до 4k x 4k , ARGB 64Мб) ) Текстурное сжатие с 64-битной FP точностью. Высококачественная 4:1 компрессия для нормального и освещённого текстурирования (normal and luminance mapping) Поддержка OpenGL 2.0 High Dynamic Range (HDR) рендеринг сент2008 17 Акселераторы с шейдерами 3 поколения (ATI Radeon X1900, Pixel Shader Processor) Новая функция текстурного сэмплирования Fetch4. Branch Execution Unit (блок ветвлений) только те пиксели, которые требуют обработки в текущий момент Технология Fetch4: Текстурные блоки, таким образом, спроектированы для одновременного моделирования и фильтрации всех четырёх компонентов текстурного адреса для 16 текстур. Легко реализуется билинейная фильтрация и т.д. сент2008 Кольцевая архитектура контроллера памяти с 2 шинами по 256 = 8 х 32 бит 18 Microsoft HLSL (High Level Shading Language) Файлы эффектов, техники (technique) и проходы (pass) 1.Мех. Пример файла эффектов с шейдерами на ассемблере 2.Вода. Пример файла эффектов на MS HLSL #define C_EYE_POSITION 27 #define C_DISPLACEMENTS 30 // light direction float3 L = normalize(float3(-0.2f, -0.8f, 0.4f)); // light intensity float4 I_a = float4(0.3f, 0.3f, 0.3f, 1.0f); float4 I_d = float4(0.6f, 0.6f, 0.6f, 1.0f); float4 I_s = float4(0.8f, 0.8f, 0.8f, 1.0f); // material specular float4 k_s = float4(1.0f, 1.0f, 1.0f, 1.0f); // transformations float4x4 World : WORLD; float4x4 View : VIEW; float4x4 Projection : PROJECTION; // eye position float3 Eye; // textures texture FinTex; texture ShellTex; static const float4 vOne = float4(1, 1, 1, 1); VertexShader ShellVS = asm { vs.1.1 dcl_position v0 dcl_normal v3 dcl_color0 v4 сент2008 dcl_texcoord v6 #include "light_scattering_constants.h" // transformations float4x4 mWorldViewProj: WORLDVIEWPROJECTION; float4 vCameraPos: worldcamerapos; float4 sun_color : suncolor = {0.578f,0.578f,0.578f,0.0f}; float4 xAxis = {1.0f, 0.0f, 0.0f, 0.0f}; float4 vHalf = {0.5f, 0.5f, 0.5f, 0.0f}; float3 waterColor0 = {0.15f, 0.4f, 0.5f}; float3 waterColor1 = {0.1f, 0.15f, 0.3f}; texture tex0 : TEXTURE; // blend mask struct VS_INPUT { float2 Pos : POSITION; float ZPos0 : POSITION1; float2 Norm0 : NORMAL0; float ZPos1 : POSITION2; float2 Norm1 : NORMAL1; }; struct VS_OUTPUT { float4 Pos : POSITION; float3 Col : COLOR0; float3 T0 : TEXCOORD0; float3 T1 : TEXCOORD1; }; VS_OUTPUT VS(VS_INPUT v) { VS_OUTPUT Out = (VS_OUTPUT)0; 19 Акселераторы с шейдерами 3 поколения. Взаимодействие с системой Table 30-1. Available Memory Bandwidth in Different Parts of the Computer System (from GPU Gems2 Ch.30) Component GPU Memory Interface PCI Express Bus (×16) CPU Memory Interface (800 MHz Front-Side Bus) сент2008 Bandwidth 35 GB/sec 8 GB/sec 6.4 GB/sec 20 Акселераторы с шейдерами 3 поколения. Взаимодействие с системой Figure 30-3. A Block Diagram of the GeForce 6 Series Architecture сент2008 21 Акселераторы с шейдерами 4 поколения. Эволюция архитектур сент2008 22 Акселераторы с шейдерами 4 поколения Архитектура Radeon HD 2000 См. Свершилось! Архитектура Radeon HD 2000 – достойный ответ конкуренту/ 15.05.07 Евгений Пугач /FERRA.RU Модель видеокарты Radeon HD 2400 Radeon HD 2600 Radeon HD 2900 Количество SP 40 120 320 Частота ядра 525-700 МГц 600-800 МГц 740 МГц Мат. производительность 42-56 GigaFLOPs 144-192 GigaFLOPs 475 GigaFLOPs Скорость пикс.обработки 4,2-5,6 млрд пикс/с 14,4-19,2 млрд пикс/с 47,5 млрд пикс/с Скорость обраб.полиг-в 262-350 млн/c 600-800 млн/с 740 млн/с Текстурных блоков 4 8 16 Блоков рендеринга 4 4 16 Энергопотребление ~25 Вт ~45 Вт ~215 Вт Объем памяти 256 МБ GDDR3, 128/256 МБ DDR2 512 МБ GDDR3 256 МБ GDDR4, 256 МБ GDDR3, 256 МБ DDR2 Шина памяти 64 бит 128 бит 512 бит Частота памяти 400-800 МГц 400-1100 МГц 825 МГц Пропуск.спос.памяти 6.4-12.8 Гбайт\с 12.8-35.2 Гбайт\с 106 Гбайт\с Кол-во транзисторов 180 миллионов 390 миллионов 700 миллионов Техпроцесс TSMC 65G+ TSMC 65G+ TSMC 80HS сент2008 23 Акселераторы с шейдерами 4 поколения. 30% Архитектура Radeon HD 2900 сент2008 24 Акселераторы с шейдерами 4 поколения Setup Engine: Состоит из вершинного и геометрического ассемблеров и интерполятора, готовит данные для обработки потоковыми процессорами. Он может исполнять три вида функций: •сборку вершин (vertex assembly) и тесселяцию, •геометрическую обработку (для нововведения DirectX 10 – Geometry Shaders) •выборку и интерполяцию для пиксельных шейдеров. Затем данные передаются диспетчеру. Ultra-Threaded Dispatch Processor. Он поддерживает раздельные очереди команд для каждого типа шейдеров. Инструкции и данные поступают в диспетчер и распределяются по очередям. Затем данные из очередей передаются на арбитраж. На каждый SIMD-массив приходится по два арбитра, что даёт возможность обрабатывать по 2 потока данных на массив, то есть до 8 потоков одновременно. Для текстур и вершин – свои арбитры. сент2008 25 Акселераторы с шейдерами 4 поколения Для вершинных и пиксельных шейдеров предусмотрены собственные кэши, геометрические шейдеры используют кэш вершинных. При этом объём вершинного кэша увеличен в 8 раз по сравнению с архитектурой Radeon X1950. Наличие кэша инструкций позволяет исполнять шейдеры неограниченной длины с неограниченным числом констант. Потоковый процессор Диспетчер следит за тем, чтобы исполняющие блоки не простаивали, и при возникновении ситуации, когда обрабатываемые в конвейере данные нуждаются в выборке из памяти или ожидают результатов обработки в другом конвейере, возвращает эти данные в текущем состоянии в очередь и запускает следующие из очереди в обработку. После выполнения условий, необходимых для продолжения обработки, она возобновляется с места остановки. сент2008 26 Акселераторы с шейдерами 4 поколения Ядро содержит 320 так называемых «единиц потокового вычисления» (stream processing units). Фактически процессоров в ядре 64, а не 320, они сгруппированы по 16 в 4 SIMD-массива (SIMD – Single Instruction on Multiple Data). Такое решение позволяет с большой скоростью проводить однотипные вычисления над большим количеством примитивов, что, собственно, мы и наблюдаем в современной графике (постобработка, шейдеры освещения, тени и т.п.). Каждый процессор способен выполнять 5 инструкций, при этом 4 из них – MUL/ADD (Multiply-Add), и ещё 1 сложную трансцендентную инструкцию (SIN, COS, LOG и т.п.). Все инструкции с плавающей точкой выполняются с 32-битной точностью. В составе каждого процессора имеется блок исполнения ветвлений, управляющий выборкой данных и отсылкой их на исполнение, что уменьшает простой конвейеров и упрощает работу диспетчера. Каждый процессор оборудован регистром общего назначения, хранящим исходные данные, временные значения обработки и выходные значения после обработки. Процессоры спроектированы под VLIW-архитектуру (Very Large Instruction Word), каждое слово инструкции может содержать до 6 независимых операций, 5 из них математических и 1 управляющая (Flow Control). Вычислительная мощь SIMD-массивов ядра составляет до 475 ГигаFLOPs по оценке AMD, причём в случае использования массива Crossfire заявляется до 950 миллиардов операций с плавающей точкой в секунду. сент2008 27 Акселераторы с шейдерами 4 поколения. Текстурные блоки. Radeon HD 2900 оборудован четырьмя такими блоками. Каждый из них содержит 8 процессоров, осуществляющих адресацию текстур, 20 текстурных семплеров, осуществляющих по 1 выборке текстуры за такт, 4 блока фильтрации FP-текстур. Для текстурных блоков сохранена способность архитектуры X1000, называемая Fetch4: возможность выборки 4 нефильтрованных значений вместо 1 фильтрованного. В результате Radeon HD 2900 способен за 1 такт адресовать 32 текселя, осуществить выборку 80 значений текстурных координат и билинейную фильтрацию одного 64-битного значения цветовых координат (64-битный HDR). Билинейная фильтрация 128-битных текстур осуществляется за 2 такта. Это в 7 раз быстрее, чем у Radeon X1000. Текстурные блоки разделяют 256 кбайт кэша второго уровня, при этом без ограничений могут получать доступ к кэшу 1 уровня и вершинному кэшу. ATI вводит новый формат данных для 32битных HDR – RGBE 9:9:9:5. Поддерживается хранение и использование текстур сверхвысокого разрешения – 8192x8192. сент2008 28 Акселераторы с шейдерами 4 поколения Работа ядра с вершинными данными За один такт может быть выбрано до 16 вершин. Кроме того, ATI вернула в ядро некогда разработанную, но позже упразднённую технологию тесселяции. Тесселяция производится ещё до передачи данных на обработку вершинным шейдером. Есть несколько способов получить объект с высокой детализацией и затем управлять им: •Во-первых, можно «в лоб» создать объект с огромным количеством полигонов, а затем при каждом изменении его положения перерисовывать его. •Во-вторых, можно изменять его конфигурацию с помощью вершинного шейдера. •В-третьих, можно использовать карту нормалей (normal map), которая будет накладываться на объект со сравнительно более низким числом полигонов и давать более высокую детализацию. •Наконец, в последних версиях DirectX возможно использование карт смещения (displacement maps), представляющих собой набор координат ключевых вершин объекта, не требующих просчёта объекта с нуля. Пример тесселяции простого объекта сент2008 29 Акселераторы с шейдерами 4 поколения Работа ядра с вершинными данными Пример с 1000 вершин: В механизме тесселяции предусмотрена возможность задавать уровни детализации (LoD, Level of Detail) в зависимости от расстояния до объекта. Кроме работы с персонажами тесселяция очень может помочь в работе с ландшафтом. сент2008 30 Акселераторы с шейдерами 4 поколения Рендеринг После обработки SIMD-массивами и текстурными блоками ядро передаёт данные на рендеринг, то есть на сборку и вывод финальной сцены в кадровый буфер. Блоков рендеринга четыре, они, среди традиционной оценки Z-буфера и оценки данных Alpha-координат, содержат блок мультисемплинга. ATI вводит новый метод сглаживания изображения – Custom Filter Antialiasing, представляющий собой программируемый алгоритм, использующий для сглаживания не только набор субпикселей одного пикселя, но и несколько субпикселей соседних пикселей. При этом профиль можно без проблем изменить путём замены фильтра драйвером и получить лучшее качество сглаживания, устранить проблемы с «неудобными» углами и т.п. Особо стоит отметить, что алгоритм обнаруживает грани объектов и использует для их сглаживания больше семплов. Список поддерживаемых образцов – в следующей таблице. сент2008 31 Акселераторы с шейдерами 4 поколения Рендеринг Render Back-end теперь применяет новый метод сжатия 32-битных Z-координат и стенсилей, до 16:1 против 8:1 в прошлых поколениях чипов. При сглаживании сцены методом 8x MSAA степень сжатия может достичь 128:1. Z-буфер может оцениваться дважды, до работы пиксельного шейдера и после неё, в результате объекты, не попадающие на финальную сцену, отбрасываются. Улучшена иерархия Z-буфера, позволяющая ускорить в первую очередь скорость обработки стенсильных теней. сент2008 32 Акселераторы с шейдерами 4 поколения Контроллер памяти сент2008 33 Акселераторы с шейдерами 4 поколения Технология Crossfire в Radeon HD2000 сент2008 34 Акселераторы с шейдерами 4 поколения. AMD Radeon HD4870X2 (3DNews) Нынешний флагман NVIDIA - видеопроцессор G200 (NVIDIA GeForce GTX 280), состоит из 1,4 млрд. транзисторов, в то время как AMD Radeon RV770 состоит из «всего лишь» 950 млн. транзисторов. Акцент разработчиков AMD на создании относительно «простых» графических процессоров неслучаен. Это, с одной стороны, снижает потребляемую мощность микросхем, с другой - позволяет быстрее освоить 55-нм технологический процесс в виду меньшей сложности чипов. Увеличение общей производительности графического адаптера достигается благодаря объединению в одной системе нескольких графических процессоров. Как показал пример AMD Radeon HD4870X2 - этот подход оказался верным. Связка из двух видеопроцессоров RV770 показывает отличную вычислительную мощность. Как показывает пример многочисленных SLI- и CrossFire-систем, само по себе наличие двух видеочипов еще не гарантирует максимальной производительности, и часто оказывается, что плата с одной микросхемой максимальной производительности превосходит двухчиповые тандемы. сент2008 35 Акселераторы с шейдерами 4 поколения. (iXBT, 3DNews) NVIDIA NVIDIA NVIDIA NVIDIA GeForce 8400-8800 (чип G80, local, doc) Quadro FX 5600 (чип G80 , local, doc) GeForce 9800 (чип G92 , 754 млн. транз. , local) GeForce GTX 280 (чип GT200, 1.4 млрд. транз. , local) AMD Radeon HD 4850 – 4870 (чип RV770, 950 млн. транз. , local) AMD Radeon HD 4870X2 (чип RV770, local) Нынешний флагман NVIDIA - видеопроцессор G200 (NVIDIA GeForce GTX 280), состоит из 1,4 млрд. транзисторов. сент2008 36 Источники 1. SUPERCOMPUTING 2006 Tutorial on GPGPU http://www.gpgpu.org/sc2006 2. General-Purpose Computation Graphics Hardware (wiki) http://www.gpgpu.org/w/index.php/Main_Page 3. CUDA: Новая архитектура для вычислений на GPU. Documentation. Resource 4. Папка Support (локально) сент2008 37