как узнать adreno mali
Определение типа графического ускорителя на Android
Иногда пользователи устройств на базе Android, сталкиваются с необходимостью определения типа GPU (видеочипа). Часто это бывает при скачивании игр в виде файлов APK и кэша. Для некоторых игр эти файлы идут с различными пометками: Adreno, Mali, PowerVR, Tegra.
Так сложилось, что производители смартфонов и планшетов используют разные видеопроцессоры. Чтобы использовать специфические возможности этих процессоров, некоторые разработчики игр делают оптимизацию своих проектов под каждый из типов GPU отдельно.
При установке игры из Google Play, сервис автоматически определяет тип видеопроцессора и инсталлирует на устройство нужные файлы. Если же вам нужно скачать и установить файлы игры вручную, необходимо знать какие файлы нужно скачивать.
Как определить тип GPU
Если у вас сохранилась инструкция к девайсу, необходимую информацию можно найти там. Также вы можете найти сведения о типе видеопроцессора вашего устройства в Интернете. Но самым простым способом будет установка специального приложения, которое быстро и точно ответит вам на интересующий вопрос. Таких приложений есть несколько. Ниже рассмотрены две из них, но вы можете найти и другие.
CPU-Z
CPU-Z — мощная программа для предоставления пользователю огромного количества данных о технических характеристиках и параметрах его мобильного устройства — процессоре, оперативной и постоянной памяти, экране, батареи, датчиках, операционной системе и т. д.
Интересующие нас данные можно найти в первой вкладке приложения, возле пункта GPU Renderer.
Установить приложение CPU-Z можно в Google Play, а скачать его APK-файл для ручной инсталляции — на сайте бесплатных программ Biblprog.
Если вы не знаете как установить APK-файл воспользуйтесь этой инструкцией.
AnTuTu Benchmark
Одно из наиболее популярных программ для просмотра технических характеристик телефонов и планшетов на базе Android — AnTuTu Benchmark. Помимо полезной информации, программа предоставляет мощные инструменты для мониторинга и тестирования устройств, которые также могут заинтересовать многих продвинутых пользователей.
Установите AnTuTu и откройте приложение. На главном его экране, нажмите пункт «Мое устройство». Нужная нам информация будет возле пункта «Модуль отрисовки».
Внимание: в данное время, вследствие конфликта между Google и компанией-разработчиком приложения, программа удалена из Google Play. Скачать ее можно здесь. При установке возможно предупреждения о «вредоносности» файла. Игнорируйте его.
Надеемся, теперь вы легко сможете определить тип движка вашего модуля отрисовки — Adreno, Mali, PowerVR или Tegra. Если что-то осталось непонятным — не стесняйтесь и задавайте вопросы в комментариях. Постараемся помочь.
Как узнать какой у вас видеоускоритель
Многие пользователи сталкивались с случаем, когда к одной игре не один апк файл и кэш, а четыре с различными пометками: Adreno, Mali, PowerVr, и Tegra. Вот как выглядит этот блок на нашем сайте:
Дело в том, что различные производители смартфонов или планшетов используют разные процессоры. В них встроен видео процессор, который мы и научимся различать. Разработчики игр в основном делают оптимизацию игры в общем файле апк и кэша для всех видеоускорителей. Но по каким-то причинам некоторые игры имеют спецификацию к разным ускорителям. Возможно это для лучшей оптимизации, а возможно и для экономии памяти устройств.
Для определения вашего видеоускорителя можно пойти тремя путями: Посмотреть в инструкцию к вашему устройству, штудировать специальные сервисы или официальные сайты, и использовать сторонние программы. Далее мы рассмотрим все эти способы подробнее.
1. Если вы приобрели ваш аппарат в магазине, то с большей вероятностью в комплекте к нему будет инструкция по использованию. Загляните туда и поищите пункт технических характеристик. Ищите пункт с описанием процессора и видеоускорителя. Также эти параметры могут быть обозначены CPU и GPU.
2. Во втором пункте мы обратимся к интернет источникам. Для начала рекомендую обратить внимание на каталог от 4PDA на странице 4pda.ru/devdb. Выберите тип вашего устройства, производителя, а также модель. Внизу технических характеристик ищите соответствующий пункт.
Если вдруг вашего устройства там нет, можете обратится к официальным источникам. Зайдите на сайт производителя смартфона или планшета и поищите его в каталоге продукций. Там также есть технические характеристики и модель вашего видеоускорителя.
В конце концов можете просто вбить в поисковую систему Гугл или Яндекс производителя и модель устройства. Таким образом вы получите информацию из неофициальных источников.
3. Теперь обратимся к сторонним приложениям, который вы можете скачать с Плей Маркет. Их там большое количество, но мы рассмотрим самые популярные:
Данное приложение – самое популярное для проверки производительности андроид устройств. Но если перейти в вкладку «Инфа», то там вы найдете графу «Графический процессор». Это и есть ваш видеоускоритель!
Данное приложение показывает самую подробную информацию о вашем устройстве, начиная с технических характеристик, а также наличием датчиков, операционной системы, и батареи. Но немного поискав графу GPU Renderer, вы увидите модель вашего графического видеоускорителя.
Ну вот и все) Надеюсь у вас все получилось! Если статья вам помогла, поделитесь с ней в социальных сетях.
Android Шаг за Шагом: Видеоускорители и все что с ними связано
Многие из вас качали кэш к играм, или смотрели характеристики какого-либо устройства. Каждый видел, что были какие-то непонятные слова вроде Tegra, Adreno, Mali, PowerVR. Давайте узнаем, что же это такое.
Содержание
Все выше перечисленное — видеоускорители. Видеоускоритель — это одна из главный частей в SoC (System on the Chip), сокращенно GPU. GPU, или Graphic Processing Unit — это такой чип, интегрированный в CPU, и он отвечает за 2D и 3D графику. И их производительность измеряется в Flops. CPU, или Central Processing Unit, одним словом процессор.
Рассмотрим виды самых популярных GPU. Их 4 вида:
Также есть менее популярные GPU, но рассмотрим их в следующий раз.
Tegra (GeForce ULP)
Само вообще появление такого SoC как Tegra началось в 2007 года, из-за приобретения компанией NVIDIA компанию PortalPlayer. В то время процессор не пользовался популярностью, так как мощь была не конкурентоспособной, и сама Tegra использовалась в плеерах, смартфонах под Windows Mobile и Windows CE.
Все изменилось после ставки NVIDIA на новую операционную систему от Google — Android. Так в 2010 появился двухъядерный Tegra 2 для планшетов, а в 2011 для смартфонов. Потом появился Tegra 3 и дальше Tegra 4, 4i, К1 и Х1.
Сама эволюция в плане графических возможностей началась с Tegra 2. В GPU процессора от NVIDIA было 8 графических ядер, полная поддержка Direct3D Mobile и OpenGL ES 2.0 и производительность в 6.7 GFLOPS при 400 мГц.
А в GPU Tegra 3 уже 12 графических ядер, 12.4 GFLOPS при частоте 520 мГц.
Уже в 2012 были в играх эксклюзивы для Tegra, к примеру, улучшенная графика, спецэффекты и прорисовка, а также, оптимизация. Довольно мало людей жаловались на нехватку производительности.
Я уже молчу о Tegra 4 и 4i c 72/60 графическими ядрами с поддержкой OpenGL ES 3.0 и 96.8 GFLOPS с 72 ядрами при частоте 672 мГц, и 74.8 GFLOPS с 60 ядрами при 660 мГц.
Речь не идет о К1 с 192 графическими ядрами, поддержкой Direct X 12, OpenGL ES 3.1 и производительностью в 360 GFLOPS при частоте 850 мГц.
Не будем говорить о Х1 с производительностью в 1 TFLOPS, с 256 графическими ядрами при частоте 1 Ггц. Сразу можно сказать, что мобильный рынок развивается.
Но куда такая мощь без должной оптимизации? Именно сейчас NVIDIA занимается этим.
Она запускает разные экслюзивы, такие как Portal и Half-Life 2 и так далее. Эти все приложения находятся в специальном маркете для Tegra — Tegrazone.
В общем, если вы любите играть, то брать Tegra.
Adreno от Qualcomm (Snapdragon SoC)
Полноценное появление Adreno появилось после запуска линейки SoC Snapdragon компанией Qualcomm в 2009 году.
Первым мобильным устройством на Snapdragon был Toshiba TG01 с Adreno 130, а далее HTC HD2.
P.S Мощь чипсетов можно сравнить с игровыми приставками.
После развития Android и Windows Phone, само развитие Snapdragon пошло резко вверх. За 6 лет уже произведено 5 поколений SoC Snapdragon. S1, S2, S3, S4 и 200/400/600/800.
За эти пять поколений было запущено множество видов процессоров, что можно запутаться. Для этого можно посмотреть таблицу ниже, где я собрал популярные на данный момент виды GPU и их процессоры.
А вот список производительности Adreno в GFLOPS (Чем больше, тем лучше):
Чипсеты Snapdragon используются во многих устройствах, особенно в флагманах. Об оптимизации в играх можно и не волноваться из-за популярности GPU, а последние версии поддерживают OpenGL ES 3.1 и Direct X 11.
Mali от ARM
Mali — это GPU от ARM. Делится на 4 поколений: Utgard, Midgard 1/2/3.
Первый GPU был Mali-55 с поддержкой OpenGL ES 1.1 и с одним графическим ядром, который признан самым маленьким графическим чипом, появился впервые в LG Renoir, где Mali-55 используется только для оптимизации работы интерфейса.
Второй опыт в создании GPU был Mali-200. Тогда он уже поддерживал OpenGL ES 2.0 с 1 графическим ядром при частоте 275 мГц.
Третий опыт был на Mali-300. Он мог воспроизводить графику уровня PlayStation Portable, частота GPU была 395 мГц.
Четвертый опыт в создании GPU был революционным — Mali-400 — продолжение Mali-300, но с поддержкой многоядерности до 4 графических ядер, в следствии чего производительность увеличивается до 4-ех раз. Частота в 395-533 мГц, производительность в 2.5 до 19 GFLOPS. Популярен среди смартфонов и планшетов 2013.
Также есть Mali-450. Это тот же самый 400, но производительность увеличена в два раза. Может иметь до 8 графических ядер, частоту от 375 до 700 мГц и производительность в 30-60 GFLOPS.
Mali-Т760 — самый мощный GPU среди Mali, с поддержкой до 16 графических ядер, частота 685 мГц и 376 GFLOPS! Поддерживает OpenGL ES 3.1, OpenCL1.2, OpenVG 1.1 и Direct X 11.1.
Самые популярные GPU Mali вы можете рассмотреть в данной таблице:
Более 35-40% устройств работают с Mali. Поэтому можете не ждать таковых фризов и лагов в играх.
Обычно Mali можно встретить в чипсетах Exynos, MediaTek, AllWinner, Rockchip.
Power VR от Imagination Technologies
GPU созданная от Imagination Technologies, еще в далеких 90-ых. Была даже в то время на равне с AMD и NVIDIA, но из-за быстрых развитий других компаний, отстала от них. После чего они перешли на мобильную и бытовую технику.
Пропустим все прелюдии и начнем сразу с GPU:
Видов GPU так много, что я просто покажу вам список по производительности GFLOPS (Чем больше, тем мощнее):
Сами графические чипы можно встретить в процессорах от Apple, MTK, AllWinner, Intel, Samsung.
Мы рассмотрели 4 вида популярных графических видеоускорителей от 4 разных производителей. У каждого свои минусы, у каждого свои плюсы. Также вы узнали что такое GPU, CPU, и по немногу историю каждого видеоускорителя.
Надеюсь, вам чем-то поможет данная статья, и удачи в ваших приключениях!
P.S Спасибо моему другу Timblaer за оформленные таблицы и спасибо за идею про видеоускорители пользователю Artyoms.
Adreno или Mali: Какой графический процессор лучше?
Какой видеопроцессор лучше Adreno или Mali?
В большинстве смартфонов используется процессорная архитектура ARM. Её создала одноимённая компания, и она же её поддерживает. В процессе создания основной массы чипсетов, которые применяются в мобильных устройствах, используются её разработки.
Однако подход может разниться. Некоторыми компаниями осуществляется лицензирование готовых решений, тогда как другие практикуют создание своих, используя разработки компании в качестве основы. По этой причине на рынке наблюдается наличие противостояние между базовыми и кастомными архитектурами графических, а также центральных процессоров.
Что лучше Qualcomm или ARM?
К базовым решениям, которые созданы ARM, относятся процессорные ядра и графические Mali. Они используются такими, например, чипмейкерами как: Spreadtrum, Nvidia, Samsung, MediaTek.
Тогда как у компании Qualcomm другой подход. Для топовых чипсетов ею практикуется использование костомных ядер Kryo, а для оснащения чипов Snapdragon используется графика Adreno. Разработана она специалистами компании. Наличие различных архитектур провоцирует возникновение вопроса о том, кому следует отдать предпочтение — Qualcomm или ARM?
Дать однозначный ответ на означенный вопрос очень сложно. Так же как и принимать решение, чьим графическим чипам следует отдать пальму первенства. Надо сказать что тут имеет значение не только ситуация, но и конкретные поставленные задачи. И в зависимости от этого, чаша весов может склониться в одну или другую сторону. Данная статья предназначена оказать помощь тем, кто хочет полностью разобраться в этом вопросе.
Положительные и отрицательные стороны Adreno
Высокий показатель производительности. Теоретические расчёты говорят о более высоком максимальном быстродействии графики Adreno относительно Mali. Они справедливы, если используются в чипсетах одинакового класса. Так, для Snapdragon 625 показатель вычислительной мощности Adreno 506 равен порядка 130 ГФЛОПС (речь идёт о миллиардах вычислений за одну секунду с плавающей запятой). Его же конкурент MTK Helio P10, имеющий ГП Mali T860 Mp2 имеет показатель 47 ГФЛОПС.
Поддерживаются более совершенные API. У чипов Adreno последнего поколения имеется больший набор API (программные инструменты для разработки), к тому же версии их новее. Например, с момента выхода Adreno из пятисотой версии прошёл уже год. И им поддерживаются Open GL ES 3.2, DirectX12, OpenCL 2.0 и Vulkan. Тогда как Mali не поддерживается DirectX12, да и OpenCL доступны только для серии G 2016, которая появилась в относительно недавно.
Они меньше перегреваются. У графических процессоров Adreno не так высока склонность к перегреву, как у Mali. При этом надо сказать, что у Qualcomm имелись некоторые процессоры, которым было свойственно впадать в троттлинг. Но это были процессоры, отличавшиеся повышенной мощностью, соответственно и ядра центрального процессора обладали горячим нравом. Практически на одном уровне с конкурентами они работали, когда соблюдался режим сниженной производительности.
Довольно высокая стоимость. На разработку своей графики Qualcomm приходится затрачивать большее количество денег, если сравнивать с суммой, в которую обходится конкурентам лицензирование ARM Mali. По этой причине стоимость чипсетов от американского производителя выше чем, скажем у MTK.
Софт оптимизируется хуже. Порядка 25% от всех реализуемых в мире смартфонов производятся Samsung, а они пользуются графикой Mali. Компанией Huawei в моделях Kirin также практикуется внедрение стоковых ГП от ARM. И MediaTek предпочитают использовать ARM-графику, не пользуясь никакой другой. Результатом этого является большая доля Mali на мировом рынке. А потому разработчиками игр отдаётся предпочтение при оптимизации своей продукции Mali. Можно сказать, что имея меньшее количество GFLOPS, Mali в чипах, относящихся к среднему и бюджетному уровню незначительно хуже в играх, чем Adreno.
В рендеринге Fillrate меньше. Чипы Adreno обладают относительно слабым доменом текстурирования, на котором лежит ответственность за процесс формирования конечного изображения. Адрено 530 под силу отрендировать порядка шестисот миллионов треугольников, формирующих 3D-картинку, за одну секунду. А Mali G71 — 850 000 000.
Позитивные и негативные стороны Mali
И в этом случае начинаем с позитива:
Высокий показатель распространённости. В связи с, эталонностью графики Mali для чипсетов смартфонов, оптимизация игр под неё происходит лучше, чем под Adreno.
Невысокий ценовой порог. Стоимость лицензии на производство чипсетов с Mali обходится достаточно дёшево. Что позволяет даже незначительными компаниям, не имеющим возможности производить миллионные вложения, производить чипы с Мали. А это провоцирует подстегивание конкуренции и способствует стимуляции компании ARM подвигая её на разработку новых решений. К тому же пользователям графики Mali приходится в итоге тратить меньше денег.
Высокий уровень тактовых частот. Частоты, используемые в графических процессорах Mali равны 1 ГГц. А у конкурентов этот показатель не превышает 650 МГц. Более высокая частота на чипах Mali позволяет лучше проводить игры, которыми многопоточная обработка 3D поддерживается хуже.
Мощность домена рендеринга. Топовому ГП Mali G71 под силу произвести рендирование около восьмисот пятидесяти треугольников на протяжении одной секунды, что идентично двадцати семи миллиардам пикселей. И это притом что Adreno 530 в состоянии обработать только 8 миллиардов. А значит, его лучше использовать в процессе работы с графикой HD-текстур, имеющих высокое разрешение.
Шейдерных ядер меньше. Графические процессоры Mali имеют меньшее количество шейдерных ядер, чем у продукции фирм-конкурентов. Mali хуже и в части максимальной производительности в ГФЛОПС. Кроме того, они хуже приспосабливаются к играм, которые способны к эффективному распараллеливанию нагрузок на ГП.
Конфигурации ограничены. Собственно отставание графических процессоров Mali от Adreno незначительно. Однако в реальной жизни производители предпочитают использование готовых решений не очень сложных, имеющих не очень большое количество вычислительных кластеров. Так, в Mali T720 предусмотрено содержание порядка восьми блоков, однако наибольшее распространение получил Mali T720 MP2, имеющий всего два кластера.
Предрасположенность к перегреву. Высокий уровень тактовых частот решения Mali более универсальны, однако, в качестве побочного эффекта, они обладают способностью перегреваться. Именно по этой причине не получается встроить в чипсет значительное число кластеров графики.
Adreno или Mali что лучше?
На основании всего вышеизложенного, можно сказать, что Adreno обладает более мощными вычислительными блоками, лучше поддерживает новые технологии и не создаёт проблем с перегревом. При этом на стороне Mali популярность, доступность, мощность домена рендеринга, а также тактовая частота. И, как следствие, первоочередная оптимизация софта под эти ГП.
Но надо сказать, что это только теоретические выкладки. Реальность же указывает на то, что для использования в моделях, относящихся к бюджетному и начально-среднему уровням, предпочтение отдаётся Mali. Тогда как прерогатива Adreno — модели твёрдого среднего класса и флагманские. И это вполне естественно, ведь современная действительность не позволяет рассматривать графику отдельно от чипсета.
Плюсы и минусы Adreno — Mali
Adreno или Mali: Какой графический процессор лучше
Оптимизация рендера под Mobile, часть 2. Основные семейства современных мобильных GPU
Приветствую, дорогие любители и профессионалы, программисты графики! Приступаем ко второй части нашего цикла статей про оптимизацию рендера под Mobile. В этой части мы будем рассматривать основные семейства GPU, представленные у игроков на Mobile.
Унифицированные или специализированные шейдерные ядра
В эпоху ранних мобильных видеокарт, до распространения комплексных эффектов, существовала точка зрения, что для фрагментных шейдеров достаточно поддержки вычислений на пониженной точности. Ведь в типичном режиме дисплея применяется 8, а то и меньше бит на каждый канал цвета. Такая точка зрения привела к использованию специализированных шейдерных ядер. Для вершин использовались ядра, оптимизированные для матричных преобразований на повышенной точности FP24/FP32(highp). Для пикселей — ядра, более эффективно работающие с пониженной точностью FP16 (mediump). При этом highp на них не поддерживался. На первый взгляд, такая специализация позволяет добится более рационального распределения транзисторов на чипе. Однако, на практике это приводит к трудностям при разработке комплексных эффектов, а также при использовании текстур большого разрешения. Кроме того, специализация ядер может приводить к vertex/fragment bottleneck. Таким термином называют ситуацию, когда из-за несимметричной нагрузки на вершинные и пиксельные ядра часть ядер «простаивала».
Поэтому в современных архитектурах применяются унифицированные ядра. Такие ядра могут брать на себя вершинные, пиксельные и другие вычислительные задачи в зависимости от нагрузки.
Векторный (SIMD) или скалярный набор инструкций
В духе описанного выше стремления экономить на транзисторах, специализируя ядра, происходил и дизайн набора шейдерных инструкций. Большинство типичных преобразований для трехмерной графики оперируют 4-х компонентными векторами. Поэтому ранние GPU работали именно с такими операндами. Если же в коде шейдера содержались разнородные скалярные операции, которые не удавалось упаковать в векторные операции оптимизатором, часть вычислительных мощностей не задействовалась. Это явление можно проиллюстрировать так:
Имеется шейдер, осуществляющий распространенную операцию Multiply Add: умножить 2 операнда, а затем добавить третий. При компиляции на условной векторной архитектуре (Vector ISA = Vector Instruction Set Architecture) мы получаем одну векторную инструкцию vMADD, выполняющуюся 1 такт. На условной скалярной архитектуре мы получаем 4 скалярные инструкции, которые благодаря усовершенствованному конвейеру также выполняются за 1 такт. Теперь рассмотрим усложненный шейдер, выполняющий 2 операции, но над 2-х компонентными операндами.
В случае векторной архитектуры получаем уже 2 инструкции, требующие 2 такта на выполнение. При этом над компонентами .zw действия не производятся, и вычислительные мощности простаивают. В случае скалярной архитектуры эти же операции можно упаковать в 4 скалярных sMADD, выполняющихся за тот же 1 такт. Таким образом на скалярной архитектуре за счет усовершенствования конвейера достигается большая плотность вычислений. Тем не менее, как будет показано ниже, векторная ISA по-прежнему актуальна. А значит, есть смысл применять техники векторизации шейдерного кода. Они позволяют добиться повышенной производительности на видеокартах с векторными ISA. В то же время, как правило, это не вредит быстродействию на более современных скалярных ISA.
Опираясь на приведенные характеристики, рассмотрим распространенные в наше время семейства мобильных GPU. Начнем с наиболее часто встречающегося семейства. Многие знают, что речь идет о видеокартах Mali от британской компании ARM. Непосредственно производством чипов ARM не занимается, предлагая вместо этого интеллектуальную собственность. Как и другие мобильные видеокарты, Mali является составной частью System on Chip(SoC), т.е. работает с общей для CPU и GPU памятью и шиной.
Mali Utgard
В 2008 году на свет появились первые представители архитектуры Mali Utgard, актуальной вплоть до сегодняшнего дня. Эти видеокарты именуются по схеме Mali-4xx MPn, где xx — номер модельного ряда, а n — количество фрагментных ядер. В Mali Utgard шейдерные ядра специализированные, и во всех моделях устанавливалось только 1 вершинное ядро.
Другие особенности архитектуры Mali Utgard:
Если имеется готовность отказаться от этой аудитории, достаточно установить требование поддержки OpenGL ES 3.0 в AndroidManifest.xml:
Кроме Mali Utgard, распространенных мобильных GPU без поддержки OpenGL ES 3.0 на данный момент нету.
Отдельного внимания заслуживает использование текстур большого разрешения на Mali Utgard. Десять бит мантиссы при точности mediump не хватает для качественного текстурирования с разрешением текстур более 1024 на одну из сторон. Однако, несмотря на поддержку только mediump точности вычислений во фрагментных ядрах Mali Utgard, можно получить fp24 точность текстурных координат при использовании varying напрямую.
В качестве бонуса на некоторых архитектурах такой подход позволяет осуществлять prefetch текстурного содержимого до выполнения fragment shader, что минимизирует stalls при ожидании результатов текстурных выборок.
Mali Midgard
На смену Mali Utgard пришла архитектура Mali Midgard. Существует несколько поколений этой архитектуры с названиями вида Mali-6xx, Mali-7xx и Mali-8xx. Несмотря на 8-летний возраст, Mali Midgard можно назвать современной архитектурой, обеспечивающей поддержку большинства новых фич:
Еще одной особенностью Mali Midgard является технология Forward Pixel Kill. Расчет каждого пикселя производится в отдельном потоке фрагментного ядра. Если во время выполнения потока становится известно, что результирующий пиксель будет перекрыт непрозрачным пикселем другого примитива, поток завершается преждевременно и освободившиеся ресурсы используются для других вычислений.
Mali Bifrost
Следующая за Midgard архитектура Bifrost выделяется переходом к скалярной ISA. По сравнению с предыдущей архитектурой увеличено максимальное количество ядер (с 16 до 32), а также поддерживается улучшенный интерфейс с CPU, позволяющий осуществлять когерентный доступ к общей памяти: изменения содержимого памяти CPU/GPU сразу становятся «видны» друг другу несмотря на кэши, что позволяет упростить синхронизацию.
Из неофициального
Предпринято немало попыток обратного инжиниринга видеокарт Mali с целью создания Open Source драйверов под Linux. Труды самоотверженных ребят, пытающихся это осуществить, позволяют взглянуть на недокументированные особенности видеокарт Mali. Так, в проекте PanFrost есть disassembler для Mali Midgard/Bifrost, при помощи которого можно познакомится с набором шейдерных инструкций (открытой официальной информации на эту тему нет).
Adreno
Вторым по распространенности семейством мобильных GPU является Adreno. Эта видеокарта устанавливается на SoC, известный под брендом Snapdragon, от американской компании Qualcomm. Snapdragon устанавливается в топовых смартфонах современности от Samsung, Sony и др.
Актуальными видеокартами Adreno являются семейства cерий 3xx — 6xx. Все эти серии объединяют следующие особенности:
Adreno Tile Based Rendering
На видеокарты Adreno установлена «традиционная» GPU память, называемая GMEM. Применяются объемы от 128kb до 1536kb. Это позволяет использовать больший размер тайлов по сравнению с архитектурами других разработчиков мобильных GPU. На Adreno размер тайлов динамический и зависит от используемого формата цвета, буфера глубины и трафарета. При работе в режиме Immediate Mode рендер происходит в системную память.Существует GL ES расширение, позволяющее указать предпочтительный режим: QCOM_binning_control. Однако, последние рекомендации от Qualcomm предлагают полностью полагаться на драйвера GPU, которые сами определяют наиболее предпочтительный режим для сформированного приложением командного буфера.
При работе в режиме TBR Adreno делает 2 вершинных прохода:
Freedreno
В отличие от ARM и Imagination Technologies, Qualcomm неохотно делится подробностями внутреннего устройства своих GPU. Однако, благодаря усилиям «обратного инженера» Роба Кларка, многое можно узнать из проекта Freedreno, open source драйвера Adreno для Linux.
Rob Clark, автор Freedreno
PowerVR от Imagination Technologies
Imagination Technologies — британская fabless компания, знаменитая разработкой GPU для продукции Apple. Эту роль компания выполняла вплоть до появления iPhone 8/X, в которых используются внутренние разработки Apple. Хотя по оставшимся без изменений рекомендациям по оптимизациям для этих чипов, а также по наличию патентных исков к Apple от Imagination можно предполагать, что Apple продолжила развивать архитектуру PowerVR — оригинальную разработку от Imagination. В начале 2020 года Apple вернулась к практике лицензирования у Imagination Technologies. Кроме устройств с iOS/iPadOS, видеокарты PowerVR устанавливаются в большое количество смартфонов и планшетов на базе Android.
Рассмотрим семейства видеокарт PowerVR, которые до сих пор можно встретить у пользователей.
PowerVR SGX
Первые видеокарты PowerVR SGX появились в далеком 2009-м году. Существует несколько поколений этой архитектуры: Series5, Series5XT и Series5XE. Apple использовала эти GPU вплоть до iPAD 4/iPhone 5/iPOD Touch 5. Можно привести такие особенности SGX:
Lowp точность
PowerVR SGX — единственные актуальные мобильные GPU с аппаратной поддержкой
lowp. Более новые модели PowerVR, а также все современные GPU других вендоров фактически используют точность mediump. Использование
lowp на PowerVR SXG позволяет добиться более высокой плотности вычислений (больше операций за такт). При этом операция swizzle (перестановка компонент вектора) для lowp, в отличие от других точностей, не является бесплатной. Эта особенность, а также узкий диапазон значений, который предоставляет lowp ([-2,2]) ограничивает сферу ее применения. При этом неудачно поставленный lowp, приводящий к артефактам на семействе SGX, не будет замечен на всех остальных видеокартах, где фактически будет использоваться точность mediump. По этой причине стоит рассмотреть отказ от использования lowp в шейдерах.
Зависимые текстурные выборки (dependent texture reads)
Как известно, операции сэмплирования текстур являются наиболее медленными из-за необходимости ожидания результатов чтения памяти. В случае мобильных SoС речь идет об общей системной памяти с CPU. Для уменьшения количества обращений к медленной памяти используются текстурные кеши. Чтобы не было простоя в начале растеризации с использованием текстуры, есть смысл закешировать используемые участки заранее. Если фрагментный шейдер использует текстурную координату, передаваемую из вершинного шейдера без изменений, то необходимый для кэширования участок текстуры можно определить до выполнения фрагментного шейдера. Если же фрагментный шейдер меняет текстурную координату либо вычисляет ее, используя данные из другой текстуры, то сделать это не всегда возможно. В результате выполнение фрагментного шейдера может замедлиться. Видеокарты PowerVR SGX особенно «болезненно» реагируют на такой сценарий. При этом даже использование перестановки компонент текстурной координаты (swizzle) приводит к dependent texture read. Приведем пример shader program без dependent texture read.
vertex program
fragment program
fragment program
PowerVR Rogue
Дальнейшее развитие видеокарты PowerVR получили в архитектуре Rogue.Существует несколько поколений этой архитектуры: от Series6 до Series9. У всех PowerVR Rogue есть такие особенности:
PowerVR TBDR
Как и во всех распространенных мобильных GPU, в PowerVR используется тайловый конвейер. Но в отличие от конкурентов, Imagination пошла дальше и реализовала отложенную растеризацию примитивов, позволяющую пропускать шейдинг невидимых пикселей независимо от порядка отрисовки. Такой подход получил название Tile Based Deferred Rendering,а процесс устранения невидимых пикселей — Hidden Surface Removal (HSR).
Hidden Surface Removal
Рекомендуется рисовать непрозрачную геометрию до прозрачной и не использовать Z Prepass, который в случае видеокарт PowerVR в большинстве сценариев приведет к лишней работе. Однако несколько подряд идущих прозрачных пикселей, перекрывающих друг друга, полностью шейдятся для получения корректного цвета с учетом смешивания. Последний же прозрачный пиксель может быть отброшен, если за ним следует непрозрачный пиксель.
Открытость Imagination Technologies
Создатели PowerVR предоставили в открытый доступ больше документации по сравнению с другими разработчиками GPU. Детально описана архитектура графического конвейера, а также набор инструкций для архитектуры Rogue. Существует удобный инструмент PVRShaderEditor, позволяющий на лету получать профилировочную информацию по шейдеру, а также его дизассемблерный листинг для Rogue.
Несмотря на ограниченное присутствие видеокарт PowerVR в среде устройств на базе Android, есть смысл изучать их архитектуры для грамотного программирования графики под iOS.
Immediate mode mobile GPUs
Мы рассмотрели наиболее распространенные семейства мобильных видеокарт. Во всех этих семействах применялась тайловая архитектура рендера. Однако существуют мобильные видеокарты, в которых используется и традиционный immediate mode подход. Приведем некоторые из них:
Распределение различных семейств мобильных GPU у наших игроков
Приведем статистику по мобильным GPU, собранную у наших игроков на конец 2019 года:
Ниже раскроем сегмент «Others»
Исходя из этих данных, посмотрим на распределение GPU с точки зрения их основных особенностей.
Векторные ALU (arithmetic logic unit) устаревают и заменяются скалярными. На сегодня основная масса мобильных GPU с векторным набором инструкций — это Mali Midgard, который можно считать средним по производительности. Т.к. векторизация, как правило, не замедляет выполнение на скалярных ALU, стоит рассматривать векторизацию как актуальный прием оптимизации шейдеров под mobile.
Специализированные шейдерные ядра устарели и заменяются унифицированными. Vertex Bottleneck на скелетном меше более не страшен. Специализированные ядра используются только на семействе Mali-4xx (Utgard). Напомним, что эти GPU поддерживают только OpenGL ES 2.0. У нашей аудитории их около 3.5%.
И наконец, подавляющее количество мобильных GPU используют тайловый подход. Immediate Mode стал маргинальным и быстро вытесняется вместе с видеокартами, его применяющими. Доля immediate mode GPUs у наших игроков составляет около 0.7%.