Studenten der Informatik, aufgepasst: hier gibt’s Wissen pur!

veröffentlicht von am 25. November 2011 (1) Kommentar

Heute ging eine Pressemeldung an diverse Redaktionen, in der folgendes zu lesen steht:

18% mehr Erstsemester in der Informatik – Berufsaussichten weiterhin exzellent

Im Studienjahr 2011 (Sommer- und Wintersemester 2011) haben sich laut Mitteilung des Statistischen Bundesamtes 48.400 Studierende für den Studienbereich Informatik eingeschrieben. Dies entspricht einer Steigerung von 18 % im Vergleich zum Vorjahreszeitraum.

Diese Meldung stammt von der Gesellschaft für Informatik, die verständlicherweise über diese Entwicklung sehr erfreut ist, denn:

“Durch diesen Anstieg werden wir auch deutlich mehr Absolventinnen und Absolventen bekommen, die in Wirtschaft, Wissenschaft und Verwaltung dringend gebraucht werden. Denn nach wie vor ist der Bedarf an gut qualifizierten Informatikerinnen und Informatikern sehr hoch.”

Das sagt GI-Präsident Stefan Jänichen höchstpersönlich, und der wird es ja wohl wissen. Dabei muss allerdings die Frage erlaubt sein, ob die Fachhochschulen und Universitäten dieses Landes auf solch einen Zustrom an Erstsemestlern auch richtig eingestellt sind. Und zwar in Sachen Ausstattung und Lehrinhalte. Zu ersterem können wir natürlich nichts beitragen, zu Punkt zwei aber schon.

Daher folgt an dieser Stelle unser ultimativer Erstsemester-Survival-Kit in Sachen Multicore-Programmierung. Auf dass die Software-Anwendungen der Zukunft auf Rechnersystemen mit 4, 6, 8 und mehr Prozessorkernen verteilt und superskalar laufen. Viel Spaß beim Schmökern!

Grundwissen Multicore-Programmierung

Wie man sich die parallele Datenverarbeitung/Programmierung vorstellen kann

Von Single-Threading bis zur Multicore-Programmierung

In der Parallelprogrammierung steckt die Zukunft!

12 Thesen und Antithesen zur Multicore-Programmierung

Stephen Blair-Chappell über Chancen und Grenzen der Parallel-Programmierung

Know-how: Von Deadlocks und Live locks

Know-how und Programmiertipps: Data Races

Multithreading-Konzepte: OpenMP, APIs und Intel TBB

Tutorials & Regeln

Workshops und Tutorials für Parallelprogrammierer

Beliebte Fehler bei der Parallelprogrammierung

Einsteiger-Kurs: So programmiere ich für Multicore-Systeme unter Microsoft . NET (Teil 1, Teil 2, Teil 3)

Workshop: Alles über .NET-Threads (Teil 1, Teil 2, Teil 3, Teil 4)

Programmiermethoden: Daten- und Aufgabenparallelität

Vier Schritte zum optimierten Multicore-Quellcode

Fünf Multicore-Programmierregeln auf einen Blick

Acht nützliche Tipps zum Parallelisieren 

Mögliche Thread-Modi und deren Folgen

OpenMP-Workshops

Workshop: parallel Programmieren mit OpenMP

OpenMP: fünf Bedingungen für parallele Schleifen

OpenMP: Schleifen anpassen für Multithreading-Ausführung

Buchtipp

Buchtipp: Multicore-Programmierung lernen mit Intel

Kategorien : Multicore Tags : , ,

Hilfreiche und informative Blogs und Webseiten zum Thema Software-Programmierung

veröffentlicht von am 29. September 2011 (0) Kommentare

Es ist ja nicht so, dass es im deutschsprachigen Raum keine vernünftigen Ressourcen in Sachen Software-Entwicklung gibt. Zugegeben, umfangreiche und hochprofessionelle Angebote wie Dr. Dobb’s sind in unseren Breitengraden eher selten. Nichtsdestotrotz gibt es eine Reihe nützlicher Quellen und Blogs, die stets einen Blick wert sind. Ich stelle hier meine ganz persönliche Hitliste vor, die selbstverständlich keinerlei Anspruch auf Vollständigkeit erhebt. Und wer seinen Namen respektive den seines Blogs/ seiner Webseite nicht finden sollte – ein kleiner Kommentar reicht aus, und schon sind Sie drin.

