Про ZXMAK2

emulators

Postby zxmak » 21 Jan 2015, 02:18

У микрософта етсь статья про таймеры https://msdn.microsoft.com/en-us/librar ... 08(v=vs.85).aspx (как видно из таблицы в конце минимальный оверхэд у rdtsc (в 10 раз меньше чем у QueryPerformanceCounter)).


ссылка покоцалась, дай плиз полную
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby zxmak » 21 Jan 2015, 02:20

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


так такая-же ситуация и на других машинах, как минимум на трех разных результаты идентичные. Два десктопа, один ноутбук. Частота QueryPerformanceFrequecy 2-3 МГц, частота процессоров 2-3 ГГц
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby zxmak » 21 Jan 2015, 02:22

И кстати синхонизация по видео в zxmak2 работает только если у монитора 60Гц развертка, тогда zxmak2 дает 50фпс, если развертка 100Гц, то zxmak2 дает 100фпс вместо 50.


да, там не очень хороший алгоритм определения какой кадр лишний, под высокие частоты не подходит. Нужно переделать.
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby deathsoft » 21 Jan 2015, 02:24

zxmak2.png
zxmak2.png (7.51 KB) Viewed 10530 times

Вот из версии которая всегда делает present, приоритет процесса zxmak2 выл вручную поднят до time critical. По внутреннему графику zxmak2 fps менялся примерно на +-0.001, но судя по графику из msi afterburner изменения намного больше.
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 21 Jan 2015, 02:30

zxmak wrote:так такая-же ситуация и на других машинах, как минимум на трех разных результаты идентичные. Два десктопа, один ноутбук. Частота QueryPerformanceFrequecy 2-3 МГц, частота процессоров 2-3 ГГц

Для десктопов с большой вероятностью можно использовать rdtsc напрямую (достаточно проверить фичу проца tsc invariant) в новой версии унриала это делается и в случае отсутствия фичи выводится варнинг. Для ноутбуков проблема решается временным отключением драйвера intelppm.sys (в реестре тип запуска временно выставить на 4), после чего венда не может управлять скоростью проца и можно использовать rdtsc (ноут конечно в этом случае надо от розетки питать).

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

Еще у тебя за счет не использования d3d exclusive не работает crossfire/sli, т.к. даже в фулскрине оконный режим, (в унриале пока также, но там это связано с диалогами по Ф3 для открытия файла, т.к. на фулскрине через раз диалог открывается за эмулятором и его не видно, в zxmak2 диалога Ф3 на фулскрине нету, т.ч. можно смело делать d3d exclusive).
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 21 Jan 2015, 02:43

zxmak wrote:ссылка покоцалась, дай плиз полную

https://msdn.microsoft.com/en-us/library/dn553408(v=vs.85).aspx
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby zxmak » 21 Jan 2015, 02:50

от из версии которая всегда делает present, приоритет процесса zxmak2 выл вручную поднят до time critical. По внутреннему графику zxmak2 fps менялся примерно на +-0.001, но судя по графику из msi afterburner изменения намного больше.


дело в том что в этой версии эмулятор отлавливает vblank не по таймеру, а по сканлайну дисплея. Но эмуляция со сканированием сканлайна и present выполняются в разных потоках. Когда отлавиливается vblank, уходит еще некоторое время на передачу нотификации в основной поток для рендеринга спрайта на D3D и Present. Т.к. передача осуществляется через добавление задачи в тридпул, это может занимать прилично времени. отсюда видимо и колебания. можно попробовать выделенный поток для нотификаций запустить. Но для однопроцессорной машины это нехорошо :)

Еще у тебя за счет не использования d3d exclusive не работает crossfire/sli, т.к. даже в фулскрине оконный режим, (в унриале пока также, но там это связано с диалогами по Ф3 для открытия файла, т.к. на фулскрине через раз диалог открывается за эмулятором и его не видно, в zxmak2 диалога Ф3 на фулскрине нету, т.ч. можно смело делать d3d exclusive).


в zxmak2 на фулскрине есть диалоги и не только для открытия файла, но и другие, например отладчик. И тулбар с менюшкой выезжают, для этого нужно мышу вверх экрана подвести :)
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby deathsoft » 21 Jan 2015, 02:59

zxmak wrote:дело в том что в этой версии эмулятор отлавливает vblank не по таймеру, а по сканлайну дисплея. Но эмуляция со сканированием сканлайна и present выполняются в разных потоках. Когда отлавиливается vblank, уходит еще некоторое время на передачу нотификации в основной поток для рендеринга спрайта на D3D и Present. Т.к. передача осуществляется через добавление задачи в тридпул, это может занимать прилично времени. отсюда видимо и колебания. можно попробовать выделенный поток для нотификаций запустить. Но для однопроцессорной машины это нехорошо

Тест (и график) делался не для vblank а для time, с vblank у меня 100фпс и 10мс на кадр.

Нотификация через тред пул - мега тормоза, любые объекты синхронизации работают через диспетчер, минимальный квант диспетчера 1мс (это если timebeginperiod(1)), либо нотификации потоков надо едлать на volatile переменных крутясь в цикле с mm_pause, но при этом будет 100% загрузка ядра, более того 2 потока надо еще и к двум разным ядрам прибить по affinity mask иначе вообще чехорда будет.
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 21 Jan 2015, 03:03

zxmak wrote:в zxmak2 на фулскрине есть диалоги и не только для открытия файла, но и другие, например отладчик.

И таки, да, добавь плиз Ф3 (ну или любой другой хоткей) и опциональное дописывание бута (к старом zxmak кстати было), а то каждый раз набирать в трдос имя файла для запуска неудобно.

И еще, у тебя твой же собственный формат udi в zxmak2 поддерживается плохо, половина образов не открывается, пишет какуюто невразумительную ошибку (например образы с трэками нулевой длины).
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 21 Jan 2015, 03:07

zxmak wrote:Но эмуляция со сканированием сканлайна и present выполняются в разных потоках.

Чем плохо отлавливать vblank и делать async present в одном потоке? в тестовом унриале это прекрасно работало.
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

PreviousNext

Return to Эмуляторы

Who is online

Users browsing this forum: No registered users and 2 guests

cron