О разработке и особенностях новой версии эмулятора Switch — YUZU

0 0

Ввиду выхода новой версии эмулятора YUZU с поддержкой многоядерности, о которой уже была новость ранее, я решила затронуть вопрос недостатков и особенностей этой сборки эмулятора Switch. Для начало стоит написать о том, для чего вообще были сделаны столь глобальные изменения.

Модель построения эмулятора YUZU основывалась на модели Citra(эмулятор 3DS). Эта модель отлично подходила для одноядерной эмуляции — позволяя осуществлять эмуляцию с высокой точностью, простотой и отлично подходила для 3DS, поскольку 3DS использовала только одно из двух своих ядер для приложений / игр. Однако, в случае с yuzu, это не уже работало не так хорошо.

Switch представляет собой гораздо более сложную и современную систему, которая использует 4 ядра процессора, причем 3 используются для приложений / игр. Таким образом, использовать модель Citra для разработки yuzu было возможно, но у нее было несколько серьезных недостатков:

  • Код не соответствовал операционной системе Switch, и, несмотря на то, что он был в чем то похож, было трудно отслеживать изменения
  • Код был очень сложным и его было трудно поддерживать
  • Эту модель было чрезвычайно сложно приспособить к многопоточности

О разработке и особенностях новой версии эмулятора Switch - YUZU

Это все и стало причиной значительной переработке эмулятора Switch. Использование новой модели позволит добиться практически полного соответствия эмуляции исходному коду ОС Switch, а значит YUZU будет не отличим в своей работе от настоящего Switch. Также в yuzu была добавлена ​​поддержка многопоточности с использованием синхронизации хоста.

Внедрение этих глобальных изменений состояло из двух этапов: этап планирования и этап разработки. Фаза планирования была посвящена изучению будущей новой схемы эмулятора. Эта фаза длилась примерно 8 месяцев, и в основном это были обычные исследования и мозговой штурм.

На этом этапе команда столкнулась с множеством проблем и выбором пути развития. Разработчики стали изучать другие эмуляторы, которые уже могли осуществлять многоядерную эмуляцию, такие как Cemu, RPCS3 и Ryujinx. Первоначально YUZU использовался в лучшем случае 2 потока: один для процессора и один для графического ядра. Эти потоки также использовались для пользовательского интерфейса, ведения журнала, драйвера графического процессора и звукового драйвера.

Теперь же YUZU использует до 6 потоков: четыре для процессора, один для таймера и один для графического ядра. Стоит отметить, что четвертое процессорное ядро используется редко. Таким образом, из этих 6 потоков эффективно используются лишь 5, но не все будут работать постоянно.

О разработке и особенностях новой версии эмулятора Switch - YUZU

Непосредственно разработка началась 1 февраля 2020 года. Первое, что сделал Blinkhawk(главный разработчик), — внедрил Spinlocks, Fibers и синхронизацию хоста(расшифровка этих терминов займет много места, так что опустим это). После этого он продолжил переделку всего эмулятора в целом.

Первая проблема с которой столкнулся Blinkhawk, заключалась в том, что по какой-то причине yuzu постоянно создавал и уничтожал динамическую компиляцию. Это было исправлено путем кэширования JIT в зависимости от состояния таблицы страниц вместо того, чтобы каждый раз создавать новый JIT.

Вторая проблема возникла при загрузке первой простой игры на многоядерном компьютере, тогда разработчики обнаружили, что vsync сломан. После изучения этого глюка удалось определить его причину и устранить ее.

Еще одна интересная задача заключалась в реализации приостановки и возобновления используемых потоков. В текущих версиях YUZU можно приостанавливать и возобновлять эмуляцию по желанию пользователя. Раньше это было просто, потому что эмуляция происходила поэтапно, и вам просто нужно было остановиться на следующем шаге. Но многоядерная эмуляция является непрерывной и неуправляемой, во всяком случае по принципам, что использовались ранее.

Таким образом, реализовать "остановку" было очень сложно из-за особенностей многоядерности. После длительных раздумий разработчики нашли довольно простое решение без необходимости что-либо изменять. Разработчики создали поток для каждого ядра и сделали так, чтобы поток ядра передавал управление от и к CPU Manager для эмуляции.

О разработке и особенностях новой версии эмулятора Switch - YUZU

Так какая польза от столь масштабных изменений в итоге? Многие из вас рады приходу многоядерности, но нужно иметь ввиду и другие узкие места в эмуляции Switch. Не каждая игра эффективно использует многопоточность и хорошо загружает процессор Switch.

Некоторые игры, например Super Mario Odyssey, используют только 1 и 2 ядра, выполняя всю обработку в ядре 0, а значит многопоточность никак не повлияет на их работу. Тем не менее, такие игры, как Breath of The Wild и Animal Crossing(и др) несколько прибавили в производительности, но все еще упираются эмуляцию GPU.

И вот мы подошли к важной особенности — эмуляции графический процессора! Она зависит от четырех вещей:

  • Мощности процессора на ядро. Одно ядро ​​ЦП преобразует все команды GPU Switch в команды GPU вашей видеокарты. Таким образом, наличие процессора с отличной одноядерной производительностью является очень важным, ибо позволяет быстрее загружать вашу видеокарту.
  • Ваша скорость шины GPU. YUZU сильно зависит от пропускной способности шины GPU. Это скорость, с которой данные загружаются в и из вашего графического процессора, и это зависит от поколения PCIe и выделенных линий.
  • Ваши графические драйвера. Драйверы AMD для OpenGL ужасны, в то время как NVIDIA великолепны.
  • Мощность вашего GPU, будь то NVIDIA, AMD или Intel.

Наконец, помните, что скорость ОЗУ, объем ОЗУ и тип процессора в вашей системе также будут влиять на скорость эмуляции. Сейчас YUZU может использовать дополнительную память (от 100 Мб до 3 Гб в зависимости от игры).

Такими были новости о разработке последней версии YUZU, которая длилась более 10 месяцев! В настоящее время разработчики заняты тестированием стабильности и поиском новых багов в играх.

Источник: www.playground.ru
Оставить комментарий

Мы используем файлы cookie. Продолжив использование сайта, вы соглашаетесь с Политикой использования файлов cookie и Политикой конфиденциальности Принимаю

Privacy & Cookies Policy