Die Unterseite “Parallel Computing” auf MSDN bietet auf jeden Fall einen guten Einstieg in die Welt der Parallelprogrammierung  – zumindest aus Microsoft-Sicht. Allerdings wurde das Angebot mit Erscheinen von Windows Phone etwas aufgeweicht, aber interessante Links und Artikel findet man dort immer noch. Unser aktuellen Tipp: sämtliche Videos von der Microsoft BUILD 2011.

Die Kollegen des dotnetpro-Entwickermagazins rund um Chefredakteur Tilman Börner sind zwar für ein gutes Heft bekannt, der Online-Auftritt hingegeben ist nicht unbedingt ihre Stärke. Allerdings findet man regelmäßig News aus der Branche, und die Heftvorschauen und das zugehörige Archiv sind auch ganz nett. Und wer sich für ein Testabo interessiert, sollte die Webseite mal ansurfen.

Wo Heise drauf steht, ist Heise drin. Das gilt natürlich auch für die Developer-Sektion, die der Online-Auftritt des Heise Verlags schon seit langem beheimatet. Dort finden interessierte Entwickler regelmäßig News rund um das Thema Software-Entwicklung, und die Grundlagen-Geschichte können sich auch mehr als lesen lassen. Nett sind auch die fünf Entwickler-Blogs, in denen Spezialisten ihres Fachs regelmäßig Einblicke in ihr Seelenleben gewähren.

“Code Inside” nennt Robert Mühsig seinen Blog rund ums Thema Software-Entwicklung, und der Name ist Programm. Denn was Robert hier bloggt, ist aller Ehren wert. Ob das seine persönliche Einschätzung hinsichtlich der Microsoft BUILD ist oder sein Gedanken zu der Zukunft von Javascript – Robert lässt uns daran teilhaben, und das sehr persönlich und sehr regelmäßig. Und richtig toll sind seine Grundlagenartikel zu HTML, ASP.NET und Co.

Wer sich für .NET in seiner Gesamtheit interessiert, kann entweder bei Microsoft stöbern gehen oder dem .NET-Community-Netzwerk DotNet German Bloggers einen Besuch abstatten. Dort werden sämtliche diesem Blognetzwerk zugehörigen Blogs zu einer großen Webseite zusammengefasst, die regelmäßig über die deutschsprachige .NET-Landschaft berichtet. Sehr besuchenswert!

Das Blog von Gordon Breuer aka anheledir trägt zwar in der “Tagline” den Zusatz “Gordon Breuer’s Blog about .NET-Development and the Windows Phone Platform”, aber erstens hat sich das Ganze recht intensiv in Richtung Windows Phone verschoben und findet zudem ausschließlich in Deutsch statt. Schön an dem Blog sind die detaillierten Tipps und Tricks rund um die mobile Plattform von Microsoft. Da sollte für jeden etwas dabei sein. Und wer wissen will, was Gordon sonst noch macht, dem sei seine Portfolio-Übersicht empfohlen.

Wenn sich ein Seite “Der Softwareentwickler Blog” nennt, sollte man auf der richtigen Seite sein, oder?! Und in diesem Fall ist das auch so, wobei sich die Macher des Blogs nicht so ganz entscheiden können, ob sie vorwiegend über Unity3D berichten, oder doch über Windows 8 oder Android 4.0 oder sonst was. Aber zum Stöbern und Querlesen taugt das Weblog allemal.

Codekicker gebührt der krönende Abschluss meiner Rundschau in Sachen nützliche Blogs und Webseiten für Software-Entwickler. “Krönend” zum einen, weil dieser Blog dort aufgeführt wird und zum anderen, weil das Konzept so schlicht wie genial ist: Entwickler helfen Entwicklern. Wenn Sie also eine Frage haben, deren Antwort Sie alleine nicht finden können, ist Codekicker eine gute Anlaufstelle. Denn hier hat der Begriff “Community” noch seine Berechtigung, da die Gemeinschaft sich selbst hilft. Nachahmenswert, wie ich finde!

