Programm verschnellern



  • kann mir jemand sagen ob und wie ich diese routine schneller bringe?

    alle variablen sind pointer vom typ WORD

    rot1_l = b12+ x+1 + (y+1)*width;
    rot1_h = (rot1_l + 1);
    rot2_l = b12+ (x-1) + (y+1)*width;
    rot2_h = (rot2_l + 1);
    rot3_l = b12+ x+1 + (y-1)*width;
    rot3_h = (rot3_l + 1);
    rot4_l = b12+ (x-1) + (y-1)*width;
    rot4_h = (rot4_l + 1);
    rot_wert = (9*(*rot1_l + *rot1_h) + 3*(*rot2_l + *rot2_h)+ 3*(*rot3_l+*rot3_h) + *rot4_l + *rot4_h)/32;
    

    danke schonmal



  • Erstmal was ist das für eine Algorithmus?



  • Naja, da wird vieles mehrfach berechnet. Vielleicht einige zwischenergebnisse merken und öfters verwenden?
    Aber was mir so auffällt:

    rot1_l = b12+ x+1 + (y+1)*width; 
    rot2_l = b12+ (x-1) + (y+1)*width;
    

    Dann ist doch rot2_l = rot1_l - 2, oder?



  • Ich glaub nichtmal, dass ein WORD-Pointer schneller ist als ein WORD...

    Oder hast du das ausprobiert?



  • Ich glaub nichtmal, dass ein WORD-Pointer schneller ist als ein WORD...
    Oder hast du das ausprobiert?

    hab ich nicht ausprobiert aber das ist ein programm dass jemand anderer angefangen hat und ich hab dran rumbauen dürfen und hab das nicht ändern können (Programm ist ziehmlich gross und sehr verschachtelt)

    Dann ist doch rot2_l = rot1_l - 2, oder?

    stimmt eigentlich muss ich mal ausprobieren danke



  • alle variablen sind pointer vom typ WORD

    Auf alle Fälle kann man

    WORD * temp =  bl2 + x + y * width;
    

    "ausklammern".

    Der rest ist dann (ohne Gewähr)

    rot1_l = temp + 1 + width;
    rot1_h = rot1_l + 1;
    
    rot2_h = temp + width; 
    rot2_l = temp - 1;
    
    rot3_l = temp + 1 - width;
    rot3_h = rot3_l + 1;
    
    rot4_h = temp - width;
    rot4_l = rot4_h - 1;
    

    den Rest sollte ein anständiger Compiler sich selbst sortieren Können - das kommt dann aber schon ziemlich auf Platform und Compiler an.


Anmelden zum Antworten