michael_kr
Cadet 2nd Year
- Registriert
- Dez. 2014
- Beiträge
- 27
Habe ein kleines Programm geschrieben, welches (n * n) Matrizzen miteinander multipliziert.
Hier die entsprechende Methode:
Habe es versucht so einzurichten, dass die Lösungen direkt in die entsprechende Lösungmatrix geschrieben werden. (Der Rückgabewert ist noch ein Überbleibsel, darum kümmere ich mich später).
Die Werte werden korrekt berechnet, das Problem liegt darin, dass für jede Zeile immer nur die ersten vier Werte geschrieben werden (also nur für k = 0), der Rest der Zeile besteht aus Nullen...
Kann mir jemand sagen, was ich falsch mache? Die Lösungsmatrix (die, die auch zurück gegeben wird) ist korrekt allokiert, für andere Methoden funktioniert sie, nur eben mit dem Pointer der die "128-Bit Zahl" direkt ins Array schiebt haut es nicht hin.
Danke schonmal im Voraus
Hier die entsprechende Methode:
Code:
// berechnet das Ergebnis der Matrixmultiplikation gemäß Variante SSE2
// **matrixSol : Ergebnismatrix
// **matrixA : erste Matrix
// **matrixB : zweite Matrix
// n : Größe der Matrix
float** mulVarSSE2(float **matrixSol, float **matrixA, float **matrixB, int n) {
__m128 matrixASSE; // Matrix A
__m128 matrixBSSE; // Matrix B
matrixSol = (float**) calloc(32, n * sizeof(float*));
for (int i = 0; i < n; i++) {
matrixSol[i] = (float*) calloc(32, n * sizeof(float*)); //
}
__m128 **matrixSolSSE = (__m128**) matrixSol;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
matrixASSE = _mm_set1_ps(matrixA[j][i]);
for (int k = 0; k < n; k += 4) {
matrixBSSE = _mm_set_ps(matrixB[i][k + 3], matrixB[i][k + 2], matrixB[i][k + 1], matrixB[i][k]);
matrixSolSSE[j][k] += _mm_mul_ps(matrixASSE, matrixBSSE);
}
}
}
return matrixSol;
}
Habe es versucht so einzurichten, dass die Lösungen direkt in die entsprechende Lösungmatrix geschrieben werden. (Der Rückgabewert ist noch ein Überbleibsel, darum kümmere ich mich später).
Die Werte werden korrekt berechnet, das Problem liegt darin, dass für jede Zeile immer nur die ersten vier Werte geschrieben werden (also nur für k = 0), der Rest der Zeile besteht aus Nullen...
Kann mir jemand sagen, was ich falsch mache? Die Lösungsmatrix (die, die auch zurück gegeben wird) ist korrekt allokiert, für andere Methoden funktioniert sie, nur eben mit dem Pointer der die "128-Bit Zahl" direkt ins Array schiebt haut es nicht hin.
Danke schonmal im Voraus
