Frage

Ich bin mit C ++ Code einig komplizierten FFT-Algorithmus, so dass ich solche algebraischen Strukturen wie quaternions und Hamilton-Eisenstein-Codes implementieren muß. Algorithmus arbeitet mit 2D-Array aus, dass Strukturen. Was wäre der Aufwand, sich als Klassen der Umsetzung? In anderer Weise Soll ich das Array mit [M] [N], den Abmessungen von Quaternion Klassen besteht, oder soll ich erstellen [m] [n] [4] Array und die Arbeit mit [4] Arrays als Quaternionen? Mit Klassen ist bequemer, aber sie schaffen auch M * N Klassen und ihre Methoden Zugriff auf statt zu arbeiten nur mit Array - würde das nicht-Overhead zu viel sein? Ich bin Codierung des Algorithmus für große Bildverarbeitung, so dass Leistung für mich wichtig ist.

War es hilfreich?

Lösung

IMHO sind Sie besser bedient, indem sie die Umsetzung als Klassen, nur weil diese Sie lassen Ihren Code schreiben, mit weniger Fehlern schneller. Sie sollten Messungen tun, um zu sehen, was am besten führt, wenn dies für Sie wichtig ist, sondern auch dafür sorgen, dass es tatsächlich dieser Code ist, dass die Performance-Engpass ist. (Mandatory Donald Knuth Zitat : "vorzeitige Optimierung ist die Wurzel aller Übel").

Die meisten Compiler wird einen sehr guten Job bei Code für Sie zu optimieren, würde ich sagen. Öfter als ich, dass es nicht finden, ist etwas anderes als diese niedrigen Niveau Dinge, die einen Unterschied machen, wie eine frühe-Out-Test das Hinzufügen oder den Datensatz oder Dingsbums minimiert wird.

Für eine Quaternion, können Sie immer noch die Klasse implementieren intern mit einem Array (in dem Fall, dass tatsächlich schneller ist), was den Unterschied selbst machen sollte weniger wichtig.

Sie sind wahrscheinlich besser gedient, zum Beispiel dafür sorgen, dass Sie Ihre Algorithmen in parallell auf Multi-Core-Maschinen laufen können oder machen Sie Ihre tatsächlichen Berechnungen SSE-Befehle.

Andere Tipps

In Bezug auf Overhead von Klassen. Es sei denn, Ihre Klassen virtuelle Funktionen haben, gibt es keine Strafe ist Klassen für die Verwendung

So zum Beispiel eine Reihe von komplexen Variablen geschrieben werden als:

std::complex<double> m[10][10];

Beware of STL Collection-Klassen, obwohl, wie sie neigen dazu, die dynamische Zuordnung zu verwenden, und manchmal einführen erheblichen Mehraufwand (das heißt, würde ich nicht Arrays machen mit vector< vector<> >.

Sie könnten die Verwendung einer Bibliothek wie Eigen untersuchen wollen schnell, optimiert, Matrix / Vektor-Klassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top