Echtzeit-Signalverarbeitung in der Optischen Kohärenztomographie (OCT) am Fraunhofer IPT

 

Wissenschaftlicher Bereich
Tomographische Bildgebung, Augenheilkunde

Kurzbeschreibung
Am Fraunhofer-Institut für Produktionstechnologie (IPT) werden Systeme der Optischen Kohärenztomographie (OCT) für medizinische und industrielle Anwendungen entwickelt. OCT ist eine bildgebende Technik, die auf einer Signalverarbeitungskette basiert. Diese Kette, die in den OCT-Systemen von Fraunhofer eingesetzt wird, umfasst z. B. die Datenerfassung von einer Zeilenkamera, bildbezogene Anpassungen, eine Fourier-Transformation und die Reduzierung von Signalrauschen. Da diese OCT-Systeme für eine hohe räumliche und zeitliche Auflösung in Produktionsaufbauten, z.B. Videobildrate (25 Bilder/s), erforderlich sind, ist die Parallelisierung und Abstimmung der Signalverarbeitungskette entscheidend.

Um die Videobildrate zu erreichen, haben wir eine CUDA-Version der Fraunhofer-Signalverarbeitungskette OCT entwickelt, die auf Consumer-GPUs ausgerichtet ist, wie sie in den Produktionsumgebungen der Kunden eingesetzt werden. Wir haben zahlreiche Komponenten der Signalverarbeitungskette als Matrixtransformationen neu formuliert, um die Verwendung von gut abgestimmten Bibliotheken wie CUBLAS und CUFFT zu ermöglichen. Darüber hinaus haben wir uns darauf konzentriert, die Datenübertragungszeiten durch Überschneidungen von Daten- und Rechenoperationen zu verkürzen. Dazu wickeln wir unabhängige Teile des Bildes - sogenannte B-Scans - in CUDA-Streams ein und verarbeiten sie asynchron.

Für die Performance-Validierung unserer CUDA-Implementierung erstellen wir ein Performance-Modell, das Kernel-Laufzeiten und Datentransferlaufzeiten in einem solchen asynchronen Setup vorhersagt. Unser Leistungsmodell basiert auf bestehenden Ansätzen und Interpretationen und kombiniert diese für unseren realen Code.

 

Ergebnisse
Ausgangspunkt unserer Leistungsbewertungen ist die Original Serial Code Version (MSVS) mit dem Microsoft Visual Compiler (v14.0). Aufgrund der neuen algorithmischen Matrixformulierungen haben wir mit geringem zusätzlichen Aufwand auch parallele CPU-Versionen des Codes erstellt: Mit dem Microsoft Compiler haben wir OpenBLAS (MSVS_BLAS) und mit dem Intel Compiler (v17.0) MKL verwendet. Unsere neue CUDA-Implementierung wurde auf zwei NVIDIA Pascal Consumer GPUs (mit ähnlichen Ergebnissen) getestet. Um den Nutzen unserer Optimierungen in Bezug auf asynchrone und überlappende Operationen aufzuzeigen, stellen wir Performance-Ergebnisse der Code-Versionen CUDA_SYNC und CUDA_ASYNC vor.

  Säulendiagramm
 
  Grafische Darstellung der Messergebnisse

 
 

Insgesamt erreicht unsere CUDA-Version (CUDA_ASYNC) selbst für den größten getesteten Datensatz ~50 Bilder/s und erfüllt damit unsere Anforderung an die Videobildrate. Dies bedeutet eine Beschleunigung von 8-16 gegenüber der seriellen MSVS-Version und eine Beschleunigung von 4-5 gegenüber der schnellsten parallelen CPU-Version. Unser entsprechendes GPU-Leistungsmodell steht im Einklang mit unseren Laufzeitmessungen (Abweichung unter 15 %) und prognostiziert, dass mit unserer Version CUDA_ASYNC noch dreifach große Bilder in Video-Frame-Rate verarbeitet werden können.

 

Code-Details
Code-Zeilen: ~6000 LOC für den verwendeten Testaufbau
Programmiersprachen & -modelle: C++, CUDA, OpenMP, BLAS Bibliotheken

Entwicklung & Zusammenarbeit
Tobias Schrödter, RWTH Aachen University
David Pallasch, Fraunhofer IPT, Aachen
Sandra Wienke, Christian Terboven, IT Center/ Lehrstuhl für High Performance Computing, RWTH Aachen University

Referenz
Schrödter T., Pallasch D., Wienke S., Schmitt R., Müller M.S. (2019) Modeling and Optimizing Data Transfer in GPU-Accelerated Optical Coherence Tomography. In: Mencagli G. et al. (eds) Euro-Par 2018: Parallel Processing Workshops. Euro-Par 2018. Lecture Notes in Computer Science, vol 11339. Springer, Cham