Qualcomm — не новичок в мире интегрированной графики. Её линейка Adreno GPU использовалась во многих поколениях SoC Snapdragon для сотовых телефонов. Но компании Qualcomm всегда было тесно в рамках телефонного рынка, она таила амбиции расширить свою мощь и выйти на другой уровень производительности. Сегодня её Snapdragon X Elite выпускается с прицелом на рынок ноутбуков. Adreno тоже переносится на рынок более высокой производительности, на котором есть такие конкуренты, как iGPU Intel Xe-LPG в Meteor Lake и iGPU AMD RDNA 3 в Phoenix.
Официально Qualcomm присвоила iGPU чипа Snapdragon X Elite маркировку Adreno X1. Это исключительно маркетинговое название, отличающееся от прежней схемы именования Adreno nxx. В этой схеме n обозначала поколение архитектуры, а значения xx — версии реализации в рамках этого поколения. Возможно, внутри Qualcomm эта схема именования по-прежнему используется, потому что в драйверах этот GPU упоминается как Adreno 741. Название Adreno 741 подразумевает, что iGPU чипа Snapdragon X Elite — это более мощная версия Adreno 730, ранее тестированная в чипе для мобильных телефонов Snapdragon 8+ Gen 1.
Чтобы не усложнять, мы обозначим GPU Snapdragon X Elite как Adreno X1. Тестирование выполнялось на Samsung Galaxy Book4 Edge. Для сравнения использовался чип Intel Core Ultra 7 155H Meteor Lake в Asus Zenbook 14. AMD Phoenix тестировался в паре разных конфигураций. Ryzen Z1 Extreme тестировался в ROG Ally, а Ryzen 7840HS — в HP ZBook Firefly 14 G10 A..
Чтобы подробнее изучить архитектуры GPU каждой из компаний, мы будем использовать различные тесты OpenCL, написанные Clam, а также тесты на основе Vulkan, написанные Nemes. Последние полезны потому, что реализация OpenCL Qualcomm иногда может вызывать проблемы в Windows.
Обзор
Qualcomm нацелена на использование с требовательными играми для PC благодаря увеличению масштабов и тактовой частоты архитектуры Adreno 7xx. В самых дорогих Snapdragon X Elite Adreno X1 можно разгонять до 1,5 ГГц, однако в протестированных нами устройствах частота была ограничена 1,25 ГГц. Но 1,25 ГГц — это всё равно больше, чем 900 МГц, на которых Adreno 730 работал в Snapdragon 8+ Gen 1..
Кроме увеличения размеров и скорости GPU, Qualcomm усовершенствовала различные части подсистемы памяти, чтобы GPU не простаивал в ожидании данных. Кэши стали больше, повысилась их пропускная способность. Появился новый кластерный кэш среднего уровня, благодаря чему образовалась четырёхуровневая система кэшей. И всему этому передаются данные при помощи 128-битного контроллера памяти LPDDR5X, поддерживающего до 64 ГБ DRAM.
iGPU Xe-LPG архитектуры Intel Meteor Lake имеет более простую двухуровневую иерархию кэшей, но обладает большей ёмкостью на каждом из уровней. Adreno X1 — это относительно широкий iGPU с 1536 блоками FP32, а Meteor Lake имеет 1024 блоков FP32 с частотой на 50% выше. Его теоретическая пропускная способность оказывается очень близкой к этому параметру у Adreno X1.
Обработчик шейдеров Adreno X1
Adreno состоит из обработчиков шейдеров (Shader Processor, SP), каждый из которых содержит два Micro Shader Processor Texture Processor (uSPTP). Самая близкая к uSPTP аналогия — это блок Compute Unit (CU) линейки AMD RDNA. У обоих есть собственные текстурные блоки, кэш текстур, и они оба разделены на два scheduler partition. Благодаря этому SP очень похож по структуре на RDNA WGP (Workgroup Processor). Также он похож на Nvidia Streaming Multiprocessor, реализованный в Maxwell и Pascal.
В Adreno 730 блоки исполнения организованы схожим образом. Каждый scheduler partition получает 64-разрядный блок FP32 и может исполнять операции FP16 с удвоенной частотой. Восемь блоков с особыми функциями выполняют сложные операции, например, вычисление обратного квадратного корня.
GPU передают этим блокам исполнения комбинации из широких векторов, обеспечивая параллелизм на уровне потоков. Adreno X1 использует большие 64-разрядные или 128-разрядные векторы (волны). GPU AMD RDNA могут использовать wave32 или wave64, а Nvidia ограничилась wave32. Intel поддерживает переменные размеры волн до wave32. Чем больше размер волны, тем больше работы GPU может отслеживать в эквиваленте одного потока, но при этом есть риск снижения скорости обработки из-за потерь, связанных с дивергенцией. Судя по микробенчмаркингу таких потерь, Adreno 730 имеет режим wave64.
Кроме того, большие размеры волн создают повышенную нагрузку и на ёмкость регистровых файлов. Каждый выделенный компилятором регистр занимает часть регистрового файла шириной с волну. Можно воспринимать это так, как будто на Adreno X1 программы шейдеров выполняются группами по 64 или 128. То, что в программе шейдера выглядит, как 32-битная переменная, отображается как 64 или 128 32-битных значений, каждое из которых хранит значение переменной для одного вызова программы шейдера. Ёмкость регистрового файла распределяется динамически, в зависимости от того, сколько требуется регистров программе шейдера. Если компилятору нужно распределить множество регистров для сложной программы шейдера, то количество текущих активных групп вызовов шейдеров будет ограничено ёмкостью регистрового файла.
Qualcomm не раскрывает максимально возможную загруженность Adreno X1 и количество волн, которые может отслеживать планировщик. Однако компания сообщила, что каждый uSPTP занимает 192 КБ от ёмкости регистрового файла. Каждая из двух частей планировщика uSPTP должна занимать 96 КБ регистров. Из кода Mesa следует, что Adreno 730 имел по 64 КБ на часть планировщика, то есть Qualcomm увеличила ёмкость регистрового файла на 50%.
Но и при наличии увеличенного регистрового файла Adreno X1 может испытывать трудности с сокрытием задержек, если шейдеры используют большое количество регистров. Даже RDNA 3 из нижнего ценового диапазона имеет регистровые файлы размером 128 КБ. Nvidia использует в Pascal, Ampere и Ada регистровые файлы меньшего размера (64 КБ), но благодаря векторам wave32 меньшего размера обеспечивает производительность, сравнимую с RDNA 3 в режиме wave64.
Intel не распределяет ёмкость регистровых файлов динамически. У каждого Xe Vector Engine есть регистровый файл на 32 КБ, и он всегда обрабатывает максимум восемь активных волн. Каждая волна получает 4 КБ регистров, с которыми можно работать как с 128 регистрами wave8, 32 регистрами wave32 и со многими другими комбинациями, в зависимости от потребностей компилятора.
Скорость обработки compute Adreno X1 находится на уровне с iGPU Intel Meteor Lake. Устройство Qualcomm имеет меньшую тактовую частоту, но компенсирует это очень широкими блоками исполнения. Однако Meteor Lake вырывается вперёд в сложных операциях, например, в вычислении обратного квадратного корня. В AMD Phoenix используется всё из вышеперечисленного. Он имеет высокую частоту, множество блоков FP32, команды на которые передаются в режиме двойного ввода или wave64, и содержит шесть WGP. Таким образом, AMD имеет огромное преимущество в скорости обработки FP32, и меньшее в других аспектах. Qualcomm же благодаря исполнению FP16 с удвоенной частотой лучше справляется с FP16. FP64 не поддерживается в оборудовании Qualcomm, поэтому не представлен на графике выше.
Также очень часто могут применяться целочисленные операции. В простом сложении INT32 Adreno X1 проявляет себя плохо. Adreno 730 имел хорошие показатели со сложением INT32 при тестировании через OpenCL, так что я не совсем понимаю, что происходит с Vulkan. С более сложными операциями INT32 наподобие умножения и нахождения остатков Qualcomm показывает себя вполне достойно. Скорость работы с INT64 на Adreno X1 разнится от посредственной до чрезвычайно плохой.
Доступ к кэшам и памяти
Скорость DRAM не поспевает за прогрессом в скорости compute, это справедливо и для GPU, и для CPU. Интегрированные GPU не могут уместить особо много ресурсов compute, как их дискретные конкуренты из-за ограничений по мощности и тепловыделению, но для обеспечения хорошей производительности им всё равно нужны достаточные структуры кэшей.
При доступе к памяти в Adreno X1 первым делом проверяется 2-килобайтный кэш текстур, индивидуальный для каждого uSPTP. Старые GPU Adreno имели 1-килобайтные кэши текстур, начиная ещё с Adreno 330 (2013 год). С одной стороны, Qualcomm заслуживает уважения за удвоение объёма кэша L1. С другой стороны, она всё равно использует самый маленький из кэшей L1 на рынке. Его задержки чуть выше, чем у кэшей первого уровня RDNA 3 и Intel Xe-LPG.
Пропускная способность кэша первого уровня Adreno X1 чуть ниже 1 ТБ/с, что немного не дотягивает до кэша Nvidia GTX 1050 3 GB. В новых iGPU пропускная способность кэшей L1 гораздо выше. Но надо отдать Qualcomm должное — Adreno X1 значительно лучше Adreno 730.
По традиции Adreno кэш первого уровня Adreno X1 — это выделенный кэш текстур. Операции доступа compute обходят L1 и переходят к следующему уровню в иерархии кэшей. Это достаточно сильно отличается от современных архитектур AMD, Nvidia и Intel GPU, в которых существует кэш первого уровня общего назначения приличного размера. В предыдущих поколения Adreno все операции доступа compute поглощал кэш L2, используемый всем GPU. Adreno X1 снимает часть нагрузки с L2 благодаря добавлению кластерных кэшей размером 128 КБ.
При поверхностном взгляде кластерный кэш похож на кэш среднего уровня L1 в линейке AMD RDNA. Оба сделаны общими для кластера ядер GPU. Однако кластерные кэши Adreno X1 играют более важную роль, потому что у RDNA 3 есть более качественное кэширование перед их кэшами L1 размером 256 КБ. Судя по OpenCL, поиск указателя в кластерном кэше занимает 56,62 нс. Показатели задержек доступа лучше, чем у Vulkan (67 нс), вероятно, благодаря тому, что время не тратится на проверку 2-килобайтного кэша текстур. Кластерный кэш Qualcomm имеет задержки, сравнимые с задержками кэша L1 AMD.
Однако мне бы хотелось видеть более качественное повышение производительности благодаря кластерному кэшу, потому что он будет обрабатывать больше трафика, чем L1 AMD. Кроме того, кэш L1 в RDNA 3 имеет в два раза больший размер.
Qualcomm использует в Adreno X1 три экземпляра кластерных кэшей общим размером 384 КБ (у AMD объём L1 составляет 512 КБ). Возможно, Qualcomm решила, что будет проще удовлетворить потребности в пропускной способности тремя экземплярами кластерных кэшей вместо одного. Однако пропускная способность, измеренная по тесту Vulkan, довольно низка по сравнению с iGPU AMD и Intel. Любопытно, что размеры тестов, умещающиеся в кластерный кэш, не демонстрируют большей пропускной способности, чем у кэша L2.
По сравнению с этим AMD Phoenix и Intel Meteor Lake имеют очень высокую пропускную способность кэша. Отрыв AMD и Intel в пропускной способности настолько огромен, что их замеренная пропускная способность L2 превосходит этот показатель у кэша текстур L1 Adreno X1. Qualcomm имеет преимущество в тестах большего размера благодаря 6-мегабайтному System Level Cache (SLC). SLC обеспечивает пропускную способность примерно 211 ГБ/с.
В случае недружелюбных к кэшу операций доступа Qualcomm выигрывает благодаря очень быстрой LPDDR5X. Snapdragon X Elite имеет больше теоретической пропускной способности, чем все остальные протестированные чипы. Результаты тестов тоже это показывают, преимущество в пропускной способности перед Meteor Lake составляет 12,3%.
Чипы мобильных телефонов традиционно имели очень сильные ограничения пропускной способности памяти. Даже когда производители готовы были использовать быстрые чипы памяти, из-за малой ширины шины доступная пропускная способность часто была гораздо ниже, чем на ноутбуках. 128-битная шина памяти Snapdragon X Elite изменила эту ситуацию. Qualcomm теперь немного обгоняет конкурентов по пропускной способности.
Локальная память (GMEM)
Adreno предназначен для тайлового рендеринга. Экран разбивается на тайлы, оборудование определяет, какие примитивы видимы в каждом тайле, и записывает эту информацию «потока видимости» в память. Затем экран рендерится по одному тайлу. Render target каждого тайла умещается в память на чипе, называемую GMEM. Благодаря рендерингу в GMEM Adreno избегает загрязнения иерархии кэшей и снижает степень использования пропускной способности памяти. Это замечательно подходит для традиционного конвейера растеризации, особенно при ограниченном бюджете энергопотребления и пропускной способности памяти. Памяти GMEM не требуются массивы меток и состояний, как обычному кэшу, поэтому для реализации кэша эквивалентного размера нужна меньшая площадь и мощность.
К сожалению, тайловый рендеринг неприменим с compute или трассировкой лучей (raytracing), потому что информация о примитивах недоступна оборудованию в открытом виде. Adreno X1 имеет достаточно большой блок GMEM (3 МБ) по сравнению с и так уже приличным 2-мегабайтным блоком GMEM Adreno 730. Неиспользование этого блока памяти для ядер compute и raytracing было бы пустой тратой ресурсов, поэтому Qualcomm может использовать GMEM ещё и для локальной памяти или кэшей цвета/глубин.
В качестве локальной памяти GMEM может похвастаться очень хорошими характеристиками задержек. Задержки всего лишь немного выше, чем на современных iGPU AMD и Intel. Они сравнимы с задержками Adreno 730 Snapdragon 8+ Gen 1. Возможно, Qualcomm всё это время распределяла локальную память из GMEM, но программно я не могу это определить.
В отличие от Qualcomm, компании AMD, Intel и Nvidia реализуют локальную память с быстрым хранением внутри ядер GPU. Intel распределяет локальную память из кэша L1 Xe Core, почти так же поступает Nvidia в архитектурах Ampere и Ada. AMD поддерживает локальную память при помощи 128-килобайтного Local Data Share в каждом WGP RDNA.
Эти архитектуры имеют более низкие задержки памяти, чем архитектуры Qualcomm, но разница незначительна. Это не сравнится тем, как старые iGPU Intel имели гораздо большие задержки при доступе к локальной памяти, извлечённой из срезов кэша L3. Несмотря на эти различия, все архитектуры обладают схожими преимуществами в случае, если программисты могут использовать локальную память. Кэши должны хранить массивы меток и состояний, указывающие, какая часть основной памяти содержится в массивах данных кэшей. Доступ к основной памяти через иерархию кэшей должен подвергаться трансляции адресов, потому что GPU поддерживает многозадачность точно так же, как и CPU. Кроме того, доступ к локальной памяти можно выполнять меньшим количеством битов адресов, потому что она гораздо меньше основной памяти.
Adreno X1 страдает примерно от тех же ограничений на распределение локальной памяти, что и Adreno 730. Ядро может использовать до 32 КБ локальной памяти. GPU в целом может единовременно иметь всего 384 КБ локальной памяти. Если попробовать распределить больше, то некоторые workgroup не смогут запускаться параллельно. Любопытно, вызвано ли это тем, что каждый uSPTP выполняет доступ к локальной памяти при помощи отправки 15-битных адресов? 128-килобитные LDS AMD потребовали бы 17-битной адресации.
Наряду с гарантированной низкой задержкой локальная память обеспечивает высокую пропускную способность, потому что данные гарантированно будут находиться в SRAM на чипе. Qualcomm заявляет, что GMEM может обеспечить пропускную способность более чем 2 ТБ/с, но при чтении из локальной памяти я не смог достичь даже близких к этому показателей.
Достигнутая при тестах float4 пропускная способность близка к пропускной способности кэша текстур L1, что гораздо меньше, чем могут достичь AMD и Intel. Adreno X1 ближе к старым дискретным GPU Nvidia нижнего ценового диапазона, но даже они опережают его на существенные 45,2%.
Я подозреваю, что мой тест пропускной способности локальной памяти ограничен тем объёмом данных, который каждый SP может потреблять через свою подсистему загрузки/сохранения, а не той пропускной способностью, которую способна обеспечить GMEM. Пропускная способность на такт SP очень близка к 128 байтам на такт и у Adreno X1, и у Adreno 730. Если каждый SP действительно может получать только по 128 байтов на такт, то даже мощная версия Qualcomm Adreno X1 на 1,5 ГГц будет ограничена сверху пропускной способностью локальной памяти в 1152 ГБ/с. Возможно, заявленный Qualcomm показатель в 2 ТБ/с можно достичь, если ROP будут получать доступ к GMEM одновременно. Впрочем, я никак не могу это протестировать.
Атомарность
Атомарные операции позволяют разным потокам обмениваться данными. OpenCL позволяет выполнять атомарные операции и в локальной, и в глобальной памяти. Атомарные операции в локальной памяти часто быстрее, но могут обмениваться данными только между потоками, выполняемыми в одной и той же workgroup. Атомарные операции в локальной памяти Adreno X1 обеспечивают вполне неплохие показатели, превышающие показатели на Adreno 730. Однако iGPU AMD и Intel умеют выполнять атомарные операции ещё быстрее; вероятно, это вызвано тем, их локальная память расположена ближе к блокам исполнения.
Атомарные операции в глобальной памяти могут работать между любыми парами потоков, исполняемых в GPU. По этому показателю Adreno X1 тоже стал улучшением по сравнению со старыми поколениями Adreno. Производительность гораздо лучше, чем на Adreno 730.
В этих тестах производительность Qualcomm ближе к производительности AMD и Intel. Вероятно, все GPU здесь выполняют межпоточную коммуникацию через кэш L2.
FluidX3D
FluidX3D использует метод решёточных уравнений Больцмана для симуляции поведения жидкости. Предыдущие поколения Adreno испытывали трудности с этой compute-нагрузкой, что странно, ведь программа в общем случае быстро выполняется на широком спектре GPU AMD, Intel и Nvidia. Adreno X1 не может выполнять FluidX3D без модификации, поэтому использовалась пропатченная версия FluidX3D.
В пропатченную версию мы также включили изменения, связанные с производительностью, а именно увеличение размера workgroup с 64 до 128 и установку флага legacy_gpu_fma_patch
. Последний использует a*b+c
вместо встроенной функции fma
OpenCL. Эта функция OpenCL не позволяет округлять промежуточные результаты, что снижает погрешность по сравнению с a*b+c
.
Даже после установки этих флагов Adreno X1 имел низкую производительность по сравнению с примерно равно позиционируемыми с ним iGPU AMD и Intel. Даже iGPU HD 530 в Intel Core i5-6600K почти в три раза быстрее. Впрочем, немного утешает то, что разрыв в случае Adreno X1 хотя бы менее катастрофичен, чем у предыдущих GPU Adreno.
Так как у меня на этот момент не было под рукой системы Snapdragon X Elite, я проверил влияние каждого из изменений на Adreno 730 моего Zenfone 9. Adreno 730 не может распределить буфер, достаточный для обработки сетки 256x256x256 бенчмарка FluidX3D , поэтому прогоны на Adreno 730 выполнялись с сеткой 128x128x128.
На Adreno 730 флаг legacy_gpu_fma_patch
обеспечил серьёзный рост. Возможно, у Qualcomm нет быстрого оборудования для fused multiply-add без промежуточного округления. Настройка размера workgroup тоже увеличила производительность, но при комбинировании с флагом legacy_gpu_fma_patch
дала несущественные результаты. На Intel Core Ultra 7 155H флаг legacy_gpu_fma_patch
не обеспечил никакой разницы, а удвоение размера workgroup увеличило скорость лишь на малую долю.
FluidX3D можно компилировать так, чтобы он использовал для хранения форматы FP16, что снижает требования к объёму памяти и пропускной способности. К сожалению, Adreno X1 не смог завершить бенчмарк FluidX3D при использовании этих режимов FP16.
Cyberpunk 2077
Cyberpunk 2077 — это разработанная для DirectX 12 игра, способная быть очень требовательной при высоких настройках. Однако при низких настройках она обеспечивает вполне приличную картинку, благодаря чему в неё можно играть на новых интегрированных GPU. В этом разделе мы протестируем несколько устройств, предоставленных пользователями нашего Discord. Наша цель заключается в том, чтобы получить представление о месте, которое занимает Snapdragon X Elite. Сравнение чипов по отдельности не будет нашей целью, потому что производительностью любого мобильного чипа сильно зависит от платформы, на которой он реализован (производители могут использовать разные политики управления энергопотреблением). И в отличие от десктопов, важным фактором часто оказывается рассеяние тепла.
Мы запустили встроенный бенчмарк Cyberpunk 2077 с низкими настройками и отключенным апскейлингом, с разрешением 1920×1080 и 1280×720. Хотя у ноутбуков экраны более высокого разрешения, использовать его с iGPU в тонких и лёгких ноутбуках непрактично.
При 1920×1080 Snapdragon X Elite в среднем достигает едва играбельных 24 FPS. Не лучшая производительность по сравнению с Meteor Lake и Phoenix — оба они превышают отметку в 30 FPS. С другой стороны, Qualcomm обеспечил существенный скачок производительности по сравнению с Adreno 690, используемым в Snapdragon 8cx Gen 3.
Qualcomm сравнивала чип X1E-84-100 верхнего ценового диапазона с Core Ultra 7 155H. iGPU чипа X1E-84-100 работает с частотой 1,5 ГГц, а iGPU X1E-80-100 — с частотой 1,25 ГГц. Если предположить, что тактовая частота масштабируется линейно, то X1E-84-100 имеет шанс оказаться в пределах досягаемости Core Ultra 7 155H, используемого в Asus Zenbook 14.
Разумеется, производительность часто не зависит от тактовой частоты линейно. Кроме того, Meteor Lake (185H) с улучшенным охлаждением тоже, возможно, обеспечит более высокую производительность.
Многие ноутбуки снижают производительность при работе от аккумулятора, но Snapdragon X Elite сохраняет тот же уровень производительности. У Meteor Lake производительность немного снижается, из-за чего он начинает опережать Snapdragon X Elite по производительности всего на 17%.
Частота кадров при 1080P всё равно довольно низкая, особенно при работе от аккумулятора. AMD Phoenix по-прежнему обеспечивает больше 30 FPS, особенно в портативных игровых консолях. Впрочем, вероятно, более практичным разрешением для Meteor Lake (от аккумулятора) и Snapdragon X Elite будет 720P. Для 2024 года 720P может казаться низким разрешением, но стоит помнить, что Steam Deck имеет экран 720P. Очень часто низкое разрешение — это лучший способ играть в новые игры для PC на тонких и лёгких устройствах.
При 720P Snapdragon X Elite уверенно преодолевает барьер в 30 FPS. Он всё равно находится позади Meteor Lake, но оба iGPU, похоже, вполне смогут обеспечивать удобную для игры производительность. Phoenix проявляет себя очень хорошо, в среднем выдавая 60 FPS. Qualcomm удалось добиться более чем трёхкратного улучшения по сравнению о старым 8cx Gen 3. Такой прогресс похвален, он демонстрирует, что Qualcomm серьёзно намерена взяться за требовательные игры.
Переключение на питание от аккумулятора снова никак не повлияло на Snapdragon X Elite. AMD Ryzen 7840HS тоже продолжает обеспечивать очень хорошую производительность. Однако у Meteor Lake произошло существенное падение частоты кадров. Подозреваю, это связано с тем, что Asus Zenbook 14 не любит получать больше 40 Вт от аккумулятора. Мощность при питании от розетки через разъём USB-C составляла примерно 45 Вт. Работа на 720P повышает нагрузку на CPU, и Meteor Lake, похоже, начинает чувствовать себя плохо, когда CPU и GPU сильнее конкурируют за ограниченный бюджет мощности.
Нормализацию по потребляемой мощности мы лучше оставим на долю крупных сайтов с большими ресурсами и возможностью контроля условий тестирования. Однако мы можем приблизительно оценить энергопотребление платформами, изучив скорость разрядки аккумуляторов. HP охотнее брал больше мощности от аккумулятора.
Кроме того, у AMD и Intel есть датчики, оценивающие потребление питания чипом, и эти показатели согласуются с тем, что мы видим выше. При работе в 1080P Ryzen 7840HS сообщал о среднем энергопотреблении в 31,5 Вт, а Core Ultra 7 155H передавал более низкие показатели — 23,8 Вт. Для сбора информации мы использовали HWInfo, так как это простая и публично доступная утилита для краудсорсинга тестовых данных.
Трассировка лучей?
В Qualcomm’s Snapdragon 8 Gen 2 появилась трассировка лучей с аппаратным ускорением, и Adreno X1 унаследовал эту функцию. К сожалению, Adreno X1 не поддерживает DirectX 12 Ultimate, поэтому большинство игр для PC с поддержкой трассировки лучей не смогут использовать её на Adreno X1. Трассировка лучей поддерживается только через Vulkan API, и мы можем протестировать её при помощи теста 3DMark Solar Bay.
3DMark Solar Bay демонстрирует полученные трассировкой лучей отражения в небольшой сцене, все остальные эффекты довольно просты. Adreno X1 обеспечивает приличную производительность, но его обгоняют AMD Phoenix и Intel Meteor Lake.
Указанные бенчмарком частоты кадров достаточно хороши у всех трёх чипов. Intel обеспечивает наилучшую производительность трассировки лучей. Но моё мнение остаётся неизменным. На практике трассировка лучей существенно снижает производительность. Мобильные iGPU с доступной ультрабукам мощностью не имеют достаточной производительности для обеспечения красивой картинки даже без трассировки лучей, и точно не имеют достаточных свободных ресурсов для обеспечения эффектов трассировки. Пусть Qualcomm немного отстаёт в этом от конкурентов, но это не имеет никакого значения, потому что эффекты рейтрейсинга далеки от доступности для всех трёх GPU.
Драйверы и ПО
Сам по себе Adreno X1 достаточно мощен, чтобы обеспечивать играбельную производительность в некоторых AAA-играх. Но мощь GPU стоит немногого, если игра работает некорректно. Хотя стоит отдать должное Qualcomm за то, что игры с DirectX 12 наподобие Cyberpunk 2077 работают, так повезло не всем играм.
Одним из таких примеров стала Civilization 5. Это старая игра, использующая DirectX 11 API. На Adreno X1 в ней возникают артефакты рендеринга. Некоторые игры даже не запускаются, что отмечено Digital Foundry. Примечательно, что у Intel тоже были проблемы с драйверами, когда компания выпустила свои Arc A770 и A750. У Intel есть годы опыта по запуску игр для PC на интегрированных графических чипах, даже если этим iGPU не хватает мощности для обеспечения производительности при высоких настройках. С Qualcomm ситуация сложнее, ведь подобного опыта у неё нет.
Требует доработки и процесс выпуска драйверов Qualcomm. Драйверы выкладываются на GitHub, и под разные устройства создаются свои пакеты драйверов. У драйверов нет автоматических установщиков, поэтому пользователи вынуждены распаковывать файлы CAB и устанавливать драйверы вручную. Даже в эпоху Windows 95 производители оборудования выпускали файлы установщиков драйверов, самостоятельно выполнявшие весь процесс. Мы занялись этим процессом, чтобы установить драйвер от 10 июня, но после обновления Cyberpunk 2077, Civilization 5, Disco Elysium и Bad Rats отказались запускаться. Поэтому все тесты выполнялись на драйвере от 17 мая 2024 года.
AMD, Intel и Nvidia создают единые пакеты драйверов: общий скачиваемый файл драйверов можно использовать для множества поколений GPU на широком спектре устройств. Пользователи могут запускать автоматический установщик, который устанавливает новый драйвер за считанные минуты. Это резко контрастирует с ручным неудобным процессом, предлагаемым Qualcomm. Ситуация усугубляется тем, что пользователю GPU AMD, Intel или Nvidia не приходится особо часто обновлять драйверы. Большинство игр нормально работает с устаревшими драйверами AMD, Intel или Nvidia. Пользователю Adreno X1, вероятно, придётся часто проверять наличие обновлений, ведь пока драйверы Qualcomm очень сырые.
К чести Qualcomm стоит отметить, что публикация драйверов в каком бы то ни было виде — это существенный плюс по сравнению с экосистемой Android, где пользователи вынуждены в вопросе обновления драйверов полагаться на производителей. Надеемся, Qualcomm быстро усовершенствует и сами драйверы, и процесс их установки. Пока же ситуация с драйверами, наверно, будет расстраивать пользователей Adreno X1, плохо владеющих техникой.
В заключение
Qualcomm, AMD и Intel подошли к вопросу реализации iGPU на ноутбуках с разных сторон. У AMD есть огромный опыт в разработке мощных дискретных GPU, и её мобильные чипы представляют собой урезанные версии архитектуры, реализованной в дискретных картах. Qualcomm пришла из сферы изготовления чипов для мобильных телефонов, где ограничения мощности и пропускной способности памяти приводили к другим архитектурным решениям. У Intel много опыта в работе на рынке PC, но большую часть времени компания занималась GPU с низкой производительностью.
В конкуренции с iGPU AMD Phoenix и Intel Meteor Lake у Adreno X1 есть приемлемая производительность в простых математических операциях с 32-битными и 16-битными числами с плавающей запятой. Благодаря очень быстрому контроллеру LPDDR5X пропускная способность DRAM у Snapdragon X Elite выше, чем у конкурентов. Qualcomm также заслуживает похвалы за гибкое использование блока GMEM в качестве локальной памяти, кэша рендеринга и буфера тайлового рендеринга в зависимости от ситуации.
Однако пропускная способность кэша Adreno X1 низка, а задержки посредственны. Учитывая очень широкие размеры волн Adreno, размеры его регистровых файлов недостаточны. Гибкость GMEM — это замечательно, но Adreno всё ещё похож на GPU, оптимизированный под эпоху DirectX 11, в которой доминировала работа пиксельных шейдеров. В сфере compute производительность с 64-битными целыми числами низка, а поддержка FP64 отсутствует. Драйверы и поддерживающее ПО пока представлены в сыром виде.
Надеюсь, Qualcomm в ближайшие годы и месяцы существенно улучшит ситуацию с Adreno. В краткосрочной перспективе очень важно совершенствовать ПО. В более долгосрочной Adreno нужно будет эволюционировать, чтобы быть наравне с продуктами Intel и AMD. AMD Phoenix и Intel Meteor Lake уже и так представляют из себя сильных конкурентов, но обе компании будут продолжать непрерывно совершенствовать свои GPU, чтобы сражаться за долю рынка мобильного PC-гейминга. Если Qualcomm справится, то все мы выиграем от усилившейся конкуренции в сфере ноутбучных iGPU.