Geschwindigkeit von Matrix Kopiervorgängen
-
Hallo,
ich habe hier zwei Funktionen, die die Aufgabe haben, Daten von A nach B zu kopieren:
static void _GMTFCopyMatrix(float matIn[3][3], float matOut[3][3]) { matOut[0][0] = matIn[0][0]; matOut[0][1] = matIn[0][1]; matOut[0][2] = matIn[0][2]; matOut[1][0] = matIn[1][0]; matOut[1][1] = matIn[1][1]; matOut[1][2] = matIn[1][2]; matOut[2][0] = matIn[2][0]; matOut[2][1] = matIn[2][1]; matOut[2][2] = matIn[2][2]; } /* _GMTFCopyMatrix */
bzw.
static void _GMTFCopyImage(imgpel** imgIn, imgpel** imgOut, int width, int height) { int row = 0, col = 0; for( row = 0; row < height; ++row ) { for( col = 0; col < width; ++col ) { imgOut[row][col] = imgIn[row][col]; } /* for col */ } /* for row */ } /* _GMTFCopyImage */
Diese Lösung ist natürlich offensichtlich. Die Frage ist nur, lassen sich solche Kopiervorgänge mit C Funktionen oder Pointerarithmetik irgendwie schneller abhandeln? Für einen kleinen Tipp wäre ich dankbar.
Viele Grüße,
mbu
-
Hi,
kann sein, das der Compiler sowas optimiert; ob er es tut, kann ich dir nicht mit Bestimmtheit sagen. Man könnte sich das Assembly angucken und dann Beurteilen.
Hier kannst du auch irgendwas in der Art vonmemcpy ( src, dst, sizeof( dein_datentyp ));
schreiben. Etwas schnelleres wird wohl kaum machbar sein, vorausgesetzt du brauchst wirklich eine Kopie.
-
Äh, also doch eher sowas:
memcpy ( src, dst, zeilen*spalten*sizeof( dein_datentyp ));