Wissenschaftlicher Bereich
Echtzeitverarbeitung von Singles und Koinzidenzen, Positronen-Emissions-Tomographie
Kurzbeschreibung
Für den Einsatz von neuartigen PET-Scannern, die im Rahmen des HYPMED Projekts entwickelt werden [1], hat sich das Institut für Experimentelle Mole-kulare Bildgebung (ExMI) zum Ziel gesetzt, für seine Singles- und Koinzidenz-verarbeitung softwarebasierte Ansätze zu nutzen [2,3]. Im Gegensatz zu herkömmlichen hardwarebasierten Implementierungen ermöglicht dies ein einfacheres Prototyping und das Abrufen von Scannerrohdaten, die sonst verloren gehen würden. Das Erreichen echtzeitfähiger Verarbeitungsdurchsatzraten wird jedoch mit den wachsenden Datenströmen der Scanner und der zunehmenden Komplexität moderner Positionierungsmethoden [4] zu einer Herausforderung.
Das am ExMI entwickelte Anwendungsframework nutzt das Message Passing Interface (MPI), um eine verteilte Verarbeitung eingehender Scannerdaten zu ermöglichen. Während mit der aktuellen Implementierung bereits Durchsatzraten von über 500 MB/s erreicht werden können, ist eine Skalierbarkeit auf größere Detektorsysteme wünschenswert. Da die Eingabe der Anwendungsdaten durch die physische Verbindung zwischen Erfassungsgerät und Steuerungs-PC begrenzt ist, wird eine Durchsatzrate von 1-2 GB/s angestrebt.
Für die Performanceanalyse gaben Hardware Performance Counter Informationen, die während der Programmausführung gesammelt wurden, Einblick in das dynamische Anwendungsverhalten. Wir konnten die Lokalität von Speicherzugriffen optimieren, da die gesammelten Metriken hohe Wartezeiten aufgrund von Data Translation Lookaside Buffer (TLB) Cache Misses aufzeigten. Da im Data TLB Cache Einträge für 4 KB große Seiten gespeichert werden, überschritten Speicherzugriffe diesen Bereich. Durch Sortierung einer kritischen Datenstruktur vor der Verarbeitung ihrer Einträge konnten Skalierbarkeit und Durchsatzraten deutlich verbessert werden.
Die Performance Counter Daten zeigten zusätzlich niedrige Vektorisierungsraten in der Kernelfunktion. Obwohl innerhalb der Kernelschleife ein Speicherlayout einer Struktur von Arrays verwendet wurde, erwiesen sich die Speicherzugriffe als unregelmäßig. Die Verwendung eines Arrays von Strukturen hingegen führte zwar zu einer skalaren Codeausführung, wirkte sich jedoch positiv auf die Ausführungszeit aus.
Ergebnisse
Ausgangspunkt unserer Performanceevaluierung war der ursprüngliche Quellcode, der mit MPI parallelisiert wurde, wobei ein release Build für die Kompilierung mit dem Intel 18.0 Compiler und IntelMPI 2017.4 verwendet wurde. Die stable-sort-timeline Version enthält Optimierungen zur Verbesserung der Data TLB Cache Lokalität, während vector-of-structs ein Array von Strukturen zur Verbesserung der Datenlokalität innerhalb des Kernels verwendet, wie vorstehend beschrieben.
Die folgenden Diagramme zeigen den Median der Durchsatzrate von 20 Anwendungsläufen auf einem einzelnen Intel Xeon Broadwell EP-Knoten mit 24 Kernen, einem Knoten der CLAIX2016 Partition des RWTH Compute Clusters. Die stable-sort-timeline Version beschleunigt die Ausführung um bis zu 97% im Vergleich zur ursprünglichen release Version. Außerdem wird die parallele Effizienz für 48 Prozesse von 41% auf 58% gesteigert. Weitere Laufzeitverbesserungen durch die vector-of-structs Version ergeben insgesamt eine Verdoppelung der Durchsatzrate gegenüber der ursprünglichen Version, was zu einer maximalen Durchsatzrate von 1.250 MB/s führt. Obwohl dieses Ergebnis das gesteckte Ziel, eine Durchsatzrate von über 1 GB/s zu erreichen, erfüllt, könnten sich zukünftige Kooperationen auf die Analyse weiterer kritischer Verarbeitungsschritte konzentrieren, um zusätzliche Performancesteigerungen zu erzielen.