Сообщения без ответов | Активные темы Текущее время: 28 июн 2017, 07:41



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

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 387
Откуда: Мытищи
Я оставлю это здесь для истории.
Ни один из разработчиков современных эмуляторов 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.36/1.37 Dendy-mode


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

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

_________________
Challenge the Legend / Мой сайт - http://www.u-sm.ru
P8P67 PRO, i5-3570K, 16GB, GTX 980


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

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


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

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

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

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

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

_________________
Nestopia 1.36/1.37 Dendy-mode


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

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


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

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

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


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

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

_________________
8-BIT MUSIC FAN


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

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 387
Откуда: Мытищи
Так как феос удалил клон репозитория 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 КБ]
Скачиваний: 8

_________________
Nestopia 1.36/1.37 Dendy-mode
Показать сообщения за:  Поле сортировки  
Ответить на тему   [ Сообщений: 8 ] 

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

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


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

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