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 von

    memcpy ( 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 ));
    

    🙂


Anmelden zum Antworten