Anno 1404: Quad-Core

5
Special Falk Jeromin Als bevorzugte Quelle auf Google hinzufügen

In ersten Teil des Anno 1404-Entwicklertagebuchs auf PCGH stellen wir das proprietäre Multi-Threading-System vor, das Related Designs für seine neue 3D-Engine entwickelt hat und das erstmals in Anno 1404 zum Einsatz kommt.

Die Barriere
Burkhard Ratheiser - Related Designs, Leiter R&D-Abteilung Quelle: Burkhard Ratheiser - Related Designs, Leiter R&D-Abteilung Frank Hoffmann - Related Designs, Software-Entwickler Frank Hoffmann - Related Designs, Software-Entwickler Es kann durchaus passieren, dass bestimmte Aufgaben auf die Ergebnisse von vorher ausgeführten Jobs innerhalb einer Queue angewiesen sind. Um dies zu realisieren, kann eine Barriere in eine Job-Queue eingefügt werden. Sie veranlasst, dass alle Jobs, welche sich vor ihr innerhalb der Queue befinden, zuerst abgearbeitet werden. Somit liegen die Ergebnisse für die nach der Barriere folgenden Jobs auf jeden Fall vor und können von diesen weiterverarbeitet werden.

Bedeuten 4 Kerne gleich 4-fache Geschwindigkeit?
Nicht alle Programmteile lassen sich parallel ausführen. So können zurzeit bespielsweise alle Zugriffe auf die Grafikkarte mithilfe der Direct3D-Schnittstelle nicht parallel stattfinden. Dazu kommen vonei­nander abhängige Funktionen, die sich ebenfalls durch Barrieren nur sehr ineffizient darstellen lassen. Aus diesem Grund müssen alle sequenziellen (aufeinander folgenden) Programmteile, welche die Ergebnisse der Jobs weiterverarbeiten, spätestens zu diesem Zeitpunkt fertig abgearbeitet sein. Dies ist dann der wichtige Zeitpunkt der Synchronisierung. Dazu wartet der sequenzielle Teil des Programms auf das Beenden einer bestimmten Job-Queue. Damit diese Wartezeit möglichst klein bleibt, arbeiten die Worker-Threads diese Aufgabenliste bevorzugt ab.

Aufgrund der Tatsache, dass bestimmte Programmteile immer seriell ablaufen müssen, ist der Performance-Zuwachs bei realen Softwareapplikationen mit steigender Anzahl der Kerne limitiert. Er ist also sehr stark davon abhängig, inwieweit die jeweilige Applikation den Programmcode parallelisieren kann - möglichst so, dass auch alle Kerne optimal ausgelastet werden.

Multithreading am Beispiel unserer 3D-Engine
Die Engine versorgt die Worker-Threads parallel mit verschiedenen Aufgaben. Die Engine versorgt die Worker-Threads parallel mit verschiedenen Aufgaben. Es ist wichtig, bei dem Design der Softwareapplikation Elemente zu finden, die sich von Natur aus besonders gut zur parallelen Bearbeitung eignen, beziehungsweise deren Architektur entsprechend anzupassen. Da unsere 3D-Engine vom eigentlichen Spiel abgekapselt ist, läuft sie generell in einem separaten Thread. Um jedoch weitere Prozessorkerne optimal auszulasten, lassen wir innerhalb der 3D-Engine außerdem viele weitere Jobs parallel berechnen.

Aufgaben verteilen
Die parallele Berechnung geht schon beim Empfang der Daten los: Das Spiel schickt der Engine nacheinander, welche Objekte es wie und wo gerendert haben möchte. Zusätzlich hat unsere Engine noch eine eigene Liste von Objekten, deren Position in der Welt statisch ist, beispielsweise Berge, Bäume, Gräser und Gebäude. All diese Objekte werden in Job-Pakete zusammengefasst. Solche Objekte bestehen für die Engine aber tatsächlich aus mehreren Teilobjekten: Basismodell, Effekte, Billboards, kleine Fähnchen, Zierobjekte, Bodenplatten und vieles mehr - alle mit ihren ganz eigenen Parametern. Da die Anno 1404-Welt extrem detailliert ist, sind bei jedem Frame Tausende dieser Objekte auf dem Bildschirm auszumachen. Für all diese Teilobjekte werten die Worker-Threads nun die einzelnen Parameter aus: Sie prüfen, ob ein Objekt überhaupt gerendert werden soll, transformieren es richtig, wählen eine LOD-Stufe (Detailstufe) oder färben es ein. Nachdem nun die Job-Pakete abgearbeitet sind, liegen der Engine riesige Listen mit Objekten vor, welche zunächst sortiert werden müssen. Diese Sortierung sorgt für eine minimale Anzahl an aufwendigen State-Changes (Statusänderungen), die sonst die Grafikkarte ausbremsen. Dazu versorgen wir den Scheduler mit den Objektlisten, damit die Worker-Threads sie sortieren: nach Shader, Textur, ob einzeln oder per schnellem Instancing und so weiter.

