Высшая школа экономики, Москва, 2013
www.hse.ru
ЛЕКЦИЯ 8
ВИДЕОАДАПТЕРЫ, ВИДЕОКАРТЫ
И УСКОРИТЕЛИ
Соболевский Алексей
ИНЖЕНЕРНАЯ И КОМПЬЮТЕРНАЯ
ГРАФИКА
2 КУРС
Высшая школа экономики, Москва, 2013
Темы лекции
• Что такое видеоадаптер/видеокарта?
• История и эволюция видеокарт
• Устройство современных видеокарт
• API современных видеокарт
• Параллельные вычисления на видеокартах
• Вычислительные кластеры на видеокартах
Высшая школа экономики, Москва, 2013
Немного истории
What does the Wiki say?
Видеокарта (также видеоадаптер, графический адаптер,
графическая плата, графическая карта, графический
ускоритель) — электронное устройство, преобразующее
графический образ, хранящийся, как содержимое памяти
компьютера (или самого адаптера), в форму, пригодную
для дальнейшего вывода на экран монитора.
Высшая школа экономики, Москва, 2013
Немного истории
• MDA (Monochrome Display Adapter)
• CGA (Color Graphics Adapter)
• EGA (Enhanced Graphics Adapter)
• VGA (Video Graphics Array)
– Графический контроллер
– видеопамять
– последовательный преобразователь
– контроллер атрибутов
– Синхронизатор
– контроллер ЭЛТ
Высшая школа экономики, Москва, 2013
Немного истории
CGA Adapter
Высшая школа экономики, Москва, 2013
Немного истории
CGA graphics
Высшая школа экономики, Москва, 2013
Немного истории
Test Drive Ferrari. CGA vs Now (NFS)
Высшая школа экономики, Москва, 2013
Немного истории
Раньше было:
Видеокарта (2D) + ускоритель (3D)
Сейчас:
Видеокарта (3D) + сопроцессоры (Shaders,
Physics)
Высшая школа экономики, Москва, 2013
Was ist GPU?
GPU (graphics processing unit) – устройство,
выполняющее графический рендеринг
(обработку).
Отличия от CPU:
•архитектура, максимально нацеленная на увеличение скорости
расчёта текстур и сложных графических объектов, а так же
микропрограмм, связанных с их обработкой
•ограниченный набор команд
Высшая школа экономики, Москва, 2013
¿Qué hay en la tarjeta gráfica?
• Графический процессор
• Видеоконтроллер
• Видео-ПЗУ
• Видеопамять
• Цифрово-аналоговый преобразователь
• Коннектор/разъём
Высшая школа экономики, Москва, 2013
Графический процессор
Собственно, это и есть GPU.
Очень много ядер
Очень-очень много ядер >.<
Высшая школа экономики, Москва, 2013
Графический процессор
Итого: почти в 100 раз больше ядер для вычислений по сравнению с CPU
Высшая школа экономики, Москва, 2013
Графический процессор
Почему их не используют
в качестве CPU?
Высшая школа экономики, Москва, 2013
Графический процессор
Высшая школа экономики, Москва, 2013
Видеоконтроллер
• Формирование изображения в
видеопамяти
• Обрабатывает запросы от CPU
• Передаёт данные на i/o (ЦАП, RAMDAC)
• Контроллер внутренней шины данных и
контроллер видеопамяти
• Внутренняя шина – 128 или 256 разрядов
против 32 на внешнюю шину
Высшая школа экономики, Москва, 2013
Видеопамять
• Кадровый буфер (Frame Buffer)
• Невидимые и промежуточные элементы
изображения и прочие данные
Высшая школа экономики, Москва, 2013
Видеопамять
Небольшой пример:
1024х768 * 24 бита цвет = 2,25 Мб
2,25 Мб*75Гц = 170 Мб/с (номинал, только
вывод)
1600х1200 * 32 бита * 75 Гц = 550 Мб/с
Высшая школа экономики, Москва, 2013
Видеопамять
• FPM DRAM
• VRAM
• WRAM
• EDO DRAM
• SDRAM
• DDR SDRAM
• SGRAM
• MDRAM
• RDRAM
Высшая школа экономики, Москва, 2013
Видеопамять
SDRAM
•Передача данных только по
одному фронту сигнала
синхроимпульса
•168 pins
DDR SDRAM
•Передача данных сразу по
двум фронтам сигнала
синхроимпульса
•184 pins
•«удвоенное» значение
частоты
Высшая школа экономики, Москва, 2013
ЦАП (RAMDAC)
Random Access Memory Digital-to-Analog Converter
•3 ЦАП (по 1 ЦАП на канал цветности) и 1 ЦАП для
гамма-коррекции
•Используется, в основном, для вывода на CRT
Высшая школа экономики, Москва, 2013
Видеокарта
Высшая школа экономики, Москва, 2013
Видеокарта
Высшая школа экономики, Москва, 2013
Видеокарта
• Около 4 000 000 000 транзисторов на одной плате
• Около 1 000 ядер на обработку
• Отдельные блоки для буферизации, растеризации,
обработки команд CUDA, Direct 3D, Open CL, Open GL
• Сенсоры, датчики, обработчики ошибок, синхронизация,
доп. интерфейсы
• Техпроцесс 20-25 нм
Высшая школа экономики, Москва, 2013
API
API (Application programming interface, Интерфейс
программирования приложений)
Дополнительные специальные функции для обработки
определённых типов данных
Open GL Direct 3D/X
Высшая школа экономики, Москва, 2013
Open GL
Высшая школа экономики, Москва, 2013
Direct 3D/X
?
Высшая школа экономики, Москва, 2013
Direct 3D/X
Высшая школа экономики, Москва, 2013
Direct 3D/X
DirectX – мощнейший набор библиотек, API и расширений
•Direct3D
•Direct2D
•DirectPlay
•DirectInput
•DirectSound
•DirectShow
•…
Высшая школа экономики, Москва, 2013
Direct 3D
Обработка:
•Rendering Pipeline
•Anti-aliasing and mip-mapping
•Alpha Blending
•Z-buffer
•Shaders
•…
Высшая школа экономики, Москва, 2013
Direct 3D
• Не портируется
• Проще в работе с готовыми функциями
• Менее гибкий
• Нет возможности скорректировать часть драйвера
устройства (видеокарты)
Высшая школа экономики, Москва, 2013
Direct 3D/X
Высшая школа экономики, Москва, 2013
Direct 3D/X vs OpenGL
void init_graphics(void)
{
// create the vertices using the CUSTOMVERTEX struct
CUSTOMVERTEX vertices[] =
{
{ -3.0f, 3.0f, -3.0f, D3DCOLOR_XRGB(0, 0, 255), },
{ 3.0f, 3.0f, -3.0f, D3DCOLOR_XRGB(0, 255, 0), },
{ -3.0f, -3.0f, -3.0f, D3DCOLOR_XRGB(255, 0, 0), },
{ 3.0f, -3.0f, -3.0f, D3DCOLOR_XRGB(0, 255, 255), },
{ -3.0f, 3.0f, 3.0f, D3DCOLOR_XRGB(0, 0, 255), },
{ 3.0f, 3.0f, 3.0f, D3DCOLOR_XRGB(255, 0, 0), },
{ -3.0f, -3.0f, 3.0f, D3DCOLOR_XRGB(0, 255, 0), },
{ 3.0f, -3.0f, 3.0f, D3DCOLOR_XRGB(0, 255, 255), },
};
// create a vertex buffer interface called v_buffer
d3ddev->CreateVertexBuffer(8*sizeof(CUSTOMVERTEX),
0,
CUSTOMFVF,
D3DPOOL_MANAGED,
&v_buffer,
NULL);
….
// select the vertex and index buffers to use
d3ddev->SetStreamSource(0, v_buffer, 0, sizeof(CUSTOMVERTEX));
d3ddev->SetIndices(i_buffer);
// draw the cube
d3ddev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 8, 0, 12);
void display(){
// Clear screen and Z-buffer glClear(GL_COLOR_BUFFER_BIT|
GL_DEPTH_BUFFER_BIT);
// Reset transformations
glLoadIdentity();
// Other Transformations
// glTranslatef( 0.1, 0.0, 0.0 );
// Not included
// glRotatef( 180, 0.0, 1.0, 0.0 ); // Not included
// Rotate when user changes rotate_x and rotate_y
glRotatef( rotate_x, 1.0, 0.0, 0.0 );
glRotatef( rotate_y, 0.0, 1.0, 0.0 );
// Other Transformations
// glScalef( 2.0, 2.0, 0.0 ); // Not included
glBegin(GL_POLYGON);
glColor3f( 1.0, 0.0, 0.0 ); glVertex3f( 0.5, -0.5, -0.5 ); // P1 is red
glColor3f( 0.0, 1.0, 0.0 ); glVertex3f( 0.5, 0.5, -0.5 ); // P2 is green
glColor3f( 0.0, 0.0, 1.0 ); glVertex3f( -0.5, 0.5, -0.5 ); // P3 is blue
glColor3f( 1.0, 0.0, 1.0 ); glVertex3f( -0.5, -0.5, -0.5 ); // P4 is purple
glEnd();
int main(int argc, char* argv[]){
// Initialize GLUT and process user parameters
glutInit(&argc,argv);
// Request double buffered true color window with Z-buffer
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
// Create window
glutCreateWindow("Awesome Cube");
// Enable Z-buffer depth test
glEnable(GL_DEPTH_TEST);
// Callback functions
glutDisplayFunc(display); glutSpecialFunc(specialKeys);
// Pass control to GLUT for events
glutMainLoop();
// Return to OS
return 0;
}
Высшая школа экономики, Москва, 2013
Shaders
?
Высшая школа экономики, Москва, 2013
Shaders
Высшая школа экономики, Москва, 2013
Параллельные вычисления
Примеры задач для параллельного вычисления:
•Обработка графики для вывода на экран
•Параллельные вычисления однотипных задач «перебором»
•Поиск оптимального решения многопараметрической задачи
•…
Высшая школа экономики, Москва, 2013
Параллельные вычисления
Закон Амдала:
В случае, когда задача разделяется на несколько частей,
суммарное время её выполнения на параллельной системе
не может быть меньше времени выполнения самого
длинного фрагмента
α – доля только
«последовательных»
вычислений
p – количество ядер
вычисления
Высшая школа экономики, Москва, 2013
Параллельные вычисления
Высшая школа экономики, Москва, 2013
Параллельные вычисления
CUDA
Высшая школа экономики, Москва, 2013
CUDA
Программно-аппаратная архитектура параллельных
вычислений для Nvidia
Программы могут использовать GPU посредством:
•„Обращения к стандартным функциям библиотек (BLAS, FFTW)
– cublas dll (cublasemu dll)
– cufft.dll (cufftemu.dll)
+ очень просто
- НЕ очень эффективно
•„ Использования CUDA runtime API
•„ Использования CUDA driver API
Высшая школа экономики, Москва, 2013
CUDA
Высшая школа экономики, Москва, 2013
CUDA
CUDA driver API (функции cu*)
•„ Низкий уровень
– „ Тяжелее программировать
– „ Больший контроль над процессом
CUDA runtime API (функции cuda )*
•„ Более абстрактно чем driver API (простота)
•„ Возможность использовать эмуляцию устройства
Высшая школа экономики, Москва, 2013
CUDA
• Процессы объединяются в блоки (blocks), внутри которых
они имеют общую память (shared memory) и синхронное
исполнение
• Блоки объединяются в сетки (grids)
– Нет возможности предсказать очерёдность запуска блоков в сетке
– Между блоками нет и не может быть (см. выше) общей памяти
Высшая школа экономики, Москва, 2013
Высшая школа экономики, Москва, 2013
Вычислительные кластеры на видеокартах
• С/К «Ломоносов»
– 78 000 + ядер
– Реальная производительность – более 900 Тфлопс (i5 – около 100
Гфлопс)
– Использование спец. шины InfiniBand для коммутации (до 300
Гбит/сек)
– Гетерогенная архитектура
Высшая школа экономики, Москва, 2013
Вычислительные кластеры на видеокартах
• Области
– Нантехнологии
– Статистика
– Big Data
– Медицина
– …
Высшая школа экономики, Москва, 2013
Вопросы
?

