2009-02-26 15 views
2

Ich habe eine Frage (wie ich gerade) ...äquivalente Anzahl von Befehls

aber ... wenn ich einen gewählten Algorithmus geschrieben in C oder C++ haben oder was auch immer Code, den Sie wollen ... fixiert ein Compiler Ich kann die Anzahl der Anweisungen bestimmen, aber diese Anweisungen unterscheiden sich voneinander: x ADD, y MUL, z MOV, f FADD, t FMUL (F steht für FLOATING) ... Gibt es eine Methodologie oder Gleichung oder etwas anderes, das dies zulässt? die Anzahl der Anweisungen in die Anzahl der "äquivalenten Anweisungen" schreiben, um verschiedene Algorithmen zu vergleichen? Gibt es jemanden von Ihnen, der diese Art von Metrik verwendet? ist es ein Müll?

Dank

Marco

Teil2: Ich weiß, dass es ein auf und Architektur im Allgemeinen dipends. Mein Problem ist: Eine Ausführungszeit von verschiedenen Algorithmen zu bestimmen, die auf verschiedenen Architekturen von Softcore implementiert sind. Auf der y-Achse muss ich die Zeit schreiben, auf der x-Achse werden die Anzahl der Anweisungen und der Punkt der Grafik durch die Art der Architektur parametrisiert (Entschuldigung für mein Englisch). Aber auf x-axix denke ich, es ist besser, etwas wie die Anzahl der "äquivalenten Anweisung" zu verwenden ...

Ist es eine Quatsch-Idee?

Antwort

4

Sie verstehen das Problem nicht ganz. Die Ausführungsgeschwindigkeit hängt nicht nur von den Anweisungen ab, sondern auch von den Abhängigkeiten zwischen den Anweisungen. Mikroprozessoren können mehrere Befehle gleichzeitig ausführen, da diese Anweisungen nicht voneinander abhängen. Die Fähigkeit, mehrere Anweisungen gleichzeitig auszuführen, unterscheidet sich von einer Prozessorfamilie zur anderen. Deshalb ist diese Aufgabe wirklich hardware-spezifisch und kann nicht ein für allemal gelöst werden.

Alles, was Sie tun können, ist eine Ausführungszeitleiste von Anweisungen und Prozessorzyklen zu zeichnen. Prozessorzyklen könnten y-Achse sein, Anweisungen könnten x-Achse sein. Sie werden Probleme haben, Cachetreffer und Fehlschläge vorherzusagen, und die Ausführungszeit vieler Anweisungen wird je nach Cachetreffer/Fehlschlägen stark variieren. Seien Sie bereit, viel Zeit mit den Handbüchern der Prozessoren zu verbringen.

+0

Danke Aber ich kann Prozessorzyklus nicht verwenden, weil ich auch eine reine FPGA-Architektur verwenden konnte, nicht uP basiert ... so wird Prozessorzyklus ein Unsinn in dieser Situation ... –

+0

Sie müssen das Pipelining und die Ausführung berücksichtigen Einheiten des Prozessors, das ist wichtig für die genaue Vorhersage der Ausführungszeit. Dies bedeutet, dass Sie wissen, was jede Ausführungseinheit in jedem Prozessorzyklus macht. – sharptooth

2

Es müsste Pipelining und alle Arten von anderen Feinheiten berücksichtigen, von denen viele von Prozessor variieren. Mit anderen Worten, ich kann nicht sehen, dass es besonders nützlich ist, selbst wenn es machbar ist.

Es gibt auch Dinge, die der Algorithmus Ihnen nicht sagen könnte, wie viele Cache-Fehler es gibt usw. - diese könnten viel wichtiger sein als die Anzahl der rohen Anweisungen.

+0

Dank Jon, ist es eine Möglichkeit, ein gewisses Maß an Aufwand von festen Algorithmus zu bestimmen? Aber nichts wie O (nlog (n)) ... das ist accademic ... Danke –

+0

Nicht dass ich mir dessen bewusst bin. Ich finde normalerweise, dass "es läuft und es ist Zeit" der einfachste Ansatz ist und ziemlich gut funktioniert. –

+0

Jon, manchmal Cache-Misses kann vorhergesagt werden. Wenn Sie zum Beispiel zwei große Matrizen multiplizieren, wissen Sie mit Sicherheit, dass das Abrufen jeder Spalte der zweiten Matrix zu einer Menge Cache-Misses führt und sogar die Kosten dafür auswerten kann. – sharptooth

0

Es ist kein Quatsch, es ist nur vage. Um von Algorithmus zu SOurce-Code zu Object COde zu Core zu gehen ... so viele Details zu nageln, von denen jede erhebliche Auswirkungen auf die Leistung haben kann.

Werfen Sie einen Blick auf Hennessey & Pattersons "Computer Architecture, A Quantitative Approach"

+0

Das ist nicht vage, das ist Ultra Hardcore. Es kann sehr effektiv sein, wenn es nach sorgfältiger Optimierung auf hohem Niveau durchgeführt wird. – sharptooth