In der Mitte eines C ++ - Codes, Eclipse, muss ich die Multiplikation der Matrizen A und B mit der Größe 2400 * 3600 berechnen (also sind die Dimensionen nicht gleich). Die Matrizen werden in zweidimensionalen Float-Arrays gespeichert. Sie sind nicht spärlich, keine Einschränkungen.
Jede Multiplikation dauert so lange (mehrere Minuten), und ich muss sie wirklich reduzieren, weil ich eine Schleife habe, die sich 50 Millionen Mal wiederholt. und jedes Mal sollte ein neues A und B multipliziert werden. Jede Art von Empfehlung ist willkommen, um die zeitliche Komplexität zu reduzieren. (Ändern Sie sogar die Struktur der Speicherung der Daten, wenn Sie denken, dass das helfen könnte). Was passiert zum Beispiel, wenn ich die Daten in eindimensionalen Arrays speichere? Oder Vektoren anstelle von Arrays verwenden?
In einem bestimmten Fall ist die erste Spalte immer 1 und die Werte sind entweder 1, -1 oder Null. Irgendeine Idee für diesen Fall?
In anderen Fällen können die Werte irgendeine Sache sein.
** Eine dieser Multiplikationen ist X multipliziert mit seiner Transponierten. Gibt es eine Empfehlung zu diesem speziellen?
Ich würde nicht herumalbern und versuchen, mein eigenes zu schreiben: Google für LAPACK oder BLAS, zwei bewährte Pakete für das numerische Rechnen, beide auf den N-ten Grad optimiert. Beide haben C-APIs, die Sie verwenden können.
Wenn Sie von Millionen von Multiplikationen sprechen, wende ich mich zuerst an etwas wie CUDA oder DirectCompute, um die Arbeit auf die GPU zu laden, was viel besser für diese Art von Sachen geeignet ist. Das hat MATLAB gemacht, auch wenn die GPU-Beschleunigung optional ist.
Es gibt unzählige Beispiele für GPU-beschleunigte Matrixmultiplikation, also sollte Ihre Arbeit nicht zu schwer sein.
Tags und Links arrays c++ matrix multiplying