Современные графические акселераторы проф. каф. МО ЭВМ ННГУ Вадим Евгеньевич Турлапов

advertisement
Современные графические
акселераторы
проф. каф. МО ЭВМ ННГУ
Вадим Евгеньевич Турлапов
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
2n
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
Download