[реклама вместо картинки]

A320 Русский Форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » A320 Русский Форум » Эмуляция » Теория оптимизации эмуляции (PSX)


Теория оптимизации эмуляции (PSX)

Сообщений 1 страница 4 из 4

1

Итак, давайте же разберемся что и как эмулируется, на примере PSX.

Железо PSX состоит из процессора R3000A(MIPS) работающего на частоте ~40Mhz, сопроцессора GTE(специальный сопроцессор для 3D-преобразований), GPU(собственно видео-сопроцессор), декодер mpeg и SPU(звуковой сопроцессор).

Можно начать с того, что в нашей динге всё эмулируется одним процессором, хотя бы поэтому нужно более мощное железо чем эмулируемое (ну это и коню понятно).

Ну, начнем пожалуй разбор полетов:
1. Допустим, откинем SPU и mpeg-декодер, т.к. можно жить и без них (производительность mpeg можно пережить)

2. Процессор - тут что-то сложно сказать, т.к. и так используется хорошая оптимизация, хотя по идее на динге можно попробовать сделать трансляцию кода на проц, т.к. и в динге и в PSX процессоры в принципе совместимы.

3. GTE - ну, это тоже уже оптимизировано до максимума, и сильно большой прибавки производительности здесь не добиться.

4. GPU - вот тут как раз из-за эмуляции этого элемента идут все тормоза.
Вся проблема в том, что вся отрисовка делается бедным процессором. А если разобраться в том, как устроен и работает GPU, станет ужасно жалко бедную дингу.
   Итак, GPU имеет 1 мегабайта видеопамяти. Видеопамять разделена на страницы. Самое веселье в том, что текстуры хранящиеся в видеопамяти могут быть в 24-битном виде, 16-битном виде, 8-ми и 4-х битном виде, при чем в 8-ми и 4-х битном режиме требуется наличие палитры, там же в видеопамяти. Т.е. для отрисовки таких текстур с палитрой, надо делать множество обращений к памяти, и так каждый кадр. Это отнимает драгоценное процессорное время. Также, для того чтобы отрисовать это всё на экран, необходимо ещё сконвертировать эран для вывода в нужный формат (тоже время).
   Поэтому есть теория, как улучшить производительность - использовать кеширование текстур. Т.к. во многих играх, типа final fantasy, на локациях используется один набор текстур, то при первом обращении к нужной странице памяти с указанной палитрой - создавать эту страницу в памяти и копировать туда уже подготовленный кусок в формате экрана, а при следующем обращении к этим данным - подменять и выдавать уже готовое. При изменении данных в этой странице памяти производить удаление таких кэшированных страниц. В теории это должно дать существенный прирост производительности, но на практике, естественно, много подводных камней и сложностей.

Возможно и возьмусь за оптимизацию в будущем, но испытываю гигантский дефицит времени.
Буду надеяться что найдется талантливый программер, который сможет допилить дополнительную возможность к GPU-плагину PSX4ALL.

+1

2

Я кстати пытался пустить текстуры через кеш - получил какойто баг связанный с RAM...
Так что за дело это больше не возьмусь...ещёбы портануть на нативку...

0

3

Это канечно не относится к теории, скорее к практике. Можно запустить эмулятор напрямую из консоли и тем самым иметь немного больше свободной оперативки в динге, к томуже есть удобное микроменю в дингуксе которое стартует перед оболочкой и даёт возможность запускать разные приложения(и не только) с помощью нажатия комбинаций кнопок, одним из которых может стать эмулятор, я как раз таким скриптом-микроменю и пользуюсь.

0

4

Dingux это же линукс если я правильно понял, для лучшей производительности и скорости работы увеличиают swap, тоесть нужно и в dingux это попробовать, а вобше я шитаю что нужно специально заставить процессор работать так: выделить определенный ресурс на эмуляцию самого процесссора и на эмуляцию виде процессора, примерно так( для эмуляции процессора 400mhz для видео 30mhz ну это так для примера, ну и файл подкачки соответственно)

0


Вы здесь » A320 Русский Форум » Эмуляция » Теория оптимизации эмуляции (PSX)


Рейтинг форумов | Создать форум бесплатно