Ich muss eine geschachtelte for-Schleife verwenden, um die Einträge einer Eigen :: MatrixXd-Typ-Matrix-Ausgabe spaltenweise zu berechnen. Hier werden Eingabe [0], Eingabe [1] und Eingabe [2] als Eigen :: ArrayXXd definiert, um die elementweisen Operationen zu verwenden. Dieser Teil scheint der Engpass für meinen Code zu sein. Kann mir jemand helfen, diese Schleife zu beschleunigen? Vielen Dank!Kann die Berechnung von Matrixeinträgen durch die For-Schleife vermieden werden?
for (int i = 0; i < r; i++) {
for (int j = 0; j < r; j++) {
for (int k = 0; k < r; k++) {
output.col(i * (r * r) + j * r + k) =
input[0].col(i) * input[1].col(j) * input[2].col(k);
}
}
}
* Dieser Teil scheint der Engpass für meinen Code zu sein. * Scheint zu sein oder ist? Sie haben dies in Ihrem Profiling Ihres Codes gesehen? (Welche haben Sie mit optimierten Optimierungen kompiliert?) – Borgleader
@Borgleader Dies ist in der Tat der zweite zeitaufwendigste Teil meines Codes. – Doudou
Es macht eine Menge Arbeit, wenn 'r' groß ist. Aber ein optimierender Compiler sollte sehen, dass 'i * (r * r) + j * r 'und' input [0] .col (i) * input [1] .col (j) 'sich nicht mit' k ändert 'und verschiebe diese aus der inneren Schleife. Aber wir können nicht sagen, ob es von diesem Schnipsel ausgeht. –