Nachdem die Entwicklung von Moonspell in den letzten Jahren aus meiner Sicht eher zu wünschen übrig ließ, halte ich es jetzt für notwendig, diesen Hinweis auszusprechen: Sie haben es wieder geschafft! Fast ist die Veröffentlichung von “Night Eternal” an mir vorbeigegangen, doch am Montag stand sie dann vor mir im CD-Regal und ich erinnerte mich an ein Review, was ich vor kurzem las. Und dieses Review lobte das Album in den höchsten Tönen.
Was soll ich sagen? Es stimmt! Es ist großartig! Es geht stellenweise total back to the roots. Klar, man mag mir nun vorwerfen, musikalisch sollte sich so ne Band ja weiterentwickeln und bla, bla, bla, aber die machen jetzt endlich wieder, was sie wirklich können! Mit Songs, die ne klare Linie haben, voll-auf-die-Fresse-Momenten (Night Eternal) mit Riffs, für die mir stellenweise auch einfach kein anderes Wort mehr einfällt als “catchy” (Shadow Sun), Gänsehaut-Hymnen-Charakter (Scorpion Flower) und vielem, vielem mehr.
Als alter Moonspell-Fan (oh Gott, ich hör die Band seit mittlerweile 14 Jahren ;)), der sich über dieses Album einfach nur freut, halte ich es für meine Pflicht, an dieser Stelle eine deutliche Empfehlung auszusprechen: Kaufen! Kaufen! Kaufen! Großartig! :)
Eigentlich…bin ich ja Fan des Dörflichen. Aber die Dorfjugend, die gehört dann wohl doch eher nicht dazu. Frei nach dem Motto: “Wohl eher kaum!”
Eine kurze Erklärung zuerst: Die SPEs des Cell-Prozessors haben jeweils einen recht kleinen eigenen Speicher von 256KB. Möchte man Daten aus dem Hauptspeicher nutzen, so muss man sich diese per DMA-Zugriff holen. Eine andere Möglichkeit, die das ein wenig versteckt und durchaus einen Komfortgewinn bedeutet, ist der Software-Managed Cache aus dem SDK. Dieser Cache kann mit entsprechenden Parametern wie Linesize, Assoziativität und Anzahl der Cachesets parametrisiert und anschließend etwa mit cache_rd() und ähnlichem verwendet werden.
Nun handelt es sich bei den relevanten Caches bei dem gegebenen Programm (ein Raytracer) einmal um einen Node-Cache für Knoten des BIH-Baums und einmal um einen Dreiecks-Cache. Das Phänomen, welches auftrat, war, dass nach der Kommunikation mit dem VE-Framework bei dynamischen Szenen das Verschieben eines Objekts das komplette (aber deterministische und reproduzierbare ;)) oder teilweise Zusammenbrechen der Dreiecksnetze der Objekte der Szene zur Folge hatte. Viele Dinge wurden als Fehlerquelle ausgeschlossen, so etwa die Transformation der Dreiecke (ich dachte an ein Problem mit Triangle Strips) nach dem Restore der serialisierten Daten und der Aufbau der Bounding Interval Hierarchy. Die nächste Idee ging dann zum Caching. Tja, die Dreiecke und die Nodes wurden ja gecacht. Vermutung: Der Cache bekommt aus irgendeinem Grund nicht die richtigen Daten. Idee: Den Cache komplett löschen bzw. invalidieren. Problem: Komisch, das Cell SDK 3.0 bietet überhaupt keine Funktion zum invalidieren des Caches! Da aber eine komplette Neuinitialisierung der SPEs inklusive neuem Starten der Threads und entsprechend natürlich folgendem Löschen der Caches das Problem löste, wurde alles komplett wunderbar gerendert.
Die Problemstellung: Wie invalidieren wir den Cache? Also die entsprechenden Cache-Header-Files mit dem Kollegen (welcher der Hauptproblemlöser war ;)) analysiert und festgestellt, dass man am besten einfach invalidiert, indem das Verzeichnisarray genullt wird. Dafür benötigten wir natürlich die Namen dieses Arrays. Ich möchte kurz abkürzen, um nicht erläutern zu müssen, wie wir auf den Namen kamen, jedenfalls ist der Name des Verzeichnisarrays <Cachename>_cache_dir (wenn ich es aus der Erinnerung richtig weiß). Dieses kann man mit Kenntnis von Anzahl der Sets und Assoziativitätsgrad nun per memset() einfach komplett mit Nullen füllen (am Besten natürlich nur, wenn man weiß, dass es nötig ist, in diesem Fall also nur, wenn die Dreiecke sich wirklich geändert haben) und schwupp, das Problem ist gelöst!
Vielleicht hilft das ja dem ein oder anderen, ich jedenfalls hätte mich sehr gefreut, denn so habe ich an dem Problem durchaus mehr als nur ein paar Stunden verbummelt ;)
Recent Comments