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 |