Multicore-Guide, Teil 2 ist verfügbar
Mitte März hatte ich über eine ausführliche Sammlung gebloggt, in der es sehr ausführlich um das Thema Multicore-Programmierung geht. Und jetzt habe ich dazu passend eine E-Mail des Intel-Service “Software Dispatch” erhalten. Diese Mail verweist nämlich auf den zweiten Teil des großen Multicore-Guides. Darin geht es auf gut 50 Seiten unter anderem um folgende Dinge:
- das richtige Speicher-Management beim Threaden von Anwendungen
und
- der richtige Einsatz der bestehenden Intel-Tools wie Integrated Performance Primitives und Parallel Inspector, Parallel Amplifier und Parallel Composer.
Toll an diesem Programmier-Leitfaden ist die sehr ausführlich Darstellung möglicher Szenarien und wie sich diese richtig behandeln lassen. Dazu gibt es eine Menge nützlicher Diagramme und Code-Beispiele.
Allerdings hat Intel vor den Download dieser digitalen Broschüre eine kleine Registrierung gestellt, die aber nur aus einem Namen und einer E-Mail-Adresse besteht. Anschließend könnt ihr sogar auswählen, welche Themen und Broschüren euch besonders interessieren. Im Falle der Multithreading-Anleitungen solltet ihr “Intel Software Dispatch” anklicken. Viel Spaß beim Lesen!
Ausführliche Übersicht zur Multicore-Programmierung
Zugegeben, es ist auf diesem Blog ein wenig still geworden rund um das Thema Multicore-Programmierung. Das liegt daran, dass ich mich mit dem Thema hier schon ausführlich beschäftigt habe und sich die Themen grade ein wenig verschieben. Mit der Ankündigung des Intel AppUp Center während des letztjährigen Intel Developer Forum rückte das Netbook mit all seinen Facetten in den Mittelpunkt.
Das wird sicherlich auch noch ein wenig so bleiben, was aber nicht bedeutet, dass auf dem Software Dev Blog die parallele Verarbeitung von Programmcode keinen Platz mehr findet. Um dies unmittelbar zu belegen, möchte ich heute auf eine sehr ausführliche Übersicht aufmerksam machen. “Ultimativ” klingt immer ein wenig anbiedernd und angeberisch, aber in diesem Fall kommt der Begriff ziemlich nah an das heran, was die amerikanischen Kollegen unter dem Titel “Intel Guide for Developing Multithreaded Applications” zusammengetragen haben.
Diese wirklich umfangreiche Sammlung betrachtet sämtliche Aspekte der Parallelprogrammierung. Ob das das Multithreaden von Anwendungen im Allgemeinen ist oder spezielle Themen wie die Daten- und Ablaufsynchronisation oder das Speichermanagement – so detailliert konntet ihr euch dem Thema wohl selten widmen. Ok, das Ganze findet zwar auf Englisch statt, aber das sollte doch keine echte Hürde darstellen.
Ach ja, natürlich darf eine genaue Beschreibung sämtlicher Intel-Tools nicht fehlen, wenn es um das Multithreaden von Anwendungen geht. Also so Themen wie Intel Compiler, Parallel Inspector, OpenMP, Parallel Amplifier und viele mehr. Na, dann kann ich euch nur noch “Gut Stöber” wünschen und dass ihr möglichst viele Antworten auf eure parallelen Fragen findet. Die gibt es natürlich auch hier auf dem Software Dev Blog. Probiert doch einfach mal die Suchfunktion aus!
EXASolution ermöglicht Datenanalysen in Quasi-Echtzeit
Über Exasol habe ich in der Vergangenheit ja schon berichtet. Letzte Woche dann wurde aus der Theorie Praxis, und zwar in Form einer Roadshow, auf der Anwender zu Wort und eine kurze Demo zum Einsatz kamen.
Zu den Präsentierenden gehörte Dr. Carsten Bange vom Marktforschungsunternehmen BARC, der eine Menge interessanter Fakten in Sachen Datenaufkommen der Gegenwart und Zukunft zu erzählen hatte. So generierte laut Bange Wal Mart im Jahr 1992 gerade mal ein Terabyte Daten, 2007 waren es schon 1.000 Terabyte – Tendenz stark steigend.
Die Kurzdarstellungen der Herren Alexander Krull von Webtrekk, Michael Kempke von IMS Healthcare und Frank Stoll von Quelle gewährten ebenso interessante Einblicke in ihre Zusammenarbeit mit Exasol und den Einsatz von deren Datenbankanwendung EXASolution. So analysiert IMS beispielsweise mithilfe von EXASolution 960 Millionen Rezeptdaten innerhalb von schlappen 5 bis 12 Minuten. Und auch Webtrekk ermöglicht es Datenanalysen, für die nur wenige Minuten erforderlich sind.
Eines hatten die drei Referenzkunden also gemein: EXASolution hat ihnen bei der Lösung ihrer Probleme wirklich weitergeholfen. Denn neben der wohl recht unproblematischen Implementierung (parallel zur bestehenden Infrastruktur) geht es bei der Exasol-Lösung vor allem um Tempo.
Maxon-Multithreading: Darum ist Cinema 4D so performant
Maxon ist vor allem bei 3D-Designern ziemlich bekannt, denn mit Cinema 4D steht dieser Anwenderschar seit mehr als 15 20 Jahren ein Modeling- und Renderingtool zur Verfügung, mit dem sich hoch komplexe 3D-Gebilde erschaffen lassen. Aber auch Hardware-Redaktionen können mit dem Namen Maxon etwas anfangen: So kann man mit dem kostenlosen Benchmark-Tool CineBench die Rechen- und Grafikleistung eines PCs oder Notebooks testen. Dabei ermittelt CineBench auch die Multicore-Fähigkeiten von Rechnern, indem automatisch alle verfügbaren Prozessorkerne ausgelastet werden. Ein prima Multithreading-Testtool also.
Um Cinema 4D multicore-tauglich zu machen, unternimmt Maxon schon seit vielen Jahren größte Anstrengungen. Das geschieht bereits seit Mitte der 90er Jahre, lange bevor die die ersten Prozessoren mit Hyperthreading auf den Markt kamen. Schon damals galt die Parallelprogrammierung als eine nicht ganz triviale Disziplin, da man vor allem die gemeinsamen Speicherzugriffe und die daraus resultierenden Probleme wie Dead Locks und Data Races in den Griff bekommen musste. Mit Erfolg, wie man an Cinema 4D gut sehen kann.
Doch was hat Maxon alles im Laufe der Jahre getan, damit die Anwendungen auf einem Multicore-System optimal skalieren? Dazu hat Tilo Kühn, Senior Software Developer bei Maxon, eine recht einfache Erklärung parat: Man muss als Entwickler vor allem dafür sorgen, dass die Datenstrukturen von Anfang an so angelegt werden, dass beim parallelen Ausführen der Anwendung die Anzahl der Synchronisation so gering wie möglich ausfällt und es nicht zu Data Races oder ähnlichen Verklemmungen kommen kann. Denn jede Datensynchronisation bedeutet einen Mehraufwand, der den Programmablauf unnötig stört und behindert.
Erfolgsgeschichten in Sachen Intel-Softwaretools
Gerade habe ich auf dem Intel Software Network eine interessante Liste von Anwendungsfällen gefunden, die zeigen sollen, bei welchen Applikationen Intel-Softwaretools erfolgreich zum Einsatz gekommen sind. Dazu gehören unter anderem:
- Die Open-Source-Datenbank MySQL konnte dank der Intel C++ Compiler um 27 bis 42 Prozent schneller gemacht werden. Und zwar sowohl für Pentium-4- als auch Itanium-2-Prozessoren.
- Mithilfe des Intel-Fortran-Compilers gelang es der australischen Swinburne-Universität für Astrophysik, ihre HPC-basierten Anwendungen auf dem zugehörigen Supercomputer nochmals um 22 bis 31 Prozent zu beschleunigen.
- Die Datenbankanwendungen von Oracle laufen sowohl unter Linux als auch unter Windows schneller, da beide Versionen dank der Multicore-Optimierungen der entsprechenden Compiler noch mehr aus der Hardware herausholen.
- Das Erstellen von MP3-Songs mithilfe der Kodierungssoftware Musicmatch Jukebox geschieht dank des Intel C++ Compilers um 37 Prozent schneller als zuvor. Hierzu hat die Profiling-Software VTune Performance Analyzer allerdings auch einen Teil beigetragen.
Neben diesen compiler-basierten Verbesserungen hilft VTune immer mehr Software-Anbietern, ihre Anwendungen für Intel-Prozessoren zu optimieren. Dazu gehört bespielsweise Kaspersky Lab, das seine Antiviren-Software mithilfe des Intel-Tools verbessern konnte. Ebenso konnte Abaqus Inc. dank VTune seiner Simulationssoftware neues Leben einhauchen.
Wer mehr wissen will zu den einzelnen Erfolgsgeschichten, begebe sich auf die zugehörige Webseite. Dort finden sich auch sämtliche Fallstudien in PDF-Form zum Download.
ISC’09: Warum Intel und Nero gut harmonieren
Erst mal gibt’s ein paar Nero-Zahlen: insgesamt 300 Millionen verkaufte Software-Pakete (50 Mio. pro Jahr), 120 Millionen Besucher pro Jahr auf Nero.com.
Die ersten Multithread-Erfahrungen hat Nero mit seiner Brennsoftware vor vielen Jahren gemacht, was der Firma heute noch dabei hilft, neue Software-Titel für die aktuelle Hardware-Generation so zu schreiben, dass sie möglichst gut skalieren.
Nach einer ganzen Menge an marketinglastigen Infos wird’s endlich technisch. Zunächst geht es um die Frage, welchen Herausforderungen sich ein Entwickler gegenüber sieht, wenn er Multimedia-Software möglichst leistungsfähig schreiben will. Dazu gehört unter anderem Realtime-Encoding (und das natürlich parallel) – in möglichst vielen Datenformaten. Aber auch hoch komplexe Codecs, HD-Inhalte, große Datenmengen und DRM-/Sicherheitsaspekte stellen Herausforderungen dar.
Doch wie schafft es Nero, in Multicore-Dimensionen zu denken? Nun, hierfür sind laut Charly Lippoth neue Kenntnisse und ein neues Denken erforderlich. Dazu gehört beispielsweise die Erkenntnis, dass Funktionen möglichst gut auf den vorhandenen Prozessorkernen skalieren müssen.
Aber auch die Programmierung auf Maschinencode-Ebene hilft Nero beim Optimieren der Software, indem beispielsweise SSE-Befehle optimal eingesetzt werden. Ein weiterer Aspekt ist aber natürlich der Einsatz der richtigen Tools.
“Nero unterstützt bereits seit der Version 7 Multithreading”
Das Thema Multithreading steht bei weitem noch nicht überall auf der Agenda, obwohl Mehrkernprozessoren wie der Pentium D den Massenmarkt schon seit etwa vier Jahren bereichern. Umso erstaunlicher ist es, dass nach wie vor nur ein Bruchteil der bestehenden Software zwei oder mehr Prozessorkerne optimal nutzt. Klar, Betriebssysteme wie Windows Vista oder auch das künftige Windows 7 unterstützen von Haus aus Multicore-Plattformen, wirklich effizient skalieren die meisten Softwaretitel aber nicht.
Jedoch gibt es mehr und mehr Ausnahmen von der Regel, wie ich ja hier schon anhand der Beispiele Nik Software, Crytek, Cakewalk und DivX gezeigt habe. Dazu gehört auch Nero, die schon seit der Version 7 ihrer Suiten Multithreading betreibt. Seitdem werden die Software-Titel wie Nero 9 immer weiter optimiert, um eine bestmögliche Ausnutzung der Hardware-Kapazitäten gewährleisten zu können. Hierfür arbeitet Nero sehr eng mit Intel zusammen, um in diesem Bereich optimale Ergebnisse erzielen zu können.
How-to: Deshalb skaliert DivX 7 auf Multicore-Plattformen
Anfang des Monats haben wir über eine Neuerscheinung am Codec-Firmament berichtet, nämlich über DivX Version 7. Das Besondere daran: DivX 7 wurde intensiv auf seine Multicore-Fähigkeiten hin überprüft und optimiert.
Natürlich wollten wir wissen, was DivX alles dafür getan hat, dass Version 7 unter anderem HD-Videos im H.264-Format bei voller Auflösung dekodieren kann, ohne dass es auf einem PC oder Notebook mit Core 2 Duo oder Quad ordentlich ruckelt. Heute kamen die Antworten bei uns an. Und das sind sie (inklusive ihrer Fragen):
Welche Softwaretools kamen zum Einsatz, damit DivX 7 vorhandene Multicore-Plattformen optimal unterstützt?
Antwort: Zunächst einmal haben wir ganz unten angefangen. Soll heißen, dass wir sämtliche DivX-Algorithmen auf Quellcode-Ebene mithilfe des VTune Performance Analyzer auf mögliche Flaschenhälse und damit auf potenzielle Optimierungsarbeiten hin untersucht haben. Das lieferte uns schon mal sehr interessante Anhaltspunkte. Darüber hinaus kamen eigene Tools zum Einsatz, um die Leistungswerte und die Qualität unserer Codecs zu überprüfen.
Skalierende Filter: Nik Software setzt auf Multicore
Wir haben über das Thema schon mal berichtet: Datenparallelität, also das simultane Berechnen von unabhängigen Daten, wie sie beispielsweise in der Bildbearbeitung anfallen. Denn einem Pixelgebilde, das aus mehreren Millionen Bildpunkten besteht, ist es völlig wurscht, ob nun Bildpunkt 1 oder 599 oder 122.921 zuerst oder zuletzt manipuliert wird.
Daher steckt eine ganze Menge Multicore-Potenzial in der Manipulation von Bildern, vor allem dann, wenn es sich um große Digitalfotos handelt. Dabei ist die Parallelisierbarkeit völlig unabhängig vom Format, so dass Bilder im sogenannten RAW-Format genauso von parallelisierten Algorithmen profitieren wie JPEG- oder TIFF-Dateien.
Wie wichtig in solch einem Fall das optimale Zusammenspiel von Hard- und Software ist, hat unter anderem Nik Software erkannt, ein Anbieter von Bildbearbeitungstools, die sich an professionelle Fotografen und ähnliche Menschen richten. Eines der Highlight-Produkte von Nik Software nennt sich Silver Efex Pro. Dabei handelt es um einen Schwarzweiß-Filter für Adobe Photoshop und Apple Aperture, mit dem sich Farbbilder in S/W-Kunstwerke verwandeln lassen. Hierfür setzt Nik Software auf die eigene Manipulationstechnik U Point, die es erlaubt, anhand definierter Bildbereiche (sogenannter Kontrollpunkte) diese separat zu bearbeiten.
Lernen mit Crytek: Deshalb ist Crysis erfolgreich
Anfang Dezember haben Crytek und Ascaron den Deutschen Entwicklerpreis 2008 verliehen bekommen. Acscaron für Sacred 2 – Fallen Angel und Crytek für Crysis. Beiden Spielen liegt eine Menge an Optimierungsarbeit zugrunde. Soll heißen, dass beide Softwareschmieden ihre Erfolgstitel intensiv auf Multicore-Plattformen abgestimmt haben, damit diese bestmöglich auf zwei, vier, acht oder mehr Prozessorkernen skalieren.
In beiden Fällen wollten wir natürlich wissen, welche Anstrengungen unternommen wurden, um die Spieletitel zu parallelisieren. Tja, und heute haben wir Teil eins unserer Fragen zurückbekommen, und zwar von Crysis. Geantwortet hat der Director of Technology höchstpersönlich, Mister Mark Atkinson. Mark zeichnet übrigens verantwortlich für erfolgreiche Titel wie Burnout Revenge und Football Manager 2009, die er vor seiner Zeit bei Crytek mitentwickelt hat.
Software Dev Blog: Mit welchen Tools haben Sie Crysis für Multicore-Plattformen optimiert?
Mark Atkinson: Wir setzen im Wesentlichen eigene Tools ein, um den Quellcode unserer Spieletitel wie Crysis für Multicore-Plattformen zu optimieren. Aber auch externe Anwendungen wie der VTune Performance Analyzer kommen bei uns zum Einsatz. Dieser ist für uns vor allem wegen des Thread Profilers interessant, mit dessen Hilfe wir überprüfen können, in welchem Umfang und in welcher Qualität die Parallelisierung des Spieletitels gelungen ist.

