Speicher schnell durchsuchen



  • Hallo,

    ein Vergleich mit 0 geht i.d.R. schneller als ein Vergleich mit einem berechneten Ausdruck. Formulier also Deine Schleifen entsprechend:

    z.B.:

    for (i = rounds; i ; i--)
    

    Und hier

    for (f = mem / sizeof (*integer) / 2; f; --f)
    

    Sinnvoll kann aber auch sein, den array zugriff durch einen pointer zu realisieren statt dem index. Das hängt davon ab, wie gut Dein compiler optimieren kann.

    mfg Martin



  • sehe ich das richtig oder geht deine schleife bis zur mitte und nimmt bei jedem durchlauf nen wert von vorne und hinten? falls dem so ist, machst dir damit die performance kaputt. loop unrolling schaut anders aus. wenn du nicht weißt wie das geht überlässt du es am besten dem compiler.

    @edit: natürlich nur falls das array größer als ne cache line ist, bzw. nicht auf einmal in den cache geladen werden kann 🤡



  • mgaeckler schrieb:

    Sinnvoll kann aber auch sein, den array zugriff durch einen pointer zu realisieren statt dem index. Das hängt davon ab, wie gut Dein compiler optimieren kann.

    Im AMD Optimization Manual oder wie das heißt, steht's andersrum. Der Indexzugriff kostet keine Zeit. Aber kann bei typischen Anwendungen den Registerdruck senken. Dein Informationsstand ist embedded oder 10 Jahre alt, fürchte ich.



  • @mgaeckler
    Habs getestet und geht mit gcc nicht schneller. Ich vermute er hat das selbst schon optimiert. Delphi macht das schon seit mindestens 2001 das es Schleifen nach Möglichkeit rückwärts zählt.

    @_--
    Hab diese Strategie durch ausprobieren gefunden. Einfach von vorne nach hinten durchgehen ist auf den beiden Rechnern die ich benutze langsamer. Wenn man ein GB durchsucht spielt der Cache wohl kaum mehr eine Rolle sondern ehr die refresh Zeiten der Speicherchips. Wenn ich wüßte wie das Memory Interleaving genau organisiert ist, könnte man vielleicht noch günstiger auf den Speicher zugreifen.

    Gruß
    Thomas



  • TomZeh schrieb:

    Hab diese Strategie durch ausprobieren gefunden. Einfach von vorne nach hinten durchgehen ist auf den beiden Rechnern die ich benutze langsamer.

    also ich will ja nicht ungläubig sein und da ich gerade keine lust hab das zu testen glaub ich dir das jetzt einfach mal 🙄



  • evtl. findet sich ja jemand der mal schnell nen testcase hinstellt 😋



  • Rückwärtszählen bei beim Zugriff auf Daten killt dir aber jeden Cachezugriff.



  • Genmutant schrieb:

    Rückwärtszählen bei beim Zugriff auf Daten killt dir aber jeden Cachezugriff.

    gut möglich, daran hab ich auch schon gedacht... ist noch ein überbleibsel aus meiner js zeit, da wars immer etwas schneller evtl. werd ich mich da mal umgewöhnen müssen.



  • volkard schrieb:

    mgaeckler schrieb:

    Sinnvoll kann aber auch sein, den array zugriff durch einen pointer zu realisieren statt dem index. Das hängt davon ab, wie gut Dein compiler optimieren kann.

    Im AMD Optimization Manual oder wie das heißt, steht's andersrum. Der Indexzugriff kostet keine Zeit. Aber kann bei typischen Anwendungen den Registerdruck senken. Dein Informationsstand ist embedded oder 10 Jahre alt, fürchte ich.

    Stimmit. Hab mal ein bischen damit rumgespielt und in der Tat keine signifikanten Veränderungen festgestellt. Naja man wird halt alt.

    mfg Martin



  • ?hm? schrieb:

    evtl. findet sich ja jemand der mal schnell nen testcase hinstellt 😋

    hat sich noch keiner gefunden 😞


Anmelden zum Antworten