[Rezension] “Anspruchsvolles” JavaScript

December 17th, 2014

Rezension des Buchs: Angus Croll. If Hemingway Wrote JavaScript. No Starch Press. 2014.

Wenn es “anspruchsvolle” Literatur gibt, dann gibt es jetzt auch “anspruchsvollen” Code.

Schriftsteller kann man an ihrem Stil erkennen, das kennen wir alle schon aus der Schule. Der eine beschreibt alle Details einer Szene und ist langatmig, der andere ‘huscht’ nur so durch die Action. Auch unterscheiden wir hier zwischen den Genres, ob jemand realistisch, surreal oder Fantasy schreibt.

Im Gegensatz zu den natürlichen Sprachen, bei denen jedes Individuum seinen eigenen “Ideolekt” hat, wird bei formalen Sprachen von einem normierten Sprachgebrauch ausgegangen. Ist schon jemand mal der Frage nachgegangen, ob es unterschiedliche Stile bzw. Kulturen bei der Programmierung gibt? Also nur innerhalb einer Sprache selbst, nicht zwischen den unterschiedlichen Sprachen oder gar Paradigmen?

Der Autor hat sich überlegt, wie Schriftsteller in JavaScript programmieren würden, wenn sie ihre Eigenheiten aus der Schriftstellerei auf die Programmierung übertragen würden.

Hierzu gibt es 25 Programme von 25 bekannten Schriftstellern/innen, die grundlegende Funktionen, wie z. B. die Fibonacci-Zahlen, die Fakultätsfunktion oder Primzahlen berechnen. Und hier wurde ich sehr vom Autor überrascht, er hat sich hier wirklich tief hineingedacht und auch 25 verschiedene “Programmierstile” “erfunden”. Eigentlich gibt es bei jedem Programm etwas zu entdecken.

Ich kann dieses Buch allerdings nur Programmierern empfehlen, die JavaScript genügend kennen, um die Programme nachvollziehen zu können. Denn einige der Programme sind schon raffiniert, wie z. B. die mit eval und Array.join versteckten Schleifen in Lewis Carrol’s Programm. Auch sollte man genügend Grundinteresse an Literatur haben und evtl. ein paar Schriftsteller schon kennen. Ich muss auch zugeben, dass ich ein paar Schriftsteller nicht kannte. Aber die Schriftsteller werden immer kurz auf 2-3 Seiten vorgestellt und da kann man die Pointen im Code dann schon nachvollziehen. Das Buch regt dazu an, über Programmierstile nachzudenken. Manche der Programme sind wirklich einfach zu verstehen, andere hingegen nur schwer, z. B. das von Douglas Adams.

Ein paar Einschränkung gibt es aber: Der Autor scheint selber Geisteswissenschaftler zu sein und geht sehr unkritisch mit der eigenen Zunft um. Auch ist dieses ganze soziale Trallala der Pädagogen, Soziologen und Gutmenschen in den Beschreibungen der Autoren vorhanden. Er schreibt sogar in der Einführung “Students of the humanities are more likely to have an inductive, open-ended approach to reasoning”. Das ist ganz grober Unfug. Ich selber habe neben Informatik als Hauptfach “Kommunikationsforschung und Phonetik” als Nebenfach an einem geisteswissenschaftlichen Institut studiert, kenne daher beide Welten. Auch hätte sich das in der Praxis bei den Firmen schon längst herumgesprochen und die Stellenanzeigen würden entsprechend aussehen.

Fazit: Ich kann das Buch nur empfehlen. Es ist allerdings ein wenig wie ein Krimi: wenn man die Lösung kennt, ist es nicht mehr so spannend.

P.S. Und einen kleinen Fehler habe ich auch gefunden:

Auf S.96 in Zeile 7 ist der Aufruf von doFissionOn() nicht fett, sondern ausgegraut. Beim ersten Überfliegen des Codes denkt man, das wäre ein Kommentar.

[Rezension] Lesenswert, aber mit Schwächen – Rezension von “Ready Player One”

August 9th, 2014

Rezension des Buchs: Ernest Cline. Ready Player One. Kindle. 2011.


Warnung: Diese Rezension enthält Spoiler.


Das Buch hat fast das Potential ein absoluter Klassiker zu werden in der Größenordnung eines “Hitchhiker’s Guide trough the Galaxy”.

Die geniale Idee des Autors ist es, 80er-Jahre-Nostalgie und ein Massively Multiplayer Online Game (MMO, MMOG) mitander zu verknüpfen und zum Gegenstand eines Romans zu machen.

