1. Algorithmus:
Code: Alles auswählen
con for i = 1 to matA.rows do
con for j = 1 to matB.cols do
for k = 1 to matA.cols do
c_ij += a_ik * b_jk
end
end
end
Code: Alles auswählen
for i = 1 to matA.rows do
con for j = 1 to matB.cols do
for k = 1 to matA.cols do
c_ij += a_ik * b_jk
end
end
end
Code: Alles auswählen
// r ist die transponirte Matrix von B
r = b^T
for i = 1 to matA.rows do
con for j = 1 to matB.cols do
c_ij += vector-a_ik *vector- r_j
end
end
Code: Alles auswählen
con for i = 1 to matA.rows do
for j = 1 to matB.cols do
c_ij += vector-a_i * b_j^T // transponirter Spaltenvektor
end
end
Das sind erst einmal ziemlich einfache Algorithmen aber es geht ja auch erst einmal um's Prinzip. Ab 1000x1000 oder so lohnen die sich dann ja auch wohl schon und darum geht es ja auch. Ich will die Algorithmen vor allem für große Matrizen betrachten.
Wenn ich die also jetzt bewerten würde, dann ist doch sicherlich der erste auch mit einer der besten, da das Ergebnis dann in einem eigenem Thread abgearbeitet werden würde. Die innerste Schleife kann ja auch so immer ein Problempunkt sein, wenn diese sehr langsam ist, und damit auch zu einer schlechten Laufzeit führen.
Der zweite dagegen dürfte wohl einer der schlechtesten sein, da dieser ja nur die mittlere Schleife parallelisiert und die äußerste Schleife und die innerste sequentiell ausführt. Bei dem bin ich aber auch ehrlich gesagt wieder ein wenig verwirrt. das con der zweiten Schleife heißt ja nicht, dass die dritte Schleife auch parallel läuft, oder?
Der dritte dürfte eigentlich ganz okay sein, obwohl man da dann ja auch erst einmal die Matrix B transponieren müsste, was wieder 2 Schleifen erfordern würde, wobei dann nachher die Berchnung parallelisiert erfolgt, aber trotzdem ebend 2 zusätzliche Schleifen.
Bei dem letzten bin ich mir ehrlich gesagt gar nicht sicher aber da würde man doch dann die transponierung auch noch in dem sequentiellen Teil ausführen, oder wie? Scheint mir aber sehr schlecht zu sein aber bei dem bin ich mir gar nicth sicher.
Kann jetzt auch sein, dass ich hier totalen Stuss rede (was ich mal nicht hoffe) aber ich denke dann, dass ich die Algorithmen so bewerten würde:
1 Algo. Sehr gut, da die Berechnung sequentiell in einem anderen Thread staffindet.
3 Algo: Ganz gut, obowhl man noch zwei zusätzliche Schleifen bräuchte aber es wird ja vorher transponiert.
2 Algo. Eher schlecht, da die äußerste und die innerste sequentiell laufen?
4 Algo. Der schlechteste?
Wäre meine Einschätzung so richtig oder liege ich da ganz falsch oder nur hier und da?