Сообщения без ответов | Активные темы Текущее время: 28 мар 2024, 20:06



Ответить на тему  [ Сообщений: 9 ] 
 Разговор с Мартином про оптимизации 
Автор Сообщение
Сообщение 21 янв 2017, 12:23
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
Я оставлю это здесь для истории.
Ни один из разработчиков современных эмуляторов NES даже близко не подошел к подобным результатам.
Смотрите сами:

Eugene.S писал(а):
Hi, Marty.

Just want to tell thank you again
for great nestopia emulation core.

I did the test compare performance of modern cycle-accurate
emulators (written on C and C++) vs nestopia
on old intel-atom D525 1.50 GHz machine.

Results is amazing.

- puNES 0.100
- nintendulator 0.975b
- mesen 0.7.0
- bizHawk 1.11.9
- rockNES 5.41

All of them eats 100% of CPU core and cannot
run fullspeed on the old low-powered netbook CPU. It gives only 30-40 FPS without frameskipping.
(real performance of Atom D525 is about good Pentuim 3~1000MHz)

Nestopia result is only 40-45% CPU load, and it run at 60FPS fullspeed!
FCEUX with old inaccurate scanline-based PPU render + low sound quality have the same performance.

For now, nestopia-libretro core (in fact it's your core with minimal modifications by Rdanbrook)
work perfect on the Raspberry Pi 3.

I wonder how you did so _heavy_ optimization of your cycle accurate emulator!


MartinFreij писал(а):
Thanks Eugene. Nice to hear from you again, hope you are well.
Doing code optimizations without sacrifizing accuracy can be
real fun and I'm happy to see it payed off.

As for the various optimizations I did to Nestopia at the time,
I heavily used Intel Vtune and AMD CodeAnalyst profiler to
find hotspots in the code and also let the compiled IA-32 assembly
code guide me through it.

I also made heavy use of (or abused if you will) C++ template style
programming, or concept-oriented programming as I'd like to call it,
to let the compiler do as much work for me as possible and allowing
me to not needing to repeat myself in code.

Using the Intel C++ Compiler and Microsoft Visual Studio at the time, I
also fine-tuned many parts of the code through compiler directives to give
hints to the compiler on what to optimize for speed and what to optimize for
size.

As a programmer, having a knowledge of low level stuff such as branch-prediction, cache-lines
and other things helped a lot during development. Even if you're developing something in a high-level
language such as Java, C#, Python, I believe you can still influence performance a great deal in the way
you structure and arrange your code.

For reference and maybe not surprisingly, the most critical method for performance in the whole Nestopia code
base I remember was Ppu::renderPixel(). That one I remember optimizing to be ~20FPS faster just by re-arranging
some statements. That was surely a branch-condition killer, but by allowing the CPU to not stall and do other work in parallell made it almost free.

21.01.2017

_________________
Nestopia 1.37/1.40 Fixed


Сообщение 24 янв 2017, 09:47
Профиль WWW
Аватара пользователя

Зарегистрирован:
22 июл 2007, 22:03
Сообщения: 480
Занятно.

_________________
Challenge the Legend / Мой сайт - http://www.u-sm.ru
8700K, 16GB, RTX 3070 Ti


Сообщение 27 янв 2017, 14:08
Профиль WWW
Аватара пользователя

Зарегистрирован:
06 апр 2008, 13:46
Сообщения: 119
Как же всё же жаль, что он забросил разработку.


Сообщение 15 фев 2017, 12:03
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
Да, есть ещё небольшие недоработки, совсем по-мелочи.

1) Dendy-mode не предусмотрен для FDS, это феос более-менее поправил патчем (правда этот патч пока никуда не вошел).
2) Dendy-mode не предусмотрен для NSF-плеера. Добавляем его поддержку по аналогии с FDS - DPCM-канал портится.
3) Регион-селектор придурошный, для смены между некоторыми регионами требует переоткрытия РОМа. Лечим - всё крашится к чертям.

Казалось бы - ерунда и поправить раз плюнуть, ага щас.
На этот архисложный код все матерятся...

