Prozessor-Leistung / Energiesparen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Prozessor-Leistung / Energiesparen

    Ich habe ja jetzt schon eine Weile ein schönes MacbookPro. Nun ist es so, dass ich voll fiese numerische Simulationen laufen lasse, die reichlich Zeit brauchen und Ressourcen fressen. Jetzt beobachte ich häufig in meiner Simulation, dass sie am Anfang langsamer läuft und dann, nach einiger Zeit deutlich schneller wird.

    Dafür kann ich mir ein paar Gründe vorstellen:
    1) Der Prozessor ist erst in einer Art Energiesparmodus, trotz Netzteil. Bleibt die Last für N Sekunden bei meinetwegen 1., wird der Takt oder was auch immer hochgefahren.
    Wenn dem so sei: Kann ich das beeinflussen, also schon bei Programmstart? Ich will nicht immer geschätzte 10-20s und gefühlte 5minuten meine Simulation dahinkriechen sehen. Gibt es sowas wie TurnOffPowerSaving()? Oder PushTheTurboButton()?

    2) Irgendwelche Pipelines optimieren sich mit der Zeit für die vielen Floats, habe ich schon oft bei Shadern auf der GPU beobachtet. Da kann man sicher nichts machen.

    3) Es ist mein Code. Kann ich mir nicht vorstellen, weil exakt über das gleiche Array immer wieder iteriert wird, sind kaum if() drin.

    4) Einbildung oder Risse im Raum-Zeit-Kontinuum. Das wäre sehr schlecht.

    Also, hat jemand soetwas auch schon einmal beobachtet? Kann man da was machen?
    Mein typischer Arbeitsfluss ist halt auch >30min programmieren, tw. mit Papier&Bleistift nachrechnen etc, also CPU-Last bei nahe 0% (ich nehm kein Xcode, darum ist es wirklich so niedrig). Dann kurz ausprobieren, meisst nur 2min (um festzustellen, das alles explodiert...). Da nervt es halt immer, wenn ich am Anfang warten muss.
    C++
  • "Irgendwelche Pipelines optimieren sich mit der Zeit für die vielen Floats, habe ich schon oft bei Shadern auf der GPU beobachtet. Da kann man sicher nichts machen."

    Du kannst deinem Programm einen großen speed boost geben, indem du eine Cache - Optimirung durchführst - aus Erfahrung kann ich sagen es hilft enorm.
    Schau dir den L1, L2 und evtl. L3 Cache der CPU an und optimiere deinen Code dafür.
    Dein Programm kann auch am Anfang etwas langsamer laufen, da der Cache sich erst aufwärmen muss.
    Oder auch aus dem Grund, da einige Speicherseiten auf den Hintergrundspeicher ausgelagert werden und erst wieder in den Speicher geladen werden müssen.
    Inos ist ein Gott aus Gothic, dem Spiel.
  • Inos schrieb:

    "Irgendwelche Pipelines optimieren sich mit der Zeit für die vielen Floats, habe ich schon oft bei Shadern auf der GPU beobachtet. Da kann man sicher nichts machen."

    Du kannst deinem Programm einen großen speed boost geben, indem du eine Cache - Optimirung durchführst - aus Erfahrung kann ich sagen es hilft enorm.
    Schau dir den L1, L2 und evtl. L3 Cache der CPU an und optimiere deinen Code dafür.
    Dein Programm kann auch am Anfang etwas langsamer laufen, da der Cache sich erst aufwärmen muss.
    Oder auch aus dem Grund, da einige Speicherseiten auf den Hintergrundspeicher ausgelagert werden und erst wieder in den Speicher geladen werden müssen.

    Ja, Cache-Optimierung bringt sehr viel. Aber: Premature Optimization ist the Root of all Evil :P Optimieren kommt erst, wenns vernünftig läuft.

    Aber es kann ja wirklich daran liegen, dass sich der Cache erst "aufwärmen" muss. Seiten sollten alle im Speicher sein, ich hab das Programm ja gerade erst gestartet. Mhh.
    C++

  • Hatte deinen letzten Beitrag falsch verstanden.

    BTW: Nachladen kann theoretisch schon sein. OS X unterstützt jedenfalls Mapped-Files. Aber angesichts einer kurzen Schleife sollte das nicht so sein.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • zerm schrieb:

    Mh..
    ich hab jetzt fix mit OpenMP ganz primitiv auf Multithreaded gestellt, jetzt läufts natürlich schneller und kommt auch schneller in Fahrt. Mhh..
    Aber ich habe wieder festgestellt, wie schön OpenMP für so Kleinigkeiten ist, und endlich auch im GCC voll unterstützt ;)
    OpenMP gefällt mir auch, ist sehr einfach zu nutzen.
    Falls sich deine Aufgabe sehr gut parallesieren lässt, dann kannst du ja die Grafikkarte benutzen.
    OpenCL eignet sich dafür, aber ist sehr umständlich einzusätzen.
    Inos ist ein Gott aus Gothic, dem Spiel.
  • zerm schrieb:

    Aber ich habe wieder festgestellt, wie schön OpenMP für so Kleinigkeiten ist, und endlich auch im GCC voll unterstützt ;)

    Wann haben sie das denn gemacht? Ist das irgendwo dokumentiert? Ist das generell so?

    Edit: Es ist noch zu früh. Hab' mich verlesen. GCC nicht GCD.
    * Kann Spuren von Erdnüssen enthalten.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von NSObject ()

  • Markus Müller schrieb:

    Was sagen denn Instruments und Shark?

    Mhh, muss ich mal machen, wäre sicher auch so mal ganz gut.

    Inos schrieb:

    Falls sich deine Aufgabe sehr gut parallesieren lässt, dann kannst du ja die Grafikkarte benutzen.
    OpenCL eignet sich dafür, aber ist sehr umständlich einzusätzen.

    Darin bin ich doch Profi ;) Aber bis alles so läuft, wie es soll, bleibe ich auf der CPU, weil es noch erträglich von der Geschwindigkeit ist, und ich so n bisschen einfacher debuggen kann.
    C++