Wie ermittelt man, ob Speicher ausgerichtet ist?

Ich bin neu in der Optimierung von code mit SSE/SSE2 Anweisungen und bis jetzt habe ich nicht bekommen, sehr weit. Meines Wissens eine gemeinsame SSE-optimierte Funktion würde wie folgt Aussehen:

void sse_func(const float* const ptr, int len){
    if( ptr is aligned )
    {
        for( ... ){
            //unroll loop by 4 or 2 elements
        }
        for( ....){
            //handle the rest
            //(non-optimized code)
        }
    } else {
        for( ....){
            //regular C code to handle non-aligned memory
        }
    }
}

Jedoch, wie kann ich korrekt bestimmen, wenn der Speicher ptr Punkte ausgerichtet ist, wie z.B. 16 Bytes? Ich denke, dass ich noch die regulären C-code-Pfad für den nicht ausgerichteten Speicher, da ich nicht sicherstellen, dass jede Erinnerung an diese Funktion übergeben wird, ausgerichtet werden. Und mit der systeminterne Funktionen zum laden von Daten aus nicht ausgerichteten Speicher, in den SSE-Registern, zu sein scheint schrecklich langsam (Noch langsamer als die regulären C-code).

Danke im Voraus...

InformationsquelleAutor der Frage user229898 | 2009-12-13

Schreibe einen Kommentar