Während diese Sortierung läuft, schickt die Engine weitere Aufgaben an den Scheduler: Die Cloth-Simulation für die Fahnen, Stoffe und Schiffsegel eignet sich gut für Multicore-CPUs, da jede Simulation unabhängig berechnet werden kann. Ebenso werden die Animationen und Partikel­effekte multi­threaded kalkuliert und aktualisiert. Für andere Objekte berechnen die Worker-Threads bestimmte Parameter vor, die später an die Shader mitgegeben werden. Selbst die miteinander verschmelzenden Selektionskreise der Schiffe werden parallel zu den anderen Aufgaben durchgeführt. Zu guter Letzt wartet die Engine auf die Fertigstellung aller Jobs und sendet die Daten zur Darstellung an die Grafikkarte.

5
  1. Seite 1 Anno 1404: Multi-Threading
  2. Seite 2 Anno 1404: Quad-Core
    • Kommentare (5)

      Zur Diskussion im Forum
      • Von Zsinj BIOS-Overclocker(in)
        sooo viele sind das auch net, kommt dir nur so vor
        Auf Diablo 3 darf man sicher noch ein ganzes Weilchen warten (2010?) und für meinen teil zieh ich Anno vielem nun mal vor. Bin aber anderen Spielen auch nicht abgeneigt.

        ajo, ist eigentlich für AoE mal was neues angekündigt oder lässt sich MS damit mal so richtig Zeit? Wär mir nämlich neu.
        (Auch bei Freelancer wartet man ja schon sehr lange mal auf einen Nachfolger... hoff mal das es bei AoE nicht soo lang dauert.)
      • Von Zsinj BIOS-Overclocker(in)
        sooo viele sind das auch net, kommt dir nur so vor
        Auf Diablo 3 darf man sicher noch ein ganzes Weilchen warten (2010?) und für meinen teil zieh ich Anno vielem nun mal vor. Bin aber anderen Spielen auch nicht abgeneigt.

        ajo, ist eigentlich für AoE mal was neues angekündigt oder lässt sich MS damit mal so richtig Zeit? Wär mir nämlich neu.
        (Auch bei Freelancer wartet man ja schon sehr lange mal auf einen Nachfolger... hoff mal das es bei AoE nicht soo lang dauert.)
      • Von Kone PC-Selbstbauer(in)
        Zitat von Zsinj
        freu mich schon riesig auf Anno 1404 ich hoff das es da wieder eine schöne Limited Edition gitb

        Und je nach dem wann Anno erscheint gibts bis dahin evtl. noch nen Quadcore die neuen AMD sehen ja schon heiß aus... wenn die halten was sie versprechen und sonst wirds halt nen Intel...

        Bin auf jeden Fall schon mal richtig gespannt auf das neue Anno. Nicht zuletzt weil es da eben mal wirklich eine Engine gibt die Multicore richtig gut unterstützt. Was es ja bisher kaum oder gar nicht gab.
        wie kann man einen post nur so mit smilies verunstalten, da scheint sich einer wirklich zu freuen ^^
        ich für meinen teil warte zur zeit auf diablo 3 und sollte ein neues age of empires kommen würde ich das mit sicherheit jedem anno teil vorziehen ...

        naja meine meinung find das gameplay bei der anno reihe einfach net ganz so prickelnd ...
      • Von Zsinj BIOS-Overclocker(in)
        freu mich schon riesig auf Anno 1404 ich hoff das es da wieder eine schöne Limited Edition gitb

        Und je nach dem wann Anno erscheint gibts bis dahin evtl. noch nen Quadcore die neuen AMD sehen ja schon heiß aus... wenn die halten was sie versprechen und sonst wirds halt nen Intel...

        Bin auf jeden Fall schon mal richtig gespannt auf das neue Anno. Nicht zuletzt weil es da eben mal wirklich eine Engine gibt die Multicore richtig gut unterstützt. Was es ja bisher kaum oder gar nicht gab.
      • Von der_fabi92
        Guter Artikel
        das ist die Zukunft aller PC Programme würde ich meinen.
      • Von falk-falk Kabelverknoter(in)
        Der Artikel gefällt mir und man sieht, dass wenn man sich in der Planung eines Spieles mit dem Thema Multi-Threading und deren optimale Programmierung vernünftig beschäftigt und versucht dieses auch bestmöglich zu implementieren auch erfolgreich umgesetzt werden kann. Bleibt nur zu hoffen, dass andere Spiele auch so gut auf Multi-Threading programmiert werden, aber erstmal abwarten wie Anno 1404 im Test auf mehreren Kernen skaliert. Jetzt freue ich mich noch mehr auf das Spiel...fehlt nur noch mein neuer Rechner, aber mal schauen wie sich die Preise für ein X58 Mainboard in nächster Zeit entwickeln oder wie der Deneb einschlägt
      Direkt zum Diskussionsende
  • Print / Abo
    Apps
    PCGH Magazin 07/2026 PC Games 06/2026 play5 07/2026 N-Zone 06/2026 Linux Magazin 06/2026 LinuxUser 06/2026 Raspberry Pi Geek 07/2026
    PC Games Hardware PC Games Linux Magazin Raspberry Pi Geek Computec Kiosk