Про ZXMAK2

emulators

Postby zxmak » 13 Jul 2013, 17:18

G:\ZXVM\#UNREAL380\cputst>cputst.exe
CPU: Intel(R) Core(TM) i5 CPU 760 @ 2.80GHz
Testing QueryPerformanceFrequency
Fq=3.076113MHz
Qpf use medium resolution HPET or similar
Qpc API overhead 32.508559ns
Current system timer resolution 0.998338ms
Highest system timer resolution 0.996387ms
Testing cpu frequency, iteration 1
Cpu fq at idle [1]=3149.939352MHz
Cpu fq at high load [1]=3149.939647MHz
Testing cpu frequency, iteration 2
Cpu fq at idle [2]=3149.939302MHz
Cpu fq at high load [2]=3149.939679MHz
Testing cpu frequency, iteration 3
Cpu fq at idle [3]=3149.939398MHz
Cpu fq at high load [3]=3149.939638MHz
Last edited by zxmak on 13 Jul 2013, 17:24, edited 2 times in total.
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby deathsoft » 13 Jul 2013, 17:22

Частота не плавает, совершенно непонятно почему унриал затывается через 1-2 секунды.
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby zxmak » 13 Jul 2013, 17:24

deathsoft wrote:Частота не плавает, совершенно непонятно почему унриал затывается через 1-2 секунды.


без понятия, кстати 7-й спектакулятор не затыкается и каким-то образом в нем отсутствуют биения на скролле

а для чего вот этот вызов делается?
Code: Select all
    NTSTATUS Status = RtlAdjustPrivilege(SE_INC_BASE_PRIORITY_PRIVILEGE, TRUE, FALSE, &WasEnabled);
Last edited by zxmak on 13 Jul 2013, 17:25, edited 1 time in total.
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby deathsoft » 13 Jul 2013, 17:24

zxmak wrote:а для чего вот этот вызов делается?

А иначе не поставишь real time priority class, (у админа по идее эта привилегия и так включена, а не админам она даже не дается, но если разрешить не админскому юзеру использовать эту привилегию через групповую политику, то эту привилегию еще надо включить).
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 13 Jul 2013, 17:26

zxmak wrote:без понятия, кстати 7-й спектакулятор не затыкается и каким-то образом в нем отсутствуют биения на скролле

Ну можно еще сделать один режим синхронизации не через rdtsc, а через QueryPerformanceCounter, там точность намного ниже чем у rdtsc (если только QueryPerformanceCounter не использует rdtsc как на моей системе, но выше чем точность системного таймера).
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 13 Jul 2013, 17:29

Что самое интересное, ты гдето выше писал, что zxmak2 не использует изменение частоты системного таймера, но по факту у тебя на системе частота и так максимальная (какойто сторонний софт ее повышает), была бы дефолтная частота таймера 10/15 мс и в zxmak2 никакой плавности бы не было и счетчик fps бы сильно прыгал. Sleep(1) давал бы погрешность в пол спектрум кадра.
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 13 Jul 2013, 22:20

Еще один результат теста:
CPU: Intel(R) Core(TM) i7-3930K CPU @ 3.20GHz
Testing QueryPerformanceFrequency
Fq=3.579545MHz
Qpf use medium resolution HPET or similar
Qpc API overhead 810.158833ns
Current system timer resolution 1.010184ms
Highest system timer resolution 0.966324ms
Testing cpu frequency, iteration 1
Cpu fq at idle [1]=3201.936864MHz
Cpu fq at high load [1]=3201.937433MHz
Testing cpu frequency, iteration 2
Cpu fq at idle [2]=3201.936901MHz
Cpu fq at high load [2]=3201.937429MHz
Testing cpu frequency, iteration 3
Cpu fq at idle [3]=3201.935517MHz
Cpu fq at high load [3]=3201.937773MHz
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 13 Jan 2015, 21:52

Ну какбэ опровержение вранья http://говнофорум.rф/showpost.php?p=771095&postcount=1344 (по поводу того, что в zxmak2 синхронизация такая же точная как в unreal)
zxmak.png
Интервалы между соседними кадрами в zxmak2
zxmak.png (7.8 KB) Viewed 9383 times

unreal.png
Интервалы между соседними кадрами в unreal
unreal.png (7.44 KB) Viewed 9390 times


Измерения производились с использованием msi afterburner (наследник риватюнера и его rtss).
Для максимальной точности измерений приоритет процесса эмулятора был вручную повышен до realtime (и для zxmak2 и для unreal).
В unreal использовался вывод через d3d9 и аппаратный режим масштабирования 2x, режим синхронизации TSC.
Для zxmak2 использовался режим синхронизации по умолчанию (видимо по звуковой карте), т.к. режим VSync дает 100 fps вместо необходимых 50fps (по сути делается синхронный present с включенным vsync, при этом видеодравер выдает кадры с частотой обновления монитора).

На графиках показано время между выводом соседних кадров (масштаб от 19 до 24 мс, частоте 50гц соответствует 20мс).

Коментарии к графикам изишни.

P.S. Тут же добавлен экзешник унриала, котоырй показывает зависит ли частота счетчика RDTSC от изменения частоты проца (на всех современных процах частота RDTSC от реальной частоты проца не зависит).
cpu: Intel(R) Core(TM) i7 CPU 980 @ 3.33GHz 6.12.2 [MMX:YES,SSE:YES,SSE2:YES,TSCINV:YES] TSC at 3341 MHz

TSCINV:YES означает, что TSC не зависит от частоты проца.
TSCINV:NO означает, что TSC зависит от частоты проца.
TSCINV:UNK означает, что проц старый и не поддерживает фичу определения зависимости TSC от частоты проца (тут частота TSC может как зависеть от частоты проца (как на Pentium M), так и не зависеть (как на Pentium Pro)).
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 14 Jan 2015, 01:30

Собственно экзешник.
Attachments
emul.rar
(483.57 KB) Downloaded 412 times
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 15 Jan 2015, 14:02

Бугага, что же мы видим https://zxmak2.codeplex.com/SourceContr ... yncTime.cs
эмуляция синхронизации по TSC нагло попизжена из унриала, а потом идут рассказы о том, что в zxmak2 синхронизация выполняется точнее...

Code: Select all
  public void WaitFrame()
        {
            _waitEvent.Reset();
            try
            {
                if (_isCancel)
                {
                    return;
                }
                var frequency = Stopwatch.Frequency;
                var time50 = frequency / 50;
                var stamp = Stopwatch.GetTimestamp();
                var time = stamp - _lastTimeStamp;
                if (time < time50)
                {
                    var delay = (int)(((time50 - time) * 1000) / frequency);
                    if (delay > 5 && delay < 40)
                    {
                        Thread.Sleep(delay - 1);
                    }
                }
                while (true)
                {
                    stamp = Stopwatch.GetTimestamp();
                    time = stamp - _lastTimeStamp;
                    if (time >= time50)
                    {
                        break;
                    }
                    Thread.SpinWait(1);
                }
                if (time > time50 * 2)
                {
                    // resync
                    _lastTimeStamp = stamp;
                }
                else
                {
                    _lastTimeStamp += time50;
                }
            }
            finally
            {
                _waitEvent.Set();
            }
        }
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 23 guests