Интегрированные графические карты Intel® – рассчитывайте на них!

Название этой статьи умышленно сформулировано именно так, чтобы кратко, но в то же время полно отражать ее содержание и нести сразу два смысла. Во-первых, интегрированные с материнской платой графические карты Intel (Intel® Integrated Graphics, IGFX) с Графическим Медиа Акселератором (Graphics Media Accelerator, GMA) занимают значительную часть рынка, причем, Intel развивает и в будущем планирует продолжить развитие этого сегмента своей продукции. Так что, определяя системные требования к вашему разрабатываемому программному продукту, то есть, решая, на каком «железе» он будет выполняться, на интегрированную графику Intel стоит рассчитывать. Во-вторых, современные интегрированные графические ядра карт Intel, о которых пойдет речь в этой статье, имеют достаточную производительность, чтобы рассчитывать на них графику игровых приложений. Оба этих утверждения мы постараемся доказать ниже.

Хотя разные источники приводят слегка отличающиеся статистические данные, можно утверждать, что в 2006-2007 годах Intel с долей в сегменте рынка, превышающей 50%, занимает первое место среди производителей интегрированных графических карт для настольных компьютеров, а также лидирует «в общем зачете» производителей интегрированной графики (с учетом мобильных компьютеров) – более 35% доли сегмента рынка по данным Mercury Research*.

При этом, в 2006-2007 годах общие поставки интегрированных графических карт по всему миру для всех производителей примерно в три раза превысили поставки неинтегрированных (дискретных) графических карт. И по прогнозам это соотношение со временем только увеличится, а именно – поставки интегрированных карт вырастут, а дискретных снизятся. Прежде всего, это произойдет за счет увеличения числа мобильных компьютеров, в которых по соображениям геометрических размеров, цены, тепловыделения и энергопотребления обычно нецелесообразно ставить отдельную графическую карту.

Что означают эти цифры? Что даже если на каждый PC со встроенным видеоадаптером была дополнительно поставлена дискретная графическая карта (что маловероятно), то 2/3 современных компьютеров остаются только со встроенной графикой. Если же дискретные карты ставятся исключительно на компьютеры без интегрированного видеоадаптера, то доля компьютеров только со встроенной графикой возрастает до ¾ общего числа всех PC.

Давайте посмотрим, какие чипсеты Intel представлены на рынке, и каковы их характеристики. Мы не будем упоминать уже давно выпускаемые и хорошо известные чипсеты 945G и 945GM – они основаны на графическом ядре предыдущего поколения – GMA950, в то время как абсолютное большинство современных чипсетов Intel базируется на графических ядрах нового поколения - семейства GMA 3x00.

В таблице ниже приведены сравнительные «высокоуровневые» характеристики работы с 3D-графикой ядер GMA 3x00 и модели базирующихся на них чипсетов.

Графическое Ядро Intel® GMA 3000 Intel® GMA 3100 Intel® GMA X3000 Intel® GMA X3100 Intel® GMA X3500
Intel® Chipset 946GZ, Q963, Q965 G31, G33, Q33, Q35 G965 GM965, GL960 G35
Видео память До 256 MB До 256 MB До 384 MB До 384 MB До 384 MB
Поддержка DirectX* DirectX* 9.0c DirectX* 9.0c DirectX* 9.0c DirectX* 10.1 DirectX* 10.1
Поддержка OpenGL 1.4 + Extensions 1.4 + Extensions OpenGL 1.5 OpenGL 1.5 OpenGL 2.0
Аппаратный T&L НЕТ НЕТ ЕСТЬ ЕСТЬ ЕСТЬ
Поддерживаемая Шейдерная Модель 2 2 3.0 4.02 4.02

1 – DirectX10 – реализован на аппаратном уровне, поддержка в драйвере ожидается в первом квартале 2008
2 – Шейдерная модель 4.0 – реализована на аппаратном уровне поддержка в драйвере ожидается в первом квартале 2008

В дополнение к этой информации нужно отметить, что не только все приведенные в таблице современные чипсеты, но и 945G, относящийся к предыдущему поколению, поддерживают Windows Vista Aero*.

Intel® GMA 3x00 с индексом «X» также поддерживают 32-битные операции с плавающей точкой для Вершинных и Пиксельных шейдеров и текстурирования.