Hier werden viele Computerspiele, Filme und Muskbands aus dieser Zeit genannt. Bei den Computerspielen finde ich die Auswahl gut, bei den Filmen nicht mehr so und bei der Musik eher nicht. Das ist aber nicht so schlimm und es hätte noch klar 5 von 5 Sternen gegeben.

Aber anscheinend konnte der Autor der Versuchung nicht widerstehen, ein paar gesellschaftskritische Standardthemen einzubauen, die man z. B. aus dem deutschen Fernsehen schon zu genüge kennt. Wie z. B. Umweltverschmutzung, Rassismus (einer der Helden ist eine Afro-Amerikanerin und Lesbe, die in der virtuellen Welt lieber männlich und weiß ist) und gierige Konzerne ohne Moral. Die Rolle des Staates hierbei wird natürlich nicht hinterfragt.

Noch schlimmer ist, das der Protagonist Parzival charakterlich keine Entwicklung durchmacht. Er ist am Ende nur in der virtuellen Welt von Level 3 auf Level 99 aufgestiegen. In der “Real World” macht er irgendwie plötzlich einen Sprung vom dicken Nerd zum Superagenten, der sich in den Hochsicherheitstrakt einer Computerfirma einschleicht und diese ausspioniert. Die Herausforderungen, die der Held überwinden muss, sind hingegen fast alle mit Computerspielen oder Rätseln verbunden. Er muss nicht an sich persönlich arbeiten, sich überwinden oder verbessern. Er löst Probleme, in dem er sein Wissen über die 80er Jahre vergrößert oder in dem er seine Fähigkeiten verbessert, Computerspiele aus den 80ern zu spielen.

Ganz schlimm wird es, als “Og” einfach so erscheint, wie ein “Deux Ex Machina”. An dieser Stelle war ich wirklich enttäuscht. Das ist schummeln, wenn man dem Helden einfach einen übernatürlichen Freund an die Seite stellt.

Alles in allem: lesenswert, aber mit Schwächen.

[Rezension] Inspiration für CUDA-Experten in den Naturwissenschaften

April 20th, 2014

Rezension des Buchs: Wen-Mei W. Hwu. GPU Computing Gems (Emerald Edition). Morgan Kaufmann. 2011.

http://blog.dinkla.net/wp-content/uploads/2014/12/


Dieses Buch ist eine Sammlung von 50 wissenschaftlichen Artikeln über Erfahrungen bei der Verwendung des GPU-Computing in verschiedenen Fachgebieten.

Alle Artikel haben einen ähnlichen Aufbau: nach dem Abstract folgen die theoretischen Grundlagen, die teilweise sehr mathematisch sind. Anschließend werden die Kernel vorgestellt, die dann wiederum optimiert werden. Letztlich wird die Performance mit der CPU verglichen.

Die Autoren stellen hier Techniken vor, mit denen sie erhebliche Performance-Gewinne erreichen konnten. Für mich als CUDA-Entwickler war das an vielen Stellen interessant.

Ich kann dieses Buch aber nicht uneingeschränkt empfehlen. Eine Begeisterung für CUDA und für die naturwissenschaftlichen Algorithmen muss beim Leser vorhanden sein. Wenn man einfach nur die Optimierung mit CUDA lernen will, ist das hier nicht das richtige Buch.

P.S. Das Buch ist schon 2011 erschienen, daher sind ein paar Stellen schon veraltet. Ich bewerte es aber jetzt erst, weil ich erst jetzt alle 50 Artikel gelesen habe.

[Rezension] Nur ganz harten CUDA-Fans zu empfehlen – Rezension von

April 19th, 2014

Rezension des Buchs: Rob Farber. CUDA Application Design and Development. Morgan Kaufmann. 2011.

Ich hatte viele Artikel der Reihe „CUDA, Supercomputing for the Masses“ von Rob Farber auf der Dr. Dobb’s Webseite gelesen und war recht angetan. Das war damals 2009 eine der wenigen Möglichkeiten, etwas anspruchsvolleres über CUDA zu lesen.

Der Titel des Buches erweckte in mir die Vorstellung, dass dieses Buch allgemeine Richtlinien und Prinzipen für die Erstellung von CUDA-Applikationen zum Thema hätte.

