Page 13 of 17

Re: Про ZXMAK2

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


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

Re: Про ZXMAK2

PostPosted: 21 Jan 2015, 02:20
by zxmak
Все очено просто, на твоем компе система не может заюзать TSC для QueryPerformanceFrequecy, отключи в биосе управление энерго сбережением и возможно заюзает.


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

Re: Про ZXMAK2

PostPosted: 21 Jan 2015, 02:22
by zxmak
И кстати синхонизация по видео в zxmak2 работает только если у монитора 60Гц развертка, тогда zxmak2 дает 50фпс, если развертка 100Гц, то zxmak2 дает 100фпс вместо 50.


да, там не очень хороший алгоритм определения какой кадр лишний, под высокие частоты не подходит. Нужно переделать.

Re: Про ZXMAK2

PostPosted: 21 Jan 2015, 02:24
by deathsoft
zxmak2.png
zxmak2.png (7.51 KB) Viewed 10801 times

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

Re: Про ZXMAK2

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

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

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

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

Re: Про ZXMAK2

PostPosted: 21 Jan 2015, 02:43
by deathsoft
zxmak wrote:ссылка покоцалась, дай плиз полную

https://msdn.microsoft.com/en-us/library/dn553408(v=vs.85).aspx

Re: Про ZXMAK2

PostPosted: 21 Jan 2015, 02:50
by zxmak
от из версии которая всегда делает 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 на фулскрине есть диалоги и не только для открытия файла, но и другие, например отладчик. И тулбар с менюшкой выезжают, для этого нужно мышу вверх экрана подвести :)

Re: Про ZXMAK2

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

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

Нотификация через тред пул - мега тормоза, любые объекты синхронизации работают через диспетчер, минимальный квант диспетчера 1мс (это если timebeginperiod(1)), либо нотификации потоков надо едлать на volatile переменных крутясь в цикле с mm_pause, но при этом будет 100% загрузка ядра, более того 2 потока надо еще и к двум разным ядрам прибить по affinity mask иначе вообще чехорда будет.

Re: Про ZXMAK2

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

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

И еще, у тебя твой же собственный формат udi в zxmak2 поддерживается плохо, половина образов не открывается, пишет какуюто невразумительную ошибку (например образы с трэками нулевой длины).

Re: Про ZXMAK2

PostPosted: 21 Jan 2015, 03:07
by deathsoft
zxmak wrote:Но эмуляция со сканированием сканлайна и present выполняются в разных потоках.

Чем плохо отлавливать vblank и делать async present в одном потоке? в тестовом унриале это прекрасно работало.