Wir sind gerade an den Performancetests mit einem ARM XSCALE-System (806 Mhz, Codesys V3, WinCE5). Dabei erhielten wir Werte von einigen Mikrosekunden und dies ohne FPU!
Da dies deutlich aus dem Vergleich ausbricht, suchten wir nach einem Fehler in der Messung. Wir haben dabei folgendes gefunden.
In den Schleifen wird jeweils ein Term gerechnet, z.B.:
FOR i := 1 TO 500 DO
TEST_FLOAT := EXP(LOG(TRUNC(LN(ABS((EXPT(y/X,X)-y+x)/Y)*COS(0.5)*SIN(0.5)*TAN(0.5)))*SQRT(X)));
END_FOR;
Da es sich dabei jedoch lediglich um Konstanten handelt, wird ein intelligenter Compiler diese Zeilen mit was wie:
FOR i := 1 TO 500 DO
TEST_FLOAT := 4.81;
END_FOR;
ersetzen. Dabei entsteht natürlich fast kein Rechenaufwand.
Das heisst die Testresultate messen die Fähigkeiten des Compilers und nicht der Steuerung bei Laufzeit. Unser Vorschlag wäre die Constanten durch Variablen zu ersetzen. Dann können sie nicht mehr rausgekürzt werden.