Ich implementierte das Gaussian-Elimination-Verfahren über GF (2). Ich benutzte ein zweidimensionales 64-Bit-Integer-Array, um die Matrix in einer Reihe-Haupt-Darstellung zu speichern (Zeilen der Matrix werden in einem zusammenhängenden Array gespeichert). I implementiert, um die Gaußsche Eliminations auf den Zeilen der Matrix in der folgenden Weise:Loop Splitting Performance Problem
wobei (A)^i die i-te Zeile von A. bezeichnet I realisiert dann, dass, wenn i Splitt die Schleife an 5-6 Zeilen wie folgt erhalte ich eine etwas bessere Leistung:
ich würde erwarten, etwas schlechter Leistung zu bekommen, weil ich bin die ganze äußere Schleife wieder Iterieren ... hat jemand dafür eine Erklärung Verhalten? Trifft der Compiler einige knifflige Optimierungen, ist das bei der geteilten Variante einfacher? (Kompiliert mit g ++ O3)
(Wenn Pseudo-Code nicht auf die Antwort führt, i ein minimales Beispiel-Code zur Verfügung stellen kann)
Was ist Ihre Testsuite (Matrizen, ihre Größen)? Was ist ihre interne Repräsentation, Zeile oder Spalte? – Dutow
Matrizen für Testfälle sind zwischen 64 <= n <= 1000 und wie erwähnt, verwende ich Zeile Hauptrepräsentation – Memphisd
Ein minimales Beispiel für Code wäre in der Tat hilfreich. –