Leider ist das Buch aber eher nur eine Ansammlung von Artikeln mit Themen, die den Autoren anscheinend interessiert haben, die aber in einem Lehrbuch über CUDA nichts verloren haben. Machine Learning mag ja ein ganz interessantes Thema sein, aber dann sollte man das Buch auch „Machine Learning with CUDA“ nennen. Der Autor wird sich hier selbst nicht gerecht.

Es gibt dennoch ein paar interessante Teile im Buch. Allerdings muss man sich für diese das Buch nicht extra kaufen, denn sie werden in neueren Büchern besser erklärt. Wenn man aber begeisterter CUDA-Fan ist, kann man das Buch schon lesen und evtl. auch ein paar Anregungen erhalten.

Hier meine Kritikpunkte im einzelnen.

• Kap. 2 ist viel zu sehr mit der Theorie des Machine Learning’s beschäftigt. Funktoren kann man auch bei einfacheren Algorithmen verwenden.

• Makros sollte man nicht in C++ verwenden (S.47)

• Ein #include mitten im Code ist auch übel (S.47)

• Kap. 8 über die Ausführung von CUDA-Code auf x86-Prozessoren bezieht sich auf ein kommerzielles Produkt der Firma PGI. Das ist eigentlich ein Kapitel Werbung und nicht als solche gekennzeichnet.

• Die 4,5 Seiten Beispielcode enthalten sehr viel Mathematik, aber wenig CUDA (S. 57ff).

• In Kapitel 9 wird sehr viel OpenGL-Code abgedruckt. Das interessiert in einem CUDA-Buch nicht.

• Das Framework GPU Ocelot beschreibt der Autor als „popular, actively maintained“ (S.187). Das ist stark übertrieben, es gab pro Jahr einen Vortrag zu diesem Thema und auch nur jährlich ein Release.

• SWAN und MCUDA waren mal Forschungsprojekte und sind laut ihrer Webseiten seit 2010 nicht mehr aktiv.

[Rezension] Bestes CUDA-Buch für Fortgeschrittene

April 16th, 2014

Rezension des Buchs: Shane Cook. CUDA Programming. Morgan Kaufmann. 2012.

Ich empfehle dieses Buch als „zweites Buch“ über CUDA. Wer bereits CUDA-Grundkenntnisse hat, z. B. im Rahmen des Buchs “Cuda by Example” von Sanders und Kandrot, kann hier die nächsten Schritte machen.

Mit CUDA ist es einfach, eine Berechnung um den Faktor 2-5 zu beschleunigen. Man kann relativ einfach erste Erfolge verbuchen. Aber in vielen Fällen wäre auch ein Faktor 9-10 drin (*). Hierzu benötigt man aber Hintergrundwissen und ein paar Optimierungstechniken. Das Ziel dieses Buches ist es, einen CUDA-Anfänger mit einem kleinen Speedup zu einem CUDA-Profi zu machen, der diesen Faktor 10 erreichen kann (S. xiii).

Und genau das ist dem Autor auch gelungen. Dieses Buch enthält sehr viele nützliche Informationen und insbesondere das Kapitel 9 sollte Pflichtlektüre für jeden CUDA-Entwickler sein.

Leider ist für meinen Geschmack die Reihenfolge der Kapitel nicht optimal gewählt. Es werden schon in den Anfangskapiteln sehr spezielle Optimierungen vorgeführt, bevor man in Kapitel 9 einen richtigen Überblick auf die Grundlagen erhält und verschiedene Techniken der Optimierung erfährt. Insbesondere das Fallbeispiel mit AES in Kapitel 7 wirkte hier störend und sollte beim ersten Lesen übersprungen werden und als letztes gelesen werden.

Dann gibt es auch noch ein paar kleinere Mängel: Ich habe z. B. manche Worte nicht im Index gefunden. Auch ist es schlecht, in Büchern Informationen abzudrucken, die schnell veralten können. Hierzu zählen z. B. Installationsroutinen, Kommandozeilenargumente und IDEs. Auch wird mit Platz teilweise recht großzügig umgegangen, ganze Listings abgedruckt. Das Buch könnte 50 Seiten kürzer sein und nichts an Informationen verlieren. Ein wenig störend ist auch, dass die Zeitmessungen von Benchmarks immer nur als Ausgabe von der Kommandozeile direkt in das Buch kopiert und nicht als Tabelle aufbereitet wurden. An manchen Stellen ist das Buch auch schon ein wenig veraltet, so dass manche Informationen nicht mehr stimmen, z. B. das man zwei GPUs zum Debuggen benötigt (S.63).

