Entwickler-Ecke

Algorithmen, Optimierung und Assembler - not (x=y) oder x<>y?


Heiko - Fr 23.09.05 14:22
Titel: not (x=y) oder x<>y?
Was ist von der Performance her besser für den Prozessor not (x=y) oder x<>y? Oder hängt es vom Prozessor ab? Oder wandelt Delphi das zum gleichem um?


Narses - Fr 23.09.05 14:41

Moin!

Würde sagen, dass hängt vom Datentyp ab. Bei Integern sollte das IMHO egal sein, läuft auf ein CMP und ein JPx hinaus.

cu
Narses


Heiko - Fr 23.09.05 14:45

user profile iconNarses hat folgendes geschrieben:
Moin!

Würde sagen, dass hängt vom Datentyp ab. Bei Integern sollte das IMHO egal sein, läuft auf ein CMP und ein JPx hinaus.

cu
Narses


Was ist CMP und JPx?

@Datentyp ist meistens Integer ;).


digi_c - Fr 23.09.05 14:47

Das ist Assembler also CPU Code.

Ich denke auch das der Compiler so intelligent ist und beides gleich interpretiert.


AXMD - Fr 23.09.05 14:50

Wieso probierst du's nicht einfach aus? In einer Schleife 10 Mio. mal (oder evtl. öfter) zwei Zufallszahlen vergleichen und schauen, welche der beiden Methoden schneller ist...

AXMD


Horst_H - Fr 23.09.05 14:51

Hallo,

schau Dir das Assemblerlisting an.
mittels F5 oder Mausklick auf die Zeilennummer (mit blauen Punkt sind die kompilierten Zeilen nach Strg+F9 angezeigt)wird eine Haltestelle eingefuegt.(roter Punkt)
Programm starten .
Das Prgramm wird dann, wenn es diesen Codseabschnitt erreicht hat, anhalten.
Dann in Delphi Ansicht->Debugfenster->CPU (STRTG-ALT-C (ist bei mir Hotkey ATI Einstellungen)

Ergebnis es wird beides als
CMP ?,???
Jz vorbei;
...Then Abschnitt;
vorbei:
uebersetzt.
Und was hilft uns das??

Gruss Horst


uall@ogc - Fr 23.09.05 14:53

beides das selbe.

aber wofür brauchst du das, und kann man sowas nicht selber testen?


Heiko - Fr 23.09.05 15:03

Ich bin dabei mit Delphi gegen einen c - und einen c++ -Programmier um Performance zu kämpfen und da versucht man nat. jedes bisschen noch herauszukitzeln.

@Asm-Code: Ich kenne mich nicht mit Assembler aus, wodurch ich das CPU-Fenster nie nehme ;).

@Testen: Auf meinem müsste ich schon ziemlich viele durchläufe laufen lassen und da die CPU-Last schwankt würde es vlt. auch bei mehreren durchläufen nicht das richtige Ergebnis rauskommen. Und es kann ja Prozessorabhängig sein, wenn der ASM-Code unterschiedlich ist ;).


AXMD - Fr 23.09.05 15:12

Du willst jedes bisschen herauskitzeln und kannst kein Assembler? Sorry, aber das ist irgendwie widersprüchlich...

AXMD


Heiko - Fr 23.09.05 15:36

Ne ist kein Widerspruch. Ich will jedes bisschen Performance herausholen, was Delphi mit seinen Befehlen anbietet. Das ich mit ASM schneller sein kann als die c programmierer ist mit klar, da man einige "Kanten" wegnehemn kann ;).


alzaimar - Fr 23.09.05 19:43

Der Wettbewerb ist eigentlich überflüssig, da sich die einzelnen Compiler bzw. das Compilat nicht viel nehmen. Das wurde in der Vergangenheit schon mehrfach bewiesen. c't hatte vor ein oder zwei Jahren einen Vergleich, bei dem mal C, mal Delphi marginal besser wegkam. Selbst mit ASM kann man i.A. nicht viel rausholen, ausser, man benutzt individuelle Tricks, die kein Compiler beherrscht, da sie eine gehörige Portion Erfahrung voraussetzen.

Deine Frage ist nicht einfach zu beantworten: Wenn das Not(a=b) isoliert vorkommt (...If Not (a=b)...), ist das ERgebnis u.U. ganz anders, als wenn der Ausdruck Teil eines komplexeren Ausdruckes ist. Da hilft wirklich nur testen, testen, testen.

Aber wenn Ihr sonst nichts zu tun habt... Mach doch mal einen neuen Thread auf und bitte um Tipps zur performanten Codierung. Oder, wenn Du mit deinen Freunden ein konkretes Wettbewerbsprojekt macht, helfen wir Dir gerne. Wir werden als Forum doch ein paar C++Grünschnäbeln die Butter vom Brot nehmen können, oder?


Heiko - Fr 23.09.05 19:53

Ich kann ja mal einen Thread dazu aufmachen, wenn ich alles was ich schon verbessern kann verbessert habe ;). Die Unterschiede zw. den Programm sind nicht mehr alzu groß, allerdings sind es 2 verschiedene Plattformen auf den wir testen, da der eine für Linux entwickelt, der andere für Mac (beide testen es aber auf Mac) und ich auf Windows ;). Allerdings auf einen 3,2er, während die das auf einem 1,3er machen ;).


GTA-Place - Fr 23.09.05 20:18

Ich bevorzuge immer not (X = Y). Finde ich auch übersichtlicher.
Ob es schneller ist, sei mal dahingestellt.