O(n)



  • Ich habe eine nette kleine Partikel-Engine geschrieben (und wehe das wird deswegen zu Spiele- und Grafikprogrammierung verschoben) die bei 1 Partikel nicht schneller ist als bei 300 Partikeln aber bei 400 Partikeln auf einmal nur noch halb so schnell ist.

    Woran kann das liegen? Evt. daran, dass nachher (mit steigender Partikelzahl) auf einmal die Variablen nicht mehr alle im Prozessorregister gespeichert werden können und dann auf dem (langsameren) Stack landen?



  • Da ein handelsüblicher PC nur 6 freie Allzweckregister hat, wirds daran nicht unbedingt liegen 😉 Aber es ist nah dran. Wahrscheinlich passen die Daten für 300 Partikel noch alle in den Cache, während bei 400 regelmäßig Daten zwischen Cache und Speicher umgeschaufelt werden müssen. Eine Möglichkeit wär IMHO (bin kein Experte in Cache-Dingen), die Datenmenge, mit der dauernd gearbeitet wird -- also in der innersten Schleife -- zu reduzieren bzw. kompakter zu gestalten. Angenommen deine Partikel sind irgendwelche Klassen, von denen nur 25% der Daten wirklich in der Heavy Rotation sind ... dann reiss die Klasse an der Stelle auseinander. Designtechnisch ist das zwar Mist, aber solang es übersichtlich bleibt und der Performance dient. Nur ein Gedanke ...



  • und wehe das wird deswegen zu Spiele- und Grafikprogrammierung verschoben

    Schöne Worte, nur wo ist hier bitte das *Standard*-C++ Problem?

    Ich verschiebe die Frage nach Rund um, weil dies ein allgemeines Programmierproblem ist.



  • Hat auf jeden Fall nix mit Registern zu tun. Auch nicht mit dem CPU-Cache, weil der (MULTITASKING!) sowieso ständig umgeschaufelt wird.

    Wenn das so wäre, wär der Cache komplett sinnlos. Isser aber nicht. Die Zeitbasis ist einfach eine völlig andere ... Multitasking unterbricht den Prozess vielleicht alle paar Millisekunden, das sind einige Millionen CPU Takte.



  • Die Frage ist eher: Wo klemmts? 🙂

    Ist die Visualisierung das limitierende Element, oder die Berechnung? Ich denke ohne weitere Implementierungsdetails ist es wohl schwer eine ungemutmaßte Antwort zu geben.
    Ob der Cache ausgelastet wird ist ja (über den Daumen gepeilt) nur ein Rechenexempel: Ist die durch den Speicher geschaufelte Datenmenge > als die CPU Cache - Größe.


Anmelden zum Antworten