Kategorien : Allgemein,Multicore Tags : , , ,

Automatisierte Unit-Tests für PHP-Entwickler leicht gemacht

veröffentlicht von am 22. Juli 2011 (0) Kommentare

Ich mag ja amerikanische Überschriften wie “Automated PHP unit testing for lazy coders”. Vor allem dann, wenn die Geschichte hält, was die Headline verspricht. Im konkreten Fall geht es um einen Beitrag, der auf dem appbackr-Blog erschienen ist und den ich Ihnen nicht vorenthalten wollte.

Es verhält sich nämlich so, dass die Leute bei appbackr den Umstieg auf das Yii-PHP-Framework  gewagt haben, und das aus nachvollziehbaren Gründen. Zum einen, weil sie damit in der Lage sind, ihren App-Markt schneller und effizienter zu verwalten, da Yii recht schlank ist und viele nützliche Funktionen wie User Management und Active Record bietet. Außerdem ist der Umgang mit Yii wohl recht einfach.

Darüber hinaus unterstützt Yii das PHPUnit-Framework, mit dem sich Unit-Tests unter PHP durchführen lassen. Das ist vor allem dann wichtig, wenn man wie appbackr eine test-getriebene Software-Entwicklung innerhalb der Firma implementieren, aber auch die vorhandenen Anwendungen und Programme mit Hilfe von PHPUnit überprüfen will.

Allerdings wollten sich die Leute bei appbackr nicht mit manuellen Unit-Tests zufrieden geben, die Yii mit Hilfe des Befehls phpunit [Testordner] vorsieht. Das ist nämlich umständlich, fehleranfällig und nervt die meisten Entwickler. Daher suchten sie nach einer Lösung, wie sich Unit-Tests unter Yii automatisieren lassen.

Tja, und an der Stelle kam und kommt Watchr ins Spiel. Mit diesem Tool ist es nämlich möglich, automatisierte Tests durchzuführen. Soll heißen: sobald auch nur eine Zeile Quellcode verändert wird, springt Watchr an, führt den Test autoamtisch durch und informiert den Entwickler über den Status des Tests. Wow, so einfach?! Na ja, nicht ganz, zwar informiert Watchr über den durchgeführten Test, sagt aber nichts darüber aus, ob der Test mit oder ohne Fehler durchgelaufen ist.

Doch die Jungs und Mädels von appbackr scheinen echt pfiffig zu sein, und haben in Growl das richtige Tool gefunden, um den perfekten Workflow aufzusetzen, der aus der Kette Watchr-PHPunit-Growl besteht. Damit können ihre Entwickler sofort sehen, ob der PHP-Unit-Test erfolgreich war  – oder nicht. Und das sogar inklusive einer aussagekräftigen Fehlermeldung. Schade nur, dass Growl ausschließlich Mac-Entwicklern zur Verfügung steht, da es für Mac OS X programmiert wurde.

Und wie das Ganze in der Praxis funktioniert, verrät der Blogbeitrag auch noch. Aber das sollten Sie sich am besten selbst ansehen..

Kategorien : Allgemein Tags : , ,

Lernen von erfahrenen Programmierern – Teil 2

veröffentlicht von am 28. April 2011 (0) Kommentare

Am Mittwoch erst habe ich Auszüge eines Interviews mit eigenen Anmerkungen veröffentlicht, das die Kollegen des SoftTalk-Blog mit dem Software-Entwickler Asaf Shelly geführt haben. Im ersten Teil ging es vor allem um Fragen wie:

Was war deine größte Herausforderung beim Umstieg auf die Parallelprogrammierung?

Was ist ein guter Tipp für angehende Parallelprogrammierer?

Was bringen Sandy Bridge und AVX für parallel ablaufende Anwendungen?

Der zweite Teil hingegen befasst sich mit Fragen wie:

Welche Programmiermodelle werden sich durchsetzen?

