2 van 2

Re: Java 7

Geplaatst: ma 30 nov 2009, 23:26
door Schwartz
Heb vandaag even een meting gedaan in delphi4 pascal:

2 giga aan testen op een 2.8 Ghz processor.

De if testing kwam op 41 seconden

En de case constructie kwam uit op 5 seconden.

Getest bij 20 ingangen.

Betekent dat de case met de testconstructie erbij per test gemiddeld maar 7 processorcycli nodig heeft.

Re: Java 7

Geplaatst: ma 30 nov 2009, 23:53
door Schwartz
Heb vorige geedit maar er is iets fout gegaan:

De editing is niet verwerkt en nu kan ik het niet meer editen.

De case en if is net zo snel.

De compiler heeft de lege case testen namelijk niet opgenomen waardoor er een aanzienlijk snelheidsverschil ontstond.

Haal nu een snelheid van 15 seconden voor beide op een moderne computer.

Re: Java 7

Geplaatst: di 01 dec 2009, 16:56
door Cycloon
Uiteraard zou dat nauwelijks verschil mogen geven, uiteindelijk worden beide situaties omgeschreven naar spronginstructies voor de processor.

Re: Java 7

Geplaatst: di 01 dec 2009, 18:32
door Schwartz
@cycloon

Zo logisch is dat niet, de compiler kan bij een case anders gaan handelen en de test constructie optimaliseren omdat alle waarden vastliggen.

Ook heeft men de testwaarde vast staan per test.

Vond het opmerkelijk dat delphi4 (pascal) de case weglaat die geen software omvat, terwijl er wel begin;end instaat.

Deze begin en end wordt waarschijnlijk eerst verwerkt.

Ook het snelheidsverschil tussen de oude en de nieuwe computer valt erg op..

de processor van de nieuwe draait op 3.2 en de oude op 2.8..

14% sneller ongeveer...

maar de testwerking is nu gemiddeld 24 cycli was eerst. 57 cycli...

Kan men zien dat de nieuwe processoren beduidend beter presteren....

Voor het afvangen van toetsdrukken hoeft men geen hash toe te passen want een paar cycli meer maakt dan niets uit....

Wel als men vele commandos af moet vangen.

Re: Java 7

Geplaatst: di 01 dec 2009, 18:45
door Cycloon
Schwartz schreef:@cycloon

Zo logisch is dat niet, de compiler kan bij een case anders gaan handelen en de test constructie optimaliseren omdat alle waarden vastliggen.


Als je gelijkaardige testen uitvoert dan zijn alle mogelijkheden uiteraard ook vooraf bekend in je if/else constructie. Ook zal een bepaalde waarde in het register gehaald worden (die om te vergelijken) en een beetje goede compiler zou zelf moeten opmerken dat deze waarde tot de laatste else in het register moet blijven. Voor de rest zullen de instructies voor de processor grotendeels gelijklopend zijn.

Re: Java 7

Geplaatst: di 01 dec 2009, 19:21
door Schwartz
IF a=10 then begin a:=a+1;software;end;

IF a=11 then begin software end;

is andere software dan

CASE A OF

10: a:=A+1;software;

11:software;

END;

en de compiler mag dit niet fout doen....

de compiler mag niet mee gaan zitten programmeren....

De delphi compiler test nu bij een case uit of alle waarden uniek zijn, dit is niet het geval bij de if;

en er is minimaal 1 case verplicht, dit vind ik een nadeel inzake programmatie (ik kan met eigen commandos software verzamelen voor in een case constructie).