(*) Anmerkung: Ein Speedup-Faktor 10 ist natürlich nicht immer möglich, denn der hängt von den sequentiellen Abhängigkeiten des Algorithmus ab. Auch gibt es Probleme, die nicht effizient parallelisiert werden können, die sogenannten P-vollständigen Probleme.

[Rezension] Gute Tipps für die Performance-Optimierung

April 1st, 2014

Rezension des Buchs: Nicholas Wilt. The CUDA Handbook. Addison Wesley. 2013.

Dieses Buch richtet sich an fortgeschrittene CUDA-Programmierer und hat seinen Schwerpunkt in der Performance-Optimierung von Kerneln. Hierzu werden auch die technischen Hintergründe beschrieben und sehr viele Ansätze für die Optimierung aufgezeigt. Teilweise geht der Autor auch bis auf den Maschinencode SASS herunter.

Der Autor zeigt sich sehr kompetent und experimentierfreudig bei der Optimierung von Kerneln. Das Buch kann von vielen mit Gewinn gelesen werden.

Ein Nachteil des Buches ist, dass es auch vom Autor als Nachschlagewerk (“comprehensive reference”) konzipiert wurde. Dadurch sind teilweise sehr große Tabellen im Buch vorhanden (S. 93ff, S. 259). Die Dokumentation von CUDA wiederum gibt es als HTML und als PDF, so dass ein Entwickler sehr viel schneller im Web an die gesuchte Information kommt, als in einem Buch zu suchen, siehe z. b. docs.nvidia.com. Ein weiterer Nachteil ist, dass sich APIs und Kommandozeilenoptionen auch ändern können.

Zum Zeitpunkt des Buches war wohl CUDA 5.0 aktuell. Inzwischen gibt es CUDA 5.5 und die Version 6.0 ist in den Startlöchern (als Release-Candidate erschienen).

Gestört hat mich auch, dass die Fehlerabfrage mit dem Makro CUDART_CHECK im Beispielcode immer abgedruckt wurde. Mit cudaGetLastError() könnte man dieses auch nach dem Aufruf ausführen und das Makro an das Ende der Zeile stellen, so dass man nicht ständig drüber hinweg lesen muss.

Das Buch könnte gut und gerne geschätzte 50 Seiten dünner sein, wenn der Autor besser mit dem Platz umgegangen wäre. Der Abschnitt über die Amazon Web Services ist meiner Meinung nach auch für ein Buch über CUDA nicht relevant.

Fazit: Wer CUDA-Kernel optimieren möchte und Ideen für Möglichkeiten dafür sucht, wird in diesem Buch fündig. Es ist allerdings auf dem Stand von Anfang 2013, aber die Grundlagen werden gut erklärt und man kann sich die neusten Informationen über CUDA 6.0 und Maxwell aus dem Web besorgen.

[Rezension] Neuauflage erforderlich: Gutes Buch, aber leider nicht mehr aktuell

March 20th, 2014

Rezension des Buchs: Barbara Chapman, Gabriele Jost, Ruud Van Der Pas. Using OpenMP. MIT Press. 2008.

Dieses Buch erschien 2008 und da war die Version 2.5 von OpenMP aktuell. Damals hätte ich dem Buch vier Sterne gegeben. Einen Stern hätte ich abgezogen, weil es z. B. Fehler im Beispielcode gibt.

Aber die vergangenen 6 Jahre sind im Bereich der parallelen Programmierung eine kleine Ewigkeit. Und hier finde ich es negativ, dass es noch keine 2. Auflage des Buches gibt. Somit sind es nur noch 3 Sterne.

Mit der Version 3.0, die ebenfalls 2008 erschien wurde das „task“-Konstrukt in OpenMP eingeführt. Dieser sollte heute eigentlich der Ausgangspunkt für die Parallelisierung mit OpenMP sein. Das vorherige Pragma „for“ ist nicht effizient komponierbar, d.h. Unterfunktionen dürfen nicht selber auch parallelisieren, weil dann sehr viel mehr Threads gestartet werden, als Prozessoren vorhanden sind. Dieses führt zu oft zu schlechtem Code oder zu schlechter Auslastung.

Und spätestens die Version 4.0, die Mitte 2013 erschien, erfordert eine Neuauflage des Buches. Diese Version unterstützt SIMD-Befehle, benutzerdefinierte Reduktionen und unterstützt auch das GPU-Computing, die Auslagerung von Rechenoperationen auf Grafikkarten.

