OpenSCADAWiki: Works/Tests/ Java Like ...

Home | Index | Changes | Comments | Users | Registration | Login  Password:  
 

Тесты модуля вычислений на основе Java подобного языка


Производительность виртуальной машины


28.01.2006:
Основание: Первичная оценка производительности виртуальной машины системы OpenSCADA на основе выражения "y=x1+x2", где все переменные глобальные вещественного типа.

Стадия Действие K7_1G-0, мкс
1 Инициализация списка регистров 2.3
2 Вход в функцию exec() 3
3 Обход команд 4.4
4 Чтение 9
5 Полное время 10.2

17.07.2013:
Основание: Обоснование текущей производительности, оценка и оптимизация. Измерения проводились выборкой минимального времени из пяти вызовов по 1000 исполнений формулы "a -= b*(a-c)" и её сокращений в каждом вызове. Все переменные глобальные вещественного типа.

Formula Time on AMDGeode-500 (the operation time), мкс Notes
a -= b*(a-c) 4.52 (0.74)
a -= b*c 3.78 (0.72)
a -= b 3.06 (0.56)
=> full call: 3.06 (0.49): getValR() = 0.49/2 = 0.245
=> only write const = 2.57 (0.17)
=> pass.code = 2.4
a = b 2.5 (1.21)
!> use unified TVariant function setVal() and getVal() = 7.6 (2.7 write only) => fix to 5.0 by prevent default set to string EVAL.
=> full call: 2.5 (0.33)
=> only write const: 2.17 (0.47)
=> only check for type: 1.7 (0.3)
=> pass code: 1.4 (0.11)
Write to function IO is longer then read from local register by other context call and additional checking for NAN and real modification.
Empty 1.29 Infrastructure and measurement method utilization time.

24.04.2016:
Reason: Estimate performance of access to low level IO lines on Raspberry Pi GPIO in different ways of JavaLikeCalc language of OpenSCADA.
Conditions: Raspberry Pi 3, GPIO40, DAQ.BCM2835 (based on library bcm2835)

Operation Result, us
Sleep. Lag on sleep in 1ms measured, which mostly limited by the realtime reaction about 100us.
SYS.sleep(); +110
Special.FLibSYS.fnc_tmSleep(); +70
Sleep. Lag on sleep in 100us measured, which performs in the measuring cycle.
SYS.sleep(); +17
Special.FLibSYS.fnc_tmSleep(); +2
Get GPIO pin's level
From an attribute res = BCM2835.pi2.pi2.gpio17; 5.4
By the static accessing function res = DAQ.BCM2835.pi2.pi2.fnc_get(17); 1.6
By the static accessing function with prepare the link function get = "DAQ.BCM2835.pi2.pi2.fnc_get"; for(i = 0; i < 10000; i++) res = get(17); 1.7
By the dynamic accessing function res = SYS.DAQ.BCM2835.pi2.pi2.fnc_get.call(17); 80
By the dynamic accessing function with prepare the end object tO = SYS.DAQ.BCM2835.pi2.pi2.fnc_get; for(i = 0; i < 1000; i++) res = tO.call(17); 14.3
Put GPIO pin's level
To an attribute BCM2835.pi2.pi2.gpio18 = true; 2.1
By the static accessing function DAQ.BCM2835.pi2.pi2.fnc_put(18, true); 1.4
By the static accessing function with prepare the link function put = "DAQ.BCM2835.pi2.pi2.fnc_put"; for(i = 0; i < 10000; i++) put(17, false); 1.5
By the dynamic accessing function SYS.DAQ.BCM2835.pi2.pi2.fnc_put.call(18, true); 79
By the dynamic accessing function with prepare the end object tO = SYS.DAQ.BCM2835.pi2.pi2.fnc_put; for(i = 0; i < 1000; i++) tO.call(18, true); 14.3


 
Files[Hide files/form]
There is no comment on this page. [Display comments/form]