Laut Asafs Aussage werden objektorientierte Programmiermodelle wie C++ zwar weiterhin bestehen, allerdings stoßen sie beim Parallelprogrammieren immer wieder an ihre Grenzen, da es sehr schwer ist, Tasks zu kontrollieren. Asaf glaubt, dass man in Zukunft auf der obersten Abstraktionsebene viel stärker in Tasks denken muss, um dann im weiteren Verlauf mit Objekten arbeiten zu können. Allerdings behebt auch diese Heransgehensweise nicht das Problem immer wieder auftretender Zufallsabstürze, wie man sie beispielsweise bei Borland C++ 5.0 beobachten kann. Fazit: neue Programmiermodelle müssen her! Und Tools wie der VTune Amplifier XE für das Aufspüren potenzieller Abstürze von parallel programmierten Anwendungen.

Welche Programmiersprachen bevorzugst du?

Asaf setzt für seine Programme – der ersten Frage zum Trotz – am liebsten noch auf C und C++ (für den Programmcode) und auf C# (für das Programmieren für Bedieneroberflächen). Zudem lassen sich beide Sprachen mithilfe von .NET-Wrappern prima innerhalb derselben Entwicklungsumgebung wie Visual Studio verwenden.

Was sollte man Studenten empfehlen, die sich mit dem Thema Parallelprogrammierung beschäftigen wollen?

Guter parallel programmierter Code beginnt bereits mit dem Design. Denkt also nicht seriell, sondern parallel! Gute Anwendungen müssen sogar parallel programmiert sein, da der Computer von Haus parallel arbeitet, da er ja auf mehrere Ereignisse aus unterschiedlichen Richtungen gleichzeitig reagieren muss. Um den seriellen Eingabestrang, dem wir immer noch unterworfen sind, aufzubrechen, sollte man laut Asaf mit Threads oder Thread-Pools arbeiten. Parallelprogrammierung beginnt also in den Köpfen und erfordert sehr viel Arbeit und Umdenken beim Einsatz bekannter Modelle.

Das vollständige Interview können Sie auf dem SoftTalk-Blog nachlesen (Teil 1 und Teil 2).

Kategorien : Multicore Tags : , ,

Lernen von einem erfahrenen Programmierer: Asaf Shelly

veröffentlicht von am 27. April 2011 (0) Kommentare

Die lieben Kollegen des SoftTalk-Blog haben einen Intel Black-Belter interviewt, namentlich Asaf Shelly. Asaf Shelly ist Software-Entwickler und arbeitet unter anderem am Thema Parallelprogrammierung. Darüber hinaus wird er auf dem Intel-Entwickler-Event teilnehmen, das am 10. Mai in München stattfinden wird. Grund genug, Teile des Interviews mit Asaf hier wiederzugeben.

Zudem möchten wir Sie an dieser Stelle noch einmal herzlich zu der exklusiven und kostenlosen Entwickler-Veransaltung einladen! Es sind nur noch wenige Plätze frei. Melden Sie sich am besten noch heute an!

Nun aber zu dem Interview: Eine wichtige Frage handelt von den Herausforderungen, mit denen Asaf in Sachen Parallelprogrammierung konfrontiert wurde. Dazu hat er eine ganz einfache Antwort parat: Der Umstieg war die größte Hürde, da es gar nicht so einfach war, parallel und nicht mehr seriell zu denken. So hatte er echte Schwierigkeiten, für kritische Code-Abschnitte einen Mutex anstatt eines Locks zu verwenden. Außerdem musste er beispielsweise erst mal lernen, dass ein Mutex nicht die kritische Sektion, sondern die betreffende Ressource, also die involvierten Speicherbereiche schützt.

Ein sehr schönes Bild hält Asaf auf die Frage bereit, was denn der beste Tipp in Sachen Parallelprogrammierung sei. Sein Antwort: Man muss wie Menschen und nicht wie Maschinen denken. Als konkreten Fall nennt er einen Schnellimbiss, bei dem mehrere Leute an mehreren Verkaufstheken gleichzeitig bestellen, und diese Bestellungen anschließend von verschiedenen Mitarbeitern des Restaurants bearbeitet und an die Kunden ausgegeben werden. Genau so verhält es sich nämlich mit asynchroner Datenverarbeitung mithilfe von Task-Queues, Worker-Threads und vielem mehr.