Но главное - аппаратная поддержка T&L (преобразования и освещения вершин), а также Вершинных и Пиксельных шейдеров Модели 3.0 реализована в драйверах Intel® GMA X3х00 начиная с августа 2007. Хотя, оставлена и возможность переключения на программный T&L – в некоторых случаях он работает быстрее.

Как видите, возможности Intel® GMA X3x00 сравнимы с возможностям дискретных видеокарт начального и даже среднего уровня. Но возможности – это только основа потенциала видеокарты, а сам потенциал – это ее производительность.

Что можно сказать о производительности GMA X3x00?

Прежде всего, то, что как у всякой встроенной карты, использующей для работы не только свои ресурсы, но и CPU, а также системную память, производительность сильно зависит от характеристик системы «в целом» - процессора, памяти, и конкретной материнской платы, частью которой является чипсет. Кроме того, сильное влияние на производительность карты оказывает графический драйвер. Поэтому давать оценку производительности интегрированной графики Intel «в общем», без учета специфики конкретного компьютера - некорректно. Но дать некоторые оценки – ориентиры можно.

Еще в 2004 году на ixbt.com была опубликована статья, посвященная исследованию производительности интегрированных графических карт для платформы Pentium® 4. Название данной статьи говорит само за себя: «Интегрированная графика для платформы Pentium® 4: все не так уж плохо…», а результаты тестирования интегрированной графики Intel для 3D-игр приятно удивили авторов. С момента выхода статьи сменилось уже два поколения Intel GMA, появились новые производительные многоядерные процессоры Intel® Core2™ и ускорился доступ к системной памяти, что положительно сказалось на быстродействии интегрированной графической карты Intel. Так что в 2007 можно смело утверждать, что «Интегрированная Графика Intel – все совсем неплохо».

GMA X3х00 с драйверами начиная с версии 14.31/15.6 (WindowsXP/Windows Vista) подходит для таких популярных игр, как Battlefield 2142*, Call of Duty 2*, Supreme Commander, Madden 2007*, Ghost Recon: Advanced Warfighter*, Unreal Tournament 2004*, World Of Warcraft*, Microsoft Flight Simulator X*, The Sims 2* (plus the expansion packs), Quake IV*, Half Life 2*, Far Cry*.

Полный список самых распространенных игр, работающих на GMA X3х00 , можно увидеть на сайте http://support.intel.com/support/graphics/intelg965/sb/cs-023018.htm

Приведем сравнение производительности некоторых игр для встроенных графических карт последнего поколения (выпущенных на рынок в 2007 году): Intel G965, NVIDIA7050 и AMD* 690G (конфигурация тестовых систем - в приложении 1 в конце статьи)

Cравнение производительности игр

А сколько кадров в секунду выдает ваше графическое приложение на Интегрированной Графике Intel®?

