Measuring traffic on the PCI Express Bus (PCIe)

April 24th, 2015

During my talk at the parallel 2015 conference i was asked how one can measure traffic on the PCI express bus. For multi GPU computing it is very important to control the amount of data exchanged on the PCIe bus.

You need the  Intel Performance Counter Monitor (https://software.intel.com/en-us/articles/intel-performance-counter-monitor). Compile it and copy pcm-pcie.exe into a new directory.

Then read this helpful article http://www.correlsense.com/blog/intel-performance-counter-monitor/ of how to obtain the missing WinRing dlls and drivers. Copy them into the same directory, start the cmd.exe as an admin and there you go.

Now you can analyse the traffic on the PCI bus.

C:xyzIntelPerformanceCounterMonitorV2.8bin>pcm-pcie.exe
DEBUG: Setting Ctrl+C done.

Intel(r) Performance Counter Monitor: PCIe Bandwidth Monitoring Utility

Copyright (c) 2013-2014 Intel Corporation
This utility measures PCIe bandwidth in real-time

PCIe event definitions (each event counts as a transfer):
   PCIe read events (PCI devices reading from memory – application writes to disk/network/PCIe device):
     PCIePRd   – PCIe UC read transfer (partial cache line)
     PCIeRdCur* – PCIe read current transfer (full cache line)
         On Haswell Server PCIeRdCur counts both full/partial cache lines
     RFO*      – Demand Data RFO
     CRd*      – Demand Code Read
     DRd       – Demand Data Read
     PCIeNSWr  – PCIe Non-snoop write transfer (partial cache line)
     PRd       – MMIO Read [Haswell Server only: PL verify this on IVT] (Partial Cache Line)
   PCIe write events (PCI devices writing to memory – application reads from disk/network/PCIe device):
     PCIeWiLF  – PCIe Write transfer (non-allocating) (full cache line)
     PCIeItoM  – PCIe Write transfer (allocating) (full cache line)
     PCIeNSWr  – PCIe Non-snoop write transfer (partial cache line)
     PCIeNSWrF – PCIe Non-snoop write transfer (full cache line)
     ItoM      – PCIe write full cache line
     RFO       – PCIe parial Write
     WiL       – MMIO Write (Full/Partial)

* – NOTE: Depending on the configuration of your BIOS, this tool may report '0' if the message
           has not been selected.

Starting MSR service failed with error 2 The system cannot find the file specified.
Trying to load winring0.dll/winring0.sys driver…
Using winring0.dll/winring0.sys driver.

Number of physical cores: 6
Number of logical cores: 12
Number of online logical cores: 12
Threads (logical cores) per physical core: 2
Num sockets: 1
Physical cores per socket: 6
Core PMU (perfmon) version: 3
Number of core PMU generic (programmable) counters: 4
Width of generic (programmable) counters: 48 bits
Number of core PMU fixed counters: 3
Width of fixed counters: 48 bits
Nominal core frequency: 3500000000 Hz
Package thermal spec power: 140 Watt; Package minimum power: 47 Watt; Package maximum power: 0 Watt;
2 memory controllers detected with total number of 5 channels.

Detected Intel(R) Core(TM) i7-5930K CPU @ 3.50GHz “Intel(r) microarchitecture codename Haswell-EP/EN/EX”
Update every 1 seconds
delay_ms: 84
Skt | PCIeRdCur |  RFO  |  CRd  |  DRd  |  ItoM  |  PRd  |  WiL
0    4236         576    5980 K  1536 K     48    3456    7116
———————————————————————–
*    4236         576    5980 K  1536 K     48    3456    7116

[Rezension] OO mit JavaScript hervorragend erklärt

April 4th, 2015

Rezension des Buchs: Nicholas C. Zakas. The Principles of Object-Oriented JavaScript. No Starch. 2014.

JavaScript hat einen Prototyp-basierten Ansatz zur Objektorientierung. Damit unterscheidet es sich stark von den üblichen objektorientierten Programmiersprachen, wie z. B. Java, C++ und Ruby. Denn bei diesen wird der Code mit Hilfe von Klassen und deren Hierarchien strukturiert. Diese Klassen und Hierarchien sind bei JavaScript bisher aber nur über kleine Umwege zu erreichen.

Daher muss man auch als gestandener OO-Entwickler bei JavaScript erst wieder lernen, wie man größere Applikationen mit Klassen, Funktionen, Modul-Objekten und Mixins strukturieren kann.

In diesem kleinem Buch erklärt der Autor mit sehr viel Fachkenntnissen, wie die traditionelle Objektorientierung auch mit JavaScript (ECMAScript 5) umgesetzt werden kann. Der Autor konzentriert sich nur auf diese “Lücke”, andere Themen werden in diesem Buch nicht behandelt. Es ist kein allgemeines Lehrbuch über die objektorientierte Programmierung. Für das Verständnis sind Grundkenntnisse in OO und in JavaScript notwendig.

Ob dieses Buch auch nach dem Erscheinen von ECMAScript 6, das für Mitte 2015 angekündigt wurde, noch lesenswert ist, kann ich noch nicht beurteilen. Momentan aber ist es eine der besten Quellen, um JavaScript zu verstehen.

Trying out next-gen JavaScript, ECMAScript 6

April 4th, 2015

With Babel (https://babeljs.io) you can test many features of the upcoming next version of JavaScript called ECMAScript 6 (https://en.wikipedia.org/wiki/ECMAScript) now.

I made some tests and prepared a grunt package (http://gruntjs.com) and made in available on github, see https://github.com/jdinkla/ecma6-babel-test.

[Rezension] Java MapReduce mit Hadoop

March 27th, 2015

Rezension des Buchs: Donald Miner, Adam Shook. MapReduce Design Patterns: Building Effective Algorithms and Analytics for Hadoop and Other Systems. O’Reilly. 2012.

MapReduce ist ein “Korsett” und zwingt den Entwickler in enge Grenzen. Daher macht es Sinn, dieses Buch zu lesen, damit man schnell die üblichen Tricks und Kniffe kennenlernt. Ähnlich ist es ja beim Lernen von anderen Paradigmen auch, wie z. B. Devide-and-Conquer oder Rekursion. Man begreift das allgemeine Prinzip schnell, man muss aber lernen, wann und wie man es am besten einsetzt.

In diesem Buch werden typische Anwendungsfälle für Hadoop in Java MapReduce implementiert. Dabei liegt der Schwerpunkt nicht auf den eigentlichen Entwurfsmustern (“design patterns”), wie der Titel des Buches suggeriert, sondern auf den konkreten Implementierungen. Wer nur an der Implementierung dieser Pattern interessiert ist, wird mit diesem Buch gut bedient. Man sollte aber vorher schon erste Erfahrungen mit Hadoop gemacht haben und Java gut kennen.

Wer allerdings wirkliche “Entwurfsmuster” für beliebige MapReduce-Frameworks sucht, wird mit diesem Buch nicht 100% glücklich. Die im Untertitel erwähnten “other systems” kommen definitiv zu kurz. Auch wer Hadoop mit Pig, Hive oder Apache Crunch benutzt kann sich das Lesen des Buches evtl. sparen oder nur schnell durchfliegen. Die langen Java-Listings kann man sich dann nämlich sparen.

Wer allerdings wirklich wissen will, was hinter Pig passiert, sei es bei der Fehlersuche oder bei Performance-Problemen, der kann sich hier schon den einen oder anderen Tipp anlesen.

[Rezension] Gute Einführung in C++ AMP

March 16th, 2015

Rezension des Buchs: Kate Gregory. Ade Miller. C++ AMP: Accelerated Massive Parallelism with Microsoft Visual C++. Microsoft Press. 2012.

Dieses Buch ist eine gute Einführung in die Programmierung mit C++ AMP. Leider ist das Buch zum Zeitpunkt der Rezension das einzige Buch über C++ AMP, so dass ich es nur mit anderen Büchern über CUDA und OpenCL vergleichen kann. Aber den Vergleich hält das Buch stand und hat sich solide 4 Sterne verdient. Die Reihenfolge fand ich in Kapitel 2 ein bisschen ungünstig, aber das hat sich im nächsten Kapitel wieder gelegt. Kapitel 2 sollte man beim ersten Lesen überspringen und erst am Ende lesen. Denn Kapitel 2 ist über das schon etwas kompliziertere n-body Problem und auch noch mit DirectX-Grafik. Das ist didaktisch nicht klug, das am Anfang zu behandeln. Dann gibt es da noch ein paar Kleinigkeiten, wie z. B. das ständig std::vector<> und std::shared_ptr<> im Programmcode geschrieben wird. Mich stört das “std::”.

Aber alles in allem ist man nach diesem Buch bereits ein fortgeschrittener GPU-Programmierer, der schon ein gutes Verständnis von der Thematik hat. Notwendig sind Vorkenntnisse in C++, STL und der parallelen Programmierung. Die Beispielprogramme wurden an VS 13 angepasst.

[Rezension] Das beste Buch über OpenCL 1.x

February 23rd, 2015

Rezension des Buchs: Matthew Scarpino. OpenCL in Action: How to Accelerate Graphics and Computation. Manning. 2011.

Für mich persönlich ist dieses das beste Buch, um OpenCL zu lernen. Es ist eine hervorragende Einführung in OpenCL 1.1.

Das Besondere an diesem Buch ist, das der Autor versucht, die Programme wirklich zu erklären. Man erfährt die Gründe für seine Design-Entscheidungen. Das Lernen von OpenCL ist keine so einfache Sache. Bevor man zum Programmieren kommt, muss man schon eine Menge Infrastruktur beherrschen. Meiner Meinung nach löst Matthew Scarpino dieses Problem hervorragend.

Die Beispielprogramme hingegen sind aus verschiedenen Themenbereichen, gut kommentiert und teilweise sehr mathematisch. Das störte mich aber nicht, denn OpenCL wird auch oft im Embedded Bereich eingesetzt, der oftmals sehr mathematisch ist, wie z. B. die Signal- oder die Bildverarbeitung.

Das Buch hat inzwischen allerdings schon ein paar Jahre auf dem Buckel. Die Performancetipps müssten inzwischen wohl auf den Prüfstand. Und auch das Kapitel über die Schnittstellen zu anderen Programmiersprachen, Aparapi, JavaCL, PyOpenCL sind wahrscheinlich etwas veraltet.

Aber das Buch enthält so viel Wissen über OpenCL 1.1, so dass es auch heute noch (Februar 2015) *DAS* Buch zum Einstieg in OpenCL ist.

P.S. Ich habe als technischer Editor an diesem Buch mitgearbeitet (siehe S. xvii).

[Rezension] Fortgeschrittenes ‘git’

January 29th, 2015

Rezension des Buchs: Mike McQuaid. Git in Practice. Manning. 2014.

Ich benutze git zwar schon ein paar Jahre, wollte aber mehr Hintergrundwissen haben und komplexere Abläufe kennenlernen. Das ist dem Buch zum einen gelungen, trotzdem habe ich irgendwie das Gefühl, das das nicht alles gewesen sein kann. Als Beispiel wollte ich wissen, wie man große Dateien endgültig aus dem Repository und aus der Historie entfernen kann. Auch wird “git replace” nicht erwähnt.

Nun gut, ich habe trotzdem viel aus diesem Buch gelernt und die Sachverhalte werden gut beschrieben und erklärt. Leute mit Grundwissen über git können dieses Buch mit Gewinn lesen. Experten werden aber nicht davon profitieren.

[Rezension] Zu kurzer Einstieg

January 27th, 2015

Rezension des Buchs: Michael P. McGrath. Understanding PaaS. O’Reilly. 2012.

Es ist ein sehr kleines Büchlein über die Grundlagen des Cloud Computings. Es kann gelesen werden, um sehr schnell in die Thematik einzusteigen. Es ist eher für Entwickler geschrieben, als für CEOs.

Die Beispiele mit OpenShift sind leider schon etwas veraltet, geben aber die ungefähren Arbeitsschritte wieder.

Also nur als ersten Schritt lesen. Und es ist sehr kurz. Aber das Geschriebene ist gut.

[Rezension] Solide Optimierungstipps

January 26th, 2015

Rezension des Buchs: Gregory Ruetsch, Massimiliano Fatica. CUDA Fortran for Scientists and Engineers. Morgan Kaufman. 2013.

Beim Stöbern in diesem Buch habe ich gesehen, dass die Autoren wertvolle Optimierungstipps geben. Da bin ich neugierig geworden. Ich selber bin kein Fortran-Programmierer, kann daher das Buch aus dieser Perspektive nicht beurteilen. Aber für mich C++-Entwickler bietet dieses Buch viele wertvolle Hinweise über die Optimierung von CUDA-Kerneln. Als Beispiel kann hier die mathematisch präzise Analyse der “Fused Multiply Add (FMA)”-Operation in Abschnitt 5.2.1 genannt werden. Das Buch wurde von zwei sehr kompetenten Autoren geschrieben und ist sehr solide. Die Autoren arbeiten beide bei NVIDIA, verfügen daher über Insider-Informationen.

Das Buch ist leider schon ein wenig veraltet, die aktuelle Maxwell-Architektur ist erst 2014 erschienen. Im Buch wird die Kepler-Architektur bis zur Compute Capability 3.5 behandelt.

Einen Punkt Abzug gibt es aber doch, weil im Anhang auf 61 Seiten Source-Code ausgedruckt wurde. Das ist doch heute nicht mehr zeitgemäß, den kann man sich herunterladen.

[Rezension] Die wunderbare Welt von P2P

January 21st, 2015

Rezension des Buchs: Jeffrey Tucker. Bit by Bit: How P2P Is Freeing the World. Liberty.me. 2015.

In diesem Buch erläutert der Autor die weltanschaulichen Hintergründe von Peer-to-Peer-Netzwerken und von Bitcoin. Der Autor konzentriert sich hier auf seine philosophische und ökonomische Sichtweise, dem Libertarismus, einer Marktwirtschaft mit Privateigentum ohne Staat.

P2P-Netzwerke ermöglichen die “Equipotency”, d.h. die gleiche Verteilung von “Power” an alle Teilnehmer. Der Autor bringt hier ein Beispiel, das mit Bitcoin digitaler Handel auch für ärmere Menschen möglich ist, die keine Kreditkarte bekommen oder in einem Land ohne Kreditkartensystem leben.

Aufgrund der dezentralen Organisation lassen sich P2P-Netze nicht einfach verbieten oder zensieren. Sie sind daher nach Meinung des Autors ein Garant der persönlichen und der wirtschaftlichen Freiheit.

Schön zu lesen ist die Analyse von Bitcoin als Währung aus Sicht der österreichischen Schule der


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

###ENDMATTER