Ansonsten bildet das Buch eine gute Einführung mit ein paar guten Performancetipps, wie z. B. der Optimierung von Memory-Access-Patterns.

[Rezension] Zur Zeit beste Darstellung von Patterns für Shared-Mutability

March 11th, 2014

Rezension des Buchs: Michael McCool. Structured Parallel Programming: Patterns for Efficient Computation.. Morgan Kaufmann. 2012.

Wenn man ein wenig Systematik in seine parallelen Programmierkünste bringen will, ist das hier das Buch zum Einsteigen.

Die Autoren behandeln die wichtigsten Pattern der thread-basierten Programmierung mit geteiltem Speicher (Shared-Mutability). Andere parallele Modelle, wie z. B. nachrichtenbasierte oder aktor-basierte Architekturen werden nicht behandelt. Das ist nicht unbedingt ein Nachteil, denn die Darstellung der Pattern ist Weltklasse. Die Autoren zeigen, dass sie da sehr kompetent sind und lange selber mit diesen Pattern gearbeitet haben.

Schön an diesem Buch ist, dass sie genau die richtige Mischung zwischen Theorie und Praxis gefunden haben: Für jedes Pattern wird Beispielcode gegeben aber auch asymptotisch analysiert und die möglichen Performancegewinne durch die Parallelisierung abgeschätzt. Sehr gut finde ich die Erklärung mit den vielen einfachen Diagrammen.

Die Autoren arbeiten irgendwie alle für Intel und konzentrieren sich daher auf die Thread Building Blocks (TBB) und auf Cilk Plus. OpenMP und OpenCL werden nur am Rande behandelt. Letzteres ist einer der Gründe dafür, nur vier Sterne für dieses Buch zu geben. Es ist noch verbesserbar. Z. B. werden die denormalized floats am Rande versteckt in Abschnitt 8.12. In Kapitel 6.3 fehlt eine Erklärung oder ein Beispiel für die Konvertierung von Scatter zu Gather.

Ich persönlich kann stark von diesem Buch profitieren. Auch wenn ich viele Pattern schon kannte, hat mich die klare Darstellung beeindruckt. Ich werde die Pattern und Diagramme in meinen Projekten einsetzen.

[Rezension] Empfehlenswerter Klassiker in Neuauflage

February 25th, 2014

Rezension des Buchs: Bjarne Stroustrup. The C++ Programming Language. 4th ed. Addison Wesley. 2013.

Ich hatte damals 1992 schon die zweite Auflage gelesen. Seit dem hat sich sehr viel zum Positiven geändert, sowohl bei C++ als auch bei diesem „Klassiker“. Denn im Gegensatz zur zweiten Auflage, die stellenweise sehr formal wirkte und sehr an eine Programmiersprachenspezifikation erinnerte, hat der Autor das gesamte Buch überarbeitet.

Das Buch deckt einen sehr breiten Teil meines Bedarfs an Informationen über C++ ab. Manche Teile, wie z. B. den über die Metaprogrammierung mit Templates habe ich jetzt beim ersten Lesen nur kurz überflogen. Jedes Sprachkonstrukt und viele Bibliotheksfunktionen werden schön mit Code-Beispielen erklärt. Sehr schön finde ich, dass Code in blau und in anderer Schriftart gedruckt ist. Ich werde das Buch als Referenz und Nachschlagewerk griffbereit halten.

Es ist aber dennoch ein Arbeitsbuch. Man liest es, um sich in C++ einzuarbeiten. Es ist anstrengend, aber diese Arbeit wird mit diesem Buch „versüßt“.

Ich kann nicht beurteilen, ob sich dieses Buch für Einsteiger lohnt, aber für Leute, die richtig in C++ 11 einsteigen wollen, ist es lohnenswert. Für Leute, die nur einen Überblick auf die neuen Features von C++ 11 benötigen, ist das ebenfalls von Bjarne Stroustrup geschriebene „A Tour of C++“ zu empfehlen.

[Rezension] Guter Überblick über C++ 11

February 11th, 2014

Rezension des Buchs: Bjarne Stroustrup. A Tour of C++. Kindle. 2013.

In diesem kleinen Buch gibt der Erfinder von C++ einen Überblick auf die Neuigkeiten von C++ 11 und der STL.

Das Buch ist


Copyright © 2007-2015 Jörn Dinkla. All rights reserved.

###ENDMATTER