Если ваш ответ - «ноль», то есть, оно вообще не запускается (но работает на дискретных видеокартах), то ваши действия:

  • Установите последнюю версию графического драйвера Intel с http://downloadcenter.intel.com (в разделе «Products»(«Продукты») выбираете нужный чипсет, затем – ОС)
  • Если ваше приложение использует Direct3D, то проверьте инициализацию D3D Device. Возможно, что, обнаружив отсутствие аппаратного преобразования и освещения вершин, приложение просто не создает D3D Device. Это не всегда правильно. Пример корректного кода инициализации DX9 Device с идентификацией Intel GMA приведен ниже - в приложении 2. Для инициализации DX9 Device сначала идет «стандартная» проверка возможностей устройства по аппаратному преобразованию и освещению:
    (caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT),
    и если они присутствуют, то ставится соответствующий флаг обработки вершин:
    vertexprocessingmode = D3DCREATE_HARDWARE_VERTEXPROCESSING;
    иначе – определяется идентификатор графической карты
    g_pD3D->GetAdapterIdentifier(0,0,&adapterID )
    и сравнением VendorId и DeviceId проверяется на соответствие современной встроенной графике Intel:
    if ( ( adapterID.VendorId == 0x8086 ) && // Intel Architecture
    ( adapterID.DeviceId == 0x2A02 ) || // GM965 Device 0
    ( adapterID.DeviceId == 0x29A2 ) || // G965 Device 0
    ( adapterID.DeviceId == 0x27A2 ) // 945GM Device 0
    ........

Если такое соответствие обнаружено, то ставится (а потом используется при создании DX9 Device) флаг программной обработки вершин
vertexprocessingmode = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
и только если оказывается, что графическая карта не только не поддерживает аппаратную обработку вершин, но и не принадлежит к производительным Intel GMA, то принимается фактическое решение не создавать DX9 Device.

  • Возможно также, что ваше приложение некорректно определяет доступный объем видеопамяти – без учета того, что интегрированные карты Intel используют в качестве видеопамяти динамически выделяемую часть обычной системной памяти. Чтобы узнать действительный доступный объем видеопамяти на интегрированной графике Intel, проверяйте «локальную память» (“Local Memory”). Эта проверка вернет вам истинное значение, в то время как проверка «нелокальной памяти» (Non-Local Video Memory) покажет ноль.
    Для получения корректного значения доступной видеопамяти в DirectX 9 можно также использовать функцию получения доступной памяти для текстур:
    int AvailableMem = g_pd3dDevice->GetAvailableTextureMem()

Так сколько кадров в секунду выдает ваше приложение на Интегрированной Графике Intel?

Если меньше, чем хотелось бы, то обратите внимание на следующие советы по оптимизации или конфигурации вашего приложения. Основной фактор, ограничивающий производительность современных Intel GMA, –это не скорость вычислений, а скорость заполнения (fill rate), поэтому большинство советов направлено именно на решение этой проблемы – на уменьшение числа отрисовываемых пикселей.

  • Предоставьте пользователям возможность понизить экранное разрешение вашего приложения, уменьшить качество (разрешение) текстур, отключить эффекты, требующие двухпроходной отрисовки – например, тени.
  • Сложные однопроходные шейдеры для GMA X3х00 предпочтительнее простых многопроходных шейдеров
  • Используйте аппаратный тест буфера глубины (Z-test) для уменьшения числа пикселов, посылаемых на отрисовку. Z-test пикселя проводится перед пиксельными шейдерами (при их наличии) и работает достаточно эффективно. Поэтому, по возможности, пользуйтесь автоматическим Z-test, а не манипулируйте буфером глубины напрямую в пиксельных шейдерах.

    Чтобы еще больше ускорить работу Z-test, можно попробовать в списке отрисовки расположить объекты в сцене в порядке удаления от зрителя. Но если это переупорядочивание объектов приведет к промахам в кеше текстур или к дополнительным сменам состояния DirectX или OpenGL, а значит, и к падению общей производительности, то от полного переупорядочивания стоит отказаться. Выход – объединить объекты в группы по общим текстурам и\или состояниям и, по возможности, изменить порядок следования групп в сцене - «сначала ближние, потом дальние». Но если пространственная сложность сцены невелика и используются только простые шейдеры с одной текстурой, то повышения производительности от подобной сортировки ожидать не стоит.

  • Также при использовании сложных пиксельных шейдеров для минимизации количества фактически отрисовываемых пикселей, попробуйте использовать двухпроходную обработку (rendering): сначала только с Z test (с отключенной записью в буфер цветов и выполнением пиксельных шейдеров), а потом уже с включенной отрисовкой. Однако, выигрыш производительности не гарантируется, так как может оказаться, что «стоимость» двух проходов окажется выше, чем у однопроходной обработки пиксельного шейдера.
  • Используйте проверку на загораживание (Occlusion Query), поддерживаемую GMA X3х00 в D3D. Такая проверка используется для определения числа потенциально видимых пикселей объекта при помощи рисования не самого объекта, а его ограничивающего объема. Если Occlusion Query возвращает ноль, это значит, что ни один пиксель ограничивающего объема, а значит, и самого объекта, не был виден, следовательно, объект можно не рисовать. Такая проверка максимально эффективна для сложных объектов с большим количеством вершин. Для дополнительной информации обратитесь к справке по функции IDirect3DDevice9::CreateQuery()
  • Для достижения максимального эффекта комбинируйте вышеописанные приемы.
    Например, при использовании двухпроходной обработки в первом проходе только с Z- test можно переупорядочить объекты сцены «от ближних к дальним». Так как этот проход не включает отрисовку на экран, изменение порядка объектов не внесет никаких дополнительных накладных расходов на смену состояния DirectX или OpenGL или загрузку-выгрузку текстур. Кроме того, к этому же проходу для сложных объектов можно добавить Occlusion Query, по результатам которого исключить невидимые объекты из финального прохода – отрисовки.

Дополнительные ресурсы

В заключение отметим, что, конечно же, эта статья не содержит всей информации о постоянно развивающейся Интегрированной Графике Intel. Поэтому рекомендуем обратиться за дополнительной информацией:

Приложение 1. Конфигурация оборудования для тестов игр

  • Intel System: Processor Intel ® core ™ 2 Duo E6700 Dual channel DS Micron* 2GB (2x1GB) @DDR2-667 5-5-5-15 with Integrated Intel GMAХ3000 graphics + Seagate* 320GB NCQ SATA2 (BIOS:0023, Graphics: 1268, Sound: 5274)
  • AMD System: AMD * Athlon64 X2 6000+ 3.00G/1000/2x1MB on Asus M2A-VM Dual channel DS Micron 2GB (2x1GB) DDR2-800 5-5-5-18 with Integrated ATI X1250 graphics + Seagate 320GB NCQ SATA2 (BIOS:901, Graphics: ATI 7.7, Sound: 5386)
  • NVIDIA System: AMD* Athlon64 X2 6000+ 3.00G/1000/2x1MB on BIOStar TF7050-M2 (nVidia C68) Dual channel DS Micron 2GB (2x1GB) DDR2-800 5-5-5-18 with Integrated nVidia 7050PV graphics + Seagate 320GB NCQ SATA2 (BIOS:07/16, Graphics: NV 7.15.11.6222, Sound: 6.01.5377)
  • OperatingSystem: Windows* Vista* Ultimate RTM Build 6000 NTFS

Приложение 2. Пример корректной инициализации флага обработки вершин для создания D3D Device

DWORD SetVertexProcessingMode( LPDIRECT3D9 pD3D ) 
{ 
DWORD vertexprocessingmode; // vertex processing mode 
D3DCAPS9 caps; // Device CAPs structure 
D3DADAPTER_IDENTIFIER9 adapterID; // Used to store device info 

// Retrieve device capabilities 
if( g_pD3D->GetDeviceCaps( 0, D3DDEVTYPE_HAL, &caps ) != D3D_OK ) 
{ 
return E_FAIL; // exit if reading caps fails... 
} 

// Check if hardware T&L is supported... 
// - The D3DDEVCAPS_HWTRANSFORMANDLIGHT capability should 
// be enabled for GMA X3000 
if ( ( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) != 0 ) 
{ 
vertexprocessingmode = D3DCREATE_HARDWARE_VERTEXPROCESSING; 
} 
else 
{ 
// Check vendor and device ID and enable software vertex 
// processing for Intel® Graphics... 

// Gather the primary adapter's information... 
if( g_pD3D->GetAdapterIdentifier(0,0,&adapterID ) != D3D_OK ) 
{ 
return E_FAIL; 
} 

if ( ( adapterID.VendorId == 0x8086 ) && // Intel Architecture 
( adapterID.DeviceId == 0x2972 ) || // 946GZ Device 0 
( adapterID.DeviceId == 0x2973 ) || // 946GZ Device 1 
( adapterID.DeviceId == 0x27A2 ) || // 945GM Device 0 
( adapterID.DeviceId == 0x27A6 ) || // 945GM Device 1 
( adapterID.DeviceId == 0x2772 ) || // 945G Device 0 
( adapterID.DeviceId == 0x2776 ) || // 945G Device 1 
( adapterID.DeviceId == 0x2992 ) || // Q965/Q963 Device 0 
( adapterID.DeviceId == 0x2993 ) || //Q965/Q963 Device 1 
( adapterID.DeviceId == 0x29B2 ) || // Q35 Device 0 
( adapterID.DeviceId == 0x29B3 ) || //Q35 Device 1 
( adapterID.DeviceId == 0x29C2 ) || //G33/G31Device 0 
( adapterID.DeviceId == 0x29C3 ) || //G33/G31 Device 1 
( adapterID.DeviceId == 0x29D2 ) || //Q33 Device 0 
( adapterID.DeviceId == 0x29D3 ) //Q33 Device 1 

{ 
vertexprocessingmode = D3DCREATE_SOFTWARE_VERTEXPROCESSING; 
} 
else 
{ 
// Chipset does not meet minimum requirements... 
return E_MINSPEC; 
} 
} 
return vertexprocessingmode; 
}

* Источник: Mercury Research; Bear, Stearns & Co. Inc.

有关编译器优化的更完整信息,请参阅优化通知
类别:
标签: