Ich vergleiche zwei iterative Methoden zum Invertieren von zufälligen Quadratmatrizen. Da die Matrizen zufällig sind, benötigt jeder Testfall sowohl unterschiedliche Mengen an Iterationen als auch unterschiedliche abgelaufene Zeiten. Meine Frage ist, neben der mittleren CPU-Zeit, der Mittelwert der Iterationen, die von beiden Methoden verwendet werden. Nützliche Informationen zum Vergleichen der Methoden.
performance
benchmarking
srijan
quelle
quelle
Antworten:
In der Regel haben beide Methoden des Leistungsvergleichs ihren Platz.
Der Vergleich der CPU-Zeit ist in gewisser Hinsicht die interessanteste Messgröße, da Sie am Ende des Tages wirklich interessiert sind, welche der Methoden schneller ist. (Stellen Sie jedoch sicher, dass die Abbruchkriterien vergleichbar sind; z. B. dass beide Methoden eine Annäherung mit der gleichen Genauigkeit ergeben). Der Nachteil ist, dass dies nur angibt, welche Methode (und vor allem welche Implementierung ) auf dem Computer, auf dem Sie die Tests durchgeführt haben, schneller ist. Es gibt keine Garantie dafür, dass eine andere Maschine mit unterschiedlicher Architektur oder Software den gleichen Gewinner auswählt.
Der Vergleich der Iterationszahlen ist dagegen maschinenunabhängig, kann jedoch irreführend sein, wenn die beiden Methoden sehr unterschiedliche Iterationen aufweisen. In diesem Fall ist die Methode mit weniger, aber teureren Iterationen möglicherweise nicht vorzuziehen (z. B. Newton- oder Gradientenmethoden zur Optimierung) wenn Sie nur eine sehr geringe Genauigkeit benötigen).
Also, ja, es ist sinnvoll, beide Zahlen [1] anzugeben, und ich habe es häufig in Veröffentlichungen gesehen. Es gibt auch eine dritte Option:
[1] Präsentieren Sie Statistiken auf jeden Fall über mehrere Läufe. Wenn Sie Mittelwerte anzeigen, vergessen Sie nicht, auch Standardabweichungen anzugeben.
quelle
Ich halte die Anzahl der Iterationen für eine irreführende Metrik, da sie "Geschwindigkeit" andeutet, wenn dies nicht der Fall ist. Ein einfaches Beispiel für den Vergleich einiger verschiedener Vorkonditionierer, die diesen Unterschied zeigen, finden Sie hier: http://www.dealii.org/developer/doxygen/deal.II/step_6.html#Possibilitiesforextensions
quelle
Falls in den anderen Antworten nicht klar ist, wofür die Anzahl der Iterationen gut ist, sind Big-O-Argumente.
Es ist nicht gut für die absolute Geschwindigkeit, da dies von der durchschnittlichen Zeit pro Iteration abhängt, die sich zwischen den Methoden um einen großen Faktor unterscheiden kann.
Beispielsweise besteht die Tendenz, die Kosten für die Berechnung von Array-Indizes zu ignorieren, und dies kann durchaus einen großen Teil der CPU-Zeit ausmachen.
HINZUGEFÜGT: Wie ich bereits an anderer Stelle ausgeführt habe, fallen für jeden Aufruf der Methode in der Regel Einrichtungskosten an. Wenn die Matrizen dann normalerweise nicht sehr groß sind, können diese Einrichtungskosten selbst einen großen Bruchteil der CPU-Zeit ausmachen (so dass das Entfernen einen großen Unterschied in der Geschwindigkeit bewirken würde).
quelle