Что такое Apple Metal API
Еще несколько лет назад Apple представила новое графическое API — Metal. Отличие его от того же Scene Kit было в том, что он явялется не высокоуровневым API, работающим поверх OpenGL ES (мобильной версии OpenGL), а низкоуровневым API для рендеринга и вычислений, который может заменить собой OpenGL. По словам Apple, Metal на порядок быстрее OpenGL ES (правда, на деле в 10 раз быстрее происходят только вызовы отрисовки — draw calls, передача данных на GPU). Этот API доступен для всех устройств, работающих на процессоре A7 и новее, а так же на Mac начиная с 2012 года.
Принципы работы графических API
Для начала — что такое API? Расшифровывается это как Application Programming Interface, программный интерфейс приложения. Говоря простым языком — это готовый код, который позволяет существенно облегчить жизнь программисту при написании программ. По сути это некоторый полуфабрикат — основываясь на этом коде можно гораздо быстрее и проще написать свою программу.
Теперь разберемся с тем, как собственно сам GPU работает с API. Неверно думать, что вызов API напрямую работает с GPU, и тем более неверным является то, что GPU заканчивает обработку вызова при возвращении результата API. К примеру, если бы драйвер выполнял команды рендеринга в тот момент, когда они были созданы, то простаивал бы CPU, ожидая выполнения рендеринга. А после выполнения было бы наоборот — простаивал бы GPU, ожидая пока придут новые команды от драйвера.
По этой причине CPU и GPU работают асинхронно: графический драйвер сначала собирает все вызовы отрисовки для всего кадра, и только потом отправляет их на GPU. Далее, когда приходит команда на отрисовку следующего кадра, этот кадр уже будет обработан GPU. То есть мы получаем задержку в один кадр: пока CPU готовит вызов для текущего кадра, на GPU рендерится прошлый. На деле можно буферизировать и больше одного кадра, и тем самым получать большую частоту кадров: все зависит только от производительности процессора и видеокарты.
Нововведения в API Metal
В чем же плох метод, описанный выше? Он плох в том, что между GPU и API есть посредник — драйвер. И именно он управляет задержками. В API Metal же буферы команд открыты, и приложение может само их заполнять и отправлять их в очередь команд для выполнения на GPU. Таким образом, приложение имеет полный контроль над заданием и может управлять задержками. Более того — теперь можно легко параллелить команды и помещать их в буфер в определенном порядке, так как для программиста становится более очевидным то, какие результаты в каком порядке будут доступны.
Еще одно важное нововведение уже аппаратное: на процессорах Apple A7 и выше Metal заточен под работу с общей памятью, то есть CPU и GPU могут получать доступ к одним данным без необходимости перебрасывать их по шине PCI. Metal дает прямой доступ для программы к буферам CPU, и программист вполне может «смешивать» вычисления на GPU и CPU, что может существенно ускорить программу.
Реальный выигрыш от API Metal
Как я объяснял выше, каждый вызов отрисовки занимает некоторое время на CPU и GPU. Ренденринг на GPU сделать быстрее нельзя по очевидным причинам (он завязан только на производительность самого GPU), но можно выиграть в другом: во-первых, можно уменьшить время на передачу данных (так как Metal работает с общей памятью), во-вторых — уменьшить время обработки вызова на CPU. Время обработки вызова на CPU уменьшается за счет отсутствия посредника-драйвера и за счет параллельного построения буфера команд.
И тут возникает вопрос — а про какое десятикратное увеличение производительности вела речь Apple? Да вот именно про то, что время вызова на CPU теперь сильно меньше. Но вот GPU тут почти не затрагивается, так что в итоге напрямую улучшить графику за счет API Metal увы — нельзя. Но так как освободился процессор — его можно загрузить физикой: обсчетом физики частиц, взаимодействия множества объектов (все помнят сотню летающих обезьян на презентации iPhone 7?), обсчетом эффектов ткани и воды, и так далее. И так как этим раньше занимался GPU, то мы его освобождаем, и получается что косвенно он теперь может выводить лучшую картинку, что мы в играх (в том же Asphalt 8) и видим (обратите внимание на детализацию брусчатки и эффекты):
Взаимодействие OpenGL и Metal
Как видно из вышенаписанного — реально Metal улучшает жизнь процессору. Поэтому если система не поддерживает Metal, но имеет очень мощный процессор, то особого труда переписать игру под OpenGL нет — и именно это мы и видим в Vainglory под Android — для получения максимальной графики (уровень Apple A9) на OpenGL требуется топовый процессор уровня Snapdragon 820, который по голой производительности (во FLOPS-ах) мощнее A9 в два с копейками раза.
Apple Metal 2
На июньской презентации Apple представила новую версию Metal. Основные улучшения — это поддержка VR, машинного обучения и внешних GPU, что в теории позволит портировать под Mac игры с PC без всякого ухудшения графики (на данный момент порты большинства игр представляют собой по сути запуск Wine, что достаточно сильно снижает производительность и очень сильно отражается на и без того достаточно слабых GPU в Mac). Но как это будет реальности — увидим уже только в будущем.
Источник
Проверяем Mac на предмет поддержки Metal
Выпуск OS X El Capitan — событие знаковое по целом ряду причин. Новая версия не только получила отличные оценки в App Store благодаря стабильности и скорости работы — ваш покорный слуга удостоверился в этом на устройстве семилетней давности — но и принесла с собой интересные функции, среди которых поддержка известного по iOS 8 интерфейса Metal. Несмотря на умеренные требования ОС к аппаратному обеспечению, новый API доступен не для всех моделей Mac, и проверить его работоспособность проще простого.
По заявлению Apple, новая функция, призванная значительно ускорить графическую составляющую приложений, будет работать со всеми Mac, начиная с выпущенных в 2012 году. Однако своеобразная путаница всё же возникала: поддерживались не все конфигурации, а некоторые пользователи сообщали о работе Metal и на более старых устройствах, например Mac Pro, оснащённых видеокартами Radeon 7-й серии от AMD. Чтобы внести ясность в этот вопрос, разработчики из Fabulous Panda написали специальную утилиту, отображающую статус поддержки Metal компьютером.
Сама программа написана на Java и работает предельно просто: при наличии соответствующего оборудования она выдаст, например, такой результат.
Название: Metaltest for Mac
Издатель/разработчик: Fabulous Panda
Цена: Бесплатно
Встроенные покупки: Нет
Совместимость: OS X 10.11
Ссылка: Установить
По материалам Macnotes.de
Новости, статьи и анонсы публикаций
Свободное общение и обсуждение материалов
Лонгриды для вас
Установка macOS на iPad Pro не имеет смысла, несмотря на компьютерное железо. Это не только невыгодно с точки зрения ведения бизнеса, но и бессмысленно с точки зрения удобства
Федеральная антимонопольная служба обязала Apple переписать правила App Store и разрешить разработчикам принимать оплату за подписки и встроенные покупки за пределами магазина приложений. Ожидается, что это может привести к снижению их стоимости
Если раньше на 3D-принтерах печатали мелкие пластиковые детальки, то сейчас целые механизмы, дома, автомобили и даже органы! А как бы выглядел 3D-принтер, сделанный в Apple? Мы нашли сразу два таких.
Источник
Металл (API) — Metal (API)
Металл является низким уровнем, с низким уровнем накладных расходов аппаратное ускорение 3D — графики и Compute Shader API , созданный Apple , . Он дебютировал в iOS 8 . Metal объединяет в одном API функции, аналогичные OpenGL и OpenCL . Он предназначен для повышения производительности, предлагая низкоуровневый доступ к оборудованию графического процессора для приложений на iOS , iPadOS , macOS и tvOS . Его можно сравнить с низкоуровневыми API на других платформах, таких как Vulkan и DirectX 12 .
Metal — это объектно-ориентированный API, который можно вызывать с помощью языков программирования Swift или Objective-C . Полноценное исполнение на графическом процессоре контролируется с помощью Metal Shading Language. Согласно рекламным материалам Apple: «MSL [Metal Shading Language] — это единый унифицированный язык, который обеспечивает более тесную интеграцию между графическими и вычислительными программами. Поскольку MSL основан на C ++, вы найдете его знакомым и простым в использовании».
СОДЕРЖАНИЕ
Функции
Metal стремится обеспечить доступ к графическому процессору с низкими издержками. Команды заранее кодируются, а затем отправляются в графический процессор для асинхронного выполнения. Приложение контролирует, когда ждать завершения выполнения, что позволяет разработчикам приложений увеличивать пропускную способность, кодируя другие команды, пока команды выполняются на графическом процессоре, или экономить энергию, явно ожидая завершения выполнения графическим процессором. Кроме того, кодирование команд не зависит от ЦП, поэтому приложения могут кодировать команды для каждого потока ЦП независимо. Наконец, состояния рендеринга предварительно вычисляются заранее, что позволяет драйверу графического процессора заранее знать, как настроить и оптимизировать конвейер рендеринга перед выполнением команды.
Metal улучшает возможности программирования GPGPU за счет использования вычислительных шейдеров . Metal использует специальный язык шейдинга на основе C ++ 14 , реализованный с помощью Clang и LLVM .
Metal предлагает разработчикам приложений гибкость при создании ресурсов Metal (буферов, текстур). Ресурсы могут быть выделены на центральном процессоре, графическом процессоре или на обоих, и предоставляют средства для обновления и синхронизации выделенных ресурсов. Metal также может обеспечивать соблюдение состояния ресурса в течение срока службы кодировщика команд.
В macOS Metal может предоставить разработчикам приложений право по своему усмотрению указывать, какой графический процессор следует выполнять. Разработчики приложений могут выбирать между маломощным встроенным графическим процессором центрального процессора, дискретным графическим процессором (на некоторых MacBook и Mac) или внешним графическим процессором, подключенным через Thunderbolt. Разработчики приложений также имеют предпочтение относительно того, как команды графического процессора выполняются на каких графических процессорах, и предлагают рекомендации, на каком графическом процессоре определенная команда наиболее эффективна для выполнения (команды для рендеринга сцены могут выполняться дискретным графическим процессором, а постобработка и отображение могут обрабатывается встроенным графическим процессором).
Шейдеры Metal Performance
Metal Performance Shaders — это высокооптимизированная библиотека графических функций, которая может помочь разработчикам приложений достичь высокой производительности при одновременном сокращении работы по поддержке функций, специфичных для семейства графических процессоров. Он предоставляет такие функции, как:
- Алгоритмы фильтрации изображений
- Обработка нейронной сети
- Расширенные математические операции
- трассировка лучей
История
Metal доступен со 2 июня 2014 года на устройствах iOS под управлением Apple A7 или новее, а с 8 июня 2015 года — на компьютерах Mac (модели 2012 года или новее) под управлением OS X El Capitan .
5 июня 2017 года на WWDC Apple анонсировала вторую версию Metal, которая будет поддерживаться macOS High Sierra , iOS 11 и tvOS 11 . Metal 2 не является отдельным API от Metal и поддерживается тем же оборудованием. Metal 2 обеспечивает более эффективное профилирование и отладку в Xcode , ускоренное машинное обучение , снижение нагрузки на ЦП , поддержку виртуальной реальности в macOS и , в частности, особенности графического процессора Apple A11 .
На WWDC 2020 Apple объявила о переходе с Mac на микросхему Apple . Компьютеры Mac, использующие микросхему Apple, будут оснащены графическими процессорами Apple с набором функций, объединяющим то, что ранее было доступно в macOS и iOS, и смогут использовать преимущества функций, адаптированных к архитектуре отложенного рендеринга на основе плитки (TBDR) графических процессоров Apple.
Поддерживаемые графические процессоры
В iOS, tvOS и macOS Metal поддерживает разработанные Apple SoC от Apple A7 или новее. В macOS Metal также поддерживает Intel HD и Iris Graphics серии HD 4000 или новее, графические процессоры AMD GCN и AMD RDNA . Графические процессоры NVIDIA поддерживаются, но драйверы Metal для новых устройств (серии 10 и новее) недоступны, начиная с macOS Mojave.
Принятие
По данным Apple, более 148 000 приложений используют Metal напрямую, а 1,7 миллиона используют его через высокоуровневые фреймворки по состоянию на июнь 2017 года. Игры для macOS, использующие Metal для рендеринга , перечислены ниже.
Источник