08 Видеокарты

  • 1.
    Высшая школа экономики,Москва, 2013 www.hse.ru ЛЕКЦИЯ 8 ВИДЕОАДАПТЕРЫ, ВИДЕОКАРТЫ И УСКОРИТЕЛИ Соболевский Алексей ИНЖЕНЕРНАЯ И КОМПЬЮТЕРНАЯ ГРАФИКА 2 КУРС
  • 2.
    Высшая школа экономики,Москва, 2013 Темы лекции • Что такое видеоадаптер/видеокарта? • История и эволюция видеокарт • Устройство современных видеокарт • API современных видеокарт • Параллельные вычисления на видеокартах • Вычислительные кластеры на видеокартах
  • 3.
    Высшая школа экономики,Москва, 2013 Немного истории What does the Wiki say? Видеокарта (также видеоадаптер, графический адаптер, графическая плата, графическая карта, графический ускоритель) — электронное устройство, преобразующее графический образ, хранящийся, как содержимое памяти компьютера (или самого адаптера), в форму, пригодную для дальнейшего вывода на экран монитора.
  • 4.
    Высшая школа экономики,Москва, 2013 Немного истории • MDA (Monochrome Display Adapter) • CGA (Color Graphics Adapter) • EGA (Enhanced Graphics Adapter) • VGA (Video Graphics Array) – Графический контроллер – видеопамять – последовательный преобразователь – контроллер атрибутов – Синхронизатор – контроллер ЭЛТ
  • 5.
    Высшая школа экономики,Москва, 2013 Немного истории CGA Adapter
  • 6.
    Высшая школа экономики,Москва, 2013 Немного истории CGA graphics
  • 7.
    Высшая школа экономики,Москва, 2013 Немного истории Test Drive Ferrari. CGA vs Now (NFS)
  • 8.
    Высшая школа экономики,Москва, 2013 Немного истории Раньше было: Видеокарта (2D) + ускоритель (3D) Сейчас: Видеокарта (3D) + сопроцессоры (Shaders, Physics)
  • 9.
    Высшая школа экономики,Москва, 2013 Was ist GPU? GPU (graphics processing unit) – устройство, выполняющее графический рендеринг (обработку). Отличия от CPU: •архитектура, максимально нацеленная на увеличение скорости расчёта текстур и сложных графических объектов, а так же микропрограмм, связанных с их обработкой •ограниченный набор команд
  • 10.
    Высшая школа экономики,Москва, 2013 ¿Qué hay en la tarjeta gráfica? • Графический процессор • Видеоконтроллер • Видео-ПЗУ • Видеопамять • Цифрово-аналоговый преобразователь • Коннектор/разъём
  • 11.
    Высшая школа экономики,Москва, 2013 Графический процессор Собственно, это и есть GPU. Очень много ядер Очень-очень много ядер >.<
  • 12.
    Высшая школа экономики,Москва, 2013 Графический процессор Итого: почти в 100 раз больше ядер для вычислений по сравнению с CPU
  • 13.
    Высшая школа экономики,Москва, 2013 Графический процессор Почему их не используют в качестве CPU?
  • 14.
    Высшая школа экономики,Москва, 2013 Графический процессор
  • 15.
    Высшая школа экономики,Москва, 2013 Видеоконтроллер • Формирование изображения в видеопамяти • Обрабатывает запросы от CPU • Передаёт данные на i/o (ЦАП, RAMDAC) • Контроллер внутренней шины данных и контроллер видеопамяти • Внутренняя шина – 128 или 256 разрядов против 32 на внешнюю шину
  • 16.
    Высшая школа экономики,Москва, 2013 Видеопамять • Кадровый буфер (Frame Buffer) • Невидимые и промежуточные элементы изображения и прочие данные
  • 17.
    Высшая школа экономики,Москва, 2013 Видеопамять Небольшой пример: 1024х768 * 24 бита цвет = 2,25 Мб 2,25 Мб*75Гц = 170 Мб/с (номинал, только вывод) 1600х1200 * 32 бита * 75 Гц = 550 Мб/с
  • 18.
    Высшая школа экономики,Москва, 2013 Видеопамять • FPM DRAM • VRAM • WRAM • EDO DRAM • SDRAM • DDR SDRAM • SGRAM • MDRAM • RDRAM
  • 19.
    Высшая школа экономики,Москва, 2013 Видеопамять SDRAM •Передача данных только по одному фронту сигнала синхроимпульса •168 pins DDR SDRAM •Передача данных сразу по двум фронтам сигнала синхроимпульса •184 pins •«удвоенное» значение частоты
  • 20.
    Высшая школа экономики,Москва, 2013 ЦАП (RAMDAC) Random Access Memory Digital-to-Analog Converter •3 ЦАП (по 1 ЦАП на канал цветности) и 1 ЦАП для гамма-коррекции •Используется, в основном, для вывода на CRT
  • 21.
    Высшая школа экономики,Москва, 2013 Видеокарта
  • 22.
    Высшая школа экономики,Москва, 2013 Видеокарта
  • 23.
    Высшая школа экономики,Москва, 2013 Видеокарта • Около 4 000 000 000 транзисторов на одной плате • Около 1 000 ядер на обработку • Отдельные блоки для буферизации, растеризации, обработки команд CUDA, Direct 3D, Open CL, Open GL • Сенсоры, датчики, обработчики ошибок, синхронизация, доп. интерфейсы • Техпроцесс 20-25 нм
  • 24.
    Высшая школа экономики,Москва, 2013 API API (Application programming interface, Интерфейс программирования приложений) Дополнительные специальные функции для обработки определённых типов данных Open GL Direct 3D/X
  • 25.
  • 26.
    Высшая школа экономики,Москва, 2013 Direct 3D/X ?
  • 27.
    Высшая школа экономики,Москва, 2013 Direct 3D/X
  • 28.
    Высшая школа экономики,Москва, 2013 Direct 3D/X DirectX – мощнейший набор библиотек, API и расширений •Direct3D •Direct2D •DirectPlay •DirectInput •DirectSound •DirectShow •…
  • 29.
    Высшая школа экономики,Москва, 2013 Direct 3D Обработка: •Rendering Pipeline •Anti-aliasing and mip-mapping •Alpha Blending •Z-buffer •Shaders •…
  • 30.
    Высшая школа экономики,Москва, 2013 Direct 3D • Не портируется • Проще в работе с готовыми функциями • Менее гибкий • Нет возможности скорректировать часть драйвера устройства (видеокарты)
  • 31.
    Высшая школа экономики,Москва, 2013 Direct 3D/X
  • 32.
    Высшая школа экономики,Москва, 2013 Direct 3D/X vs OpenGL void init_graphics(void) { // create the vertices using the CUSTOMVERTEX struct CUSTOMVERTEX vertices[] = { { -3.0f, 3.0f, -3.0f, D3DCOLOR_XRGB(0, 0, 255), }, { 3.0f, 3.0f, -3.0f, D3DCOLOR_XRGB(0, 255, 0), }, { -3.0f, -3.0f, -3.0f, D3DCOLOR_XRGB(255, 0, 0), }, { 3.0f, -3.0f, -3.0f, D3DCOLOR_XRGB(0, 255, 255), }, { -3.0f, 3.0f, 3.0f, D3DCOLOR_XRGB(0, 0, 255), }, { 3.0f, 3.0f, 3.0f, D3DCOLOR_XRGB(255, 0, 0), }, { -3.0f, -3.0f, 3.0f, D3DCOLOR_XRGB(0, 255, 0), }, { 3.0f, -3.0f, 3.0f, D3DCOLOR_XRGB(0, 255, 255), }, }; // create a vertex buffer interface called v_buffer d3ddev->CreateVertexBuffer(8*sizeof(CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED, &v_buffer, NULL); …. // select the vertex and index buffers to use d3ddev->SetStreamSource(0, v_buffer, 0, sizeof(CUSTOMVERTEX)); d3ddev->SetIndices(i_buffer); // draw the cube d3ddev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 8, 0, 12); void display(){ // Clear screen and Z-buffer glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT); // Reset transformations glLoadIdentity(); // Other Transformations // glTranslatef( 0.1, 0.0, 0.0 ); // Not included // glRotatef( 180, 0.0, 1.0, 0.0 ); // Not included // Rotate when user changes rotate_x and rotate_y glRotatef( rotate_x, 1.0, 0.0, 0.0 ); glRotatef( rotate_y, 0.0, 1.0, 0.0 ); // Other Transformations // glScalef( 2.0, 2.0, 0.0 ); // Not included glBegin(GL_POLYGON); glColor3f( 1.0, 0.0, 0.0 ); glVertex3f( 0.5, -0.5, -0.5 ); // P1 is red glColor3f( 0.0, 1.0, 0.0 ); glVertex3f( 0.5, 0.5, -0.5 ); // P2 is green glColor3f( 0.0, 0.0, 1.0 ); glVertex3f( -0.5, 0.5, -0.5 ); // P3 is blue glColor3f( 1.0, 0.0, 1.0 ); glVertex3f( -0.5, -0.5, -0.5 ); // P4 is purple glEnd(); int main(int argc, char* argv[]){ // Initialize GLUT and process user parameters glutInit(&argc,argv); // Request double buffered true color window with Z-buffer glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); // Create window glutCreateWindow("Awesome Cube"); // Enable Z-buffer depth test glEnable(GL_DEPTH_TEST); // Callback functions glutDisplayFunc(display); glutSpecialFunc(specialKeys); // Pass control to GLUT for events glutMainLoop(); // Return to OS return 0; }
  • 33.
    Высшая школа экономики,Москва, 2013 Shaders ?
  • 34.
  • 35.
    Высшая школа экономики,Москва, 2013 Параллельные вычисления Примеры задач для параллельного вычисления: •Обработка графики для вывода на экран •Параллельные вычисления однотипных задач «перебором» •Поиск оптимального решения многопараметрической задачи •…
  • 36.
    Высшая школа экономики,Москва, 2013 Параллельные вычисления Закон Амдала: В случае, когда задача разделяется на несколько частей, суммарное время её выполнения на параллельной системе не может быть меньше времени выполнения самого длинного фрагмента α – доля только «последовательных» вычислений p – количество ядер вычисления
  • 37.
    Высшая школа экономики,Москва, 2013 Параллельные вычисления
  • 38.
    Высшая школа экономики,Москва, 2013 Параллельные вычисления CUDA
  • 39.
    Высшая школа экономики,Москва, 2013 CUDA Программно-аппаратная архитектура параллельных вычислений для Nvidia Программы могут использовать GPU посредством: •„Обращения к стандартным функциям библиотек (BLAS, FFTW) – cublas dll (cublasemu dll) – cufft.dll (cufftemu.dll) + очень просто - НЕ очень эффективно •„ Использования CUDA runtime API •„ Использования CUDA driver API
  • 40.
  • 41.
    Высшая школа экономики,Москва, 2013 CUDA CUDA driver API (функции cu*) •„ Низкий уровень – „ Тяжелее программировать – „ Больший контроль над процессом CUDA runtime API (функции cuda )* •„ Более абстрактно чем driver API (простота) •„ Возможность использовать эмуляцию устройства
  • 42.
    Высшая школа экономики,Москва, 2013 CUDA • Процессы объединяются в блоки (blocks), внутри которых они имеют общую память (shared memory) и синхронное исполнение • Блоки объединяются в сетки (grids) – Нет возможности предсказать очерёдность запуска блоков в сетке – Между блоками нет и не может быть (см. выше) общей памяти
  • 43.
  • 44.
    Высшая школа экономики,Москва, 2013 Вычислительные кластеры на видеокартах • С/К «Ломоносов» – 78 000 + ядер – Реальная производительность – более 900 Тфлопс (i5 – около 100 Гфлопс) – Использование спец. шины InfiniBand для коммутации (до 300 Гбит/сек) – Гетерогенная архитектура
  • 45.
    Высшая школа экономики,Москва, 2013 Вычислительные кластеры на видеокартах • Области – Нантехнологии – Статистика – Big Data – Медицина – …
  • 46.
    Высшая школа экономики,Москва, 2013 Вопросы ?