Interessant sind auch Asafs Antworten auf die Fragen, was Sandy Bridge und AVX für Entwickler tun können. So sieht er in der neuen Core-Architektur eine erhebliche Verbesserung für parallel programmierte Anwendungen, da aufgrund des Core-to-Core-Designs Daten schneller zwischen den einzelnen Prozessorkernen hin- und herfließen können, was die Zahl an Bottlenecks erheblich reduziert.

Als Beispiel führt er die Berechnung einer Aufgabe an, die ohne AVX vier Prozessorkerne mitsamt aller Sycnhronisationsalgorithmen erfordert. Mithilfe von AVX geschieht dies wegen der breiteren Register auf einem einzigen Prozessorkern, was natürlich viel zu besser handhabbar ist. AVX kann laut Asaf in bestimmten Fällen bis zu 16 Prozessorkerne eliminieren.

Die Fortsetzung des interssanten Interviews können Sie am Freitag hier lesen.

Kategorien : Multicore Tags : , ,

Fünf Tipps für das Parallelisieren von Anwendungen

veröffentlicht von am 9. Juni 2010 (0) Kommentare

Gerade habe ich bei den Kollegen des SoftTalk-Blogs eine interessante Top-10-Liste gefunden. Die geht der Frage nach, wie aus seriell programmierten Apps parallel ablaufende Anwendungen werden, die im Zeitalter von Multicore-Systemen möglichst gut skalieren und sämtliche vorhandenen Prozessorkerne für die Ausführung der Software optimal nutzen. Daher folgen jetzt meine fünf Lieblingstipps mit entsprechenden Kommentaren und Verweisen.

Tipp 1: Mithilfe bestimmter Compiler-Einstellungen lassen sich mit ganz wenig Aufwand Programme nahezu doppelt so schnell ausführen. So sorgt beispielsweise der Switch /Qopenmp dafür, dass vorher eingefügte OpenMP-Pragmas vor allem Schleifen parallelisieren. Ok, hierzu ist naürlich schon ein wenig Handarbeit notwendig. Aber es lohnt sich!

Tipp 2: Die registernahe Parallelprogrammierung mithilfe von SSE-Operationen bietet ebenfalls eine ganze Menge an Beschleunigungspotenzial. So lassen sich mit wenigen zusätzlichen Programmcodezeilen beispielsweise Bildverarbeitungsalgorithmen erheblich beschleunigen. Also ohne größeren Aufwand.

Tipp 3: Beim Einsatz entsprechender Optimierungstools wie Intel VTune Analyzer sollte man tunlichst darauf achten, die zu parallelisierende Software nicht vollständig analysieren zu wollen, da VTune beispielsweise einige tausend Events erstellt. Dabei geht es doch meist nur um wenige Flaschenhälse, deren Beseitigung die Anwendung spürbar beschleunigt. Das sind beispielsweise nicht vollständig ausgeführte Funktionen, mangelhafter Datenaustausch zwischen CPU und Speicher, ungewollte Leerläufe und Cache Misses.

Tipp 4: Beim Parallelisieren sollte man auf die wirklich kritischen Bereiche der Anwendung achten. Das sind vor allem die rechenintensiven, zeitraubenden Funktionen und Module, auf die es gilt sich beim Parallelisieren zu konzentrieren. Tools wie der Parallel Amplifier können dabei helfen, genau diese Programmbereiche aufzustöbern. Dabei ist natürlich auch ein wenig Kenntnis bezüglich der verwendeten Algorithmen und ihres Ressourcen-Hungers hilfreich.

Tipp 5: Oberste Priorität sollte sein, dass die parallelisierte Anwendung keine Laufzeitfehler produziert (Stichworte: Race Conditions, Dead Locks, etc.). Auch hierfür empfiehlt sich der Einsatz geeigneter Software-Tools wie des Intel Parallel Inspector, der mögliche Verklemmungen aufspürt, indem das Programm ausgeführt wird und sich so die eventuellen Ergebnisse ermitteln lassen, die zu Laufzeitfehlern führen können.

Kategorien : Multicore Tags : ,