***
Благо, что сама реализация денди-режима на данный момент полностью вылечена от "болезней".
Это, можно сказать, чудо - если бы не FHorse, никто бы не смог одолеть NstPpu.cpp.
Даже разработчик Mesen за сердце хватается, когда смотрит в эти дебри кода.

_________________
Nestopia 1.37/1.40 Fixed


Сообщение 23 фев 2017, 11:33
Профиль WWW
Аватара пользователя

Зарегистрирован:
06 апр 2008, 13:46
Сообщения: 119
А зачем Dendy-mode для FDS? Не бывало же таких фамиклонов вроде как. Код сложный наверное потому что хорошо оптимизирован =)


Сообщение 23 фев 2017, 18:23
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
22 июл 2007, 11:16
Сообщения: 787
а пиратские фдс конверсии? в некоторых на муляторе можно даже родную музыку невырезанную услышать, если мулировать фдс звук.

_________________
1. Модератор всегда прав.
2. Если модератор не прав, см. п. 1.


Сообщение 19 мар 2017, 18:04
Профиль
Аватара пользователя

Зарегистрирован:
28 июл 2008, 19:27
Сообщения: 99
Откуда: Россия,Челябинск
Полагаю, что FDS-конверсии не имеют в себе звука FM-канала консоли. Взять ту же Bio Miracle Bokutte Upa на NES - та же игра, что и на FDS, а вот музыка переписана под NES. Правда, конверсия официальная, конамийская.

_________________
8-BIT MUSIC FAN


Сообщение 13 июн 2017, 19:31
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
Так как феос удалил клон репозитория Nestopia от Rdanbrook, выкладываю его наработки:

add-dendy-mode-to-fds-and-nsf.patch
Добавляет поддержку денди для FDS и NSF.
По неясной причине DPCM у NSF портится, хотя фиксы сделаны идентично.

update-when-favored-system-changes.patch
Неудачная попытка исправить кривой Region-selector.
Суть проблемы: в нестопии имеется всего 2 региона - NTSC и PAL
к каждому из которых присвоены свои системы:
у NTSC-региона это "NES NTSC" и "Famicom", а у PAL-региона это "NES PAL" и "Dendy".

Переключалка между системами работает только если они принадлежат разным регионам.
И чтобы переключиться, допустим, между "PAL NES" и "Dendy" - требуется переоткрывать
РОМ заново.
В новом мультиплатформенном GUI регион-селектор упростили, мы больше не видим отдельно регионы и отдельно системы, привязанные к ним - но баг никуда не делся.

complete_patch.patch
Всё это вместе взятое + фикс для сборки проекта NestopiaUE под MSVS2010.

--------------------------------------------------------------------------------------------------------------
Оригинальная Nestopia 1.40 собирается под MSVS 2005 без единого варнинга
(необходим только DXSDK (include и lib)), я советую на ней поэкспериментировать:
Nestopia 1.40 source
Проверенный, рабочий патч от автора puNES:
Nestopia 1.40 timing patch by FHorse (вылечивает тайминг PPU в dendy-режиме)


Вложения:
feos_nestopiaue_wip.rar [9.36 КБ]
Скачиваний: 7179

_________________
Nestopia 1.37/1.40 Fixed
Сообщение 18 авг 2017, 23:35
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
FDS и NSF победили, благодаря feos'у и FHorse.
А вот сделать удобный регион-селектор, работающий без перезагрузки РОМа - довольно непростая задача.
Даже Sour, автор Mesen подтвердил, что код нестопии неоправданно сложный.

В любом случае, патчи FDS и NSF для денди-режима уже применены в NestopiaUE от Rdanbrook.
Создал ещё проект на гитхабе (для истории). Там лежит оригинальная 1.40 с вылеченным денди-режимом, включая FDS и NSF.
https://github.com/eugene-s-nesdev/Nest ... its/master


Вложения:
Комментарий к файлу: Nestopia 1.40 fixed by FHorse (31.07.2017)
nestopia140_fixed.rar [1.06 МБ]
Скачиваний: 1521

_________________
Nestopia 1.37/1.40 Fixed
Показать сообщения за:  Поле сортировки  
Ответить на тему   [ Сообщений: 9 ] 

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by STSoftware for PTF (mod by Zeru-j).
Русская поддержка phpBB