Tom: Wie teuer ist welche Operation?

Beitrag lesen

Hello,

Das ganze würde natürlich mit Modulo gehen aber der steht nicht zur Verfügung.

Wir suchen also ein z = x mod y

An schnellen Befehlen, die in Frage kommen, stehen zur Verfügung:

  • die vier Grundrechenarten

Integer?

z = x - ((x / y) * y)

Man weiß ja nicht, wei es umgesetzt wir und auf welchem Prozessor.
Aber ich gehe mal davon aus, dass es kein Mathematischer Coprozessor ist, sondern irgendeine eine Single-Chip-Gurke.

Da wären DIV und MUL auf jeden Fall sehr teure Statements.

Als Beispiel beim Beim 8086

DIV    3+9+16+4+4+4+17 = 57  (zuzügl. 2*EA)   genau nachvollziehbar
 MUL    77+133+83+139   = 432 (zuzügl. 2*EA)   Maximalwert
 SUB    90+162+168      = 420 (zuzügl. 2*EA)

Das muss man sich also sehr genau überlegen, ob man nicht lieber eine Abbildung von "repnz" oder so ähnlich benutzt. Das ist bei den hardwarenahen Hochsprachen i.d.R. in For-Schleifen umgesetzt.
Wenn es sich um sogenannte "dedizierte For-Schleifen" handelt, in denen man den Schleifenzähler wärend der Abarbeitung nicht mehr verändrn darf, sind die extrem schnell.

Das kann man aber eben nicht beantworten, ohne den Assempler-Code Deiner Hochsprache zu haben und ohne den Prozessortyp genauer zu kennen.

Wenn es um das Ausknautschen von Taktzyklen geht, wird ja wohl Portierbarkeit eher keine Rolle spielen

Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)