Anbieter zum Thema
Nachstehend sind Informationen und Kommentare zu den verschiedenen Aspekten der Implementierung aufgeführt, die im Abschnitt „Ergebnisse“ zusammengestellt sind:
- Segmentgröße (Segmentsize): die Anzahl der Werte je Datensegment, die nach Empfang eines Triggerereignisses aufgezeichnet werden.
- Mittelwerte (Averages): die Anzahl der Mittelwerte (Summierungen), die bestimmt werden, bis ein Segment gespeichert und der Prozess der Mittelwertbildung von neuem gestartet wird.
- Benachrichtigungsgröße (Notifysize): die Datenmenge, nach deren Empfang die PC-Hardware einen Interrupt generiert. Der Parameter Notifysize bestimmt die Geschwindigkeit der kompletten Mittelwertbildungsschleife. Ist der Parameter Notifysize größer als der Parameter Segmentsize werden mehrere Segmente je Interrupt summiert. Dadurch verringert sich der Overhead für die Thread-Kommunikation und das Interrupt-Handling.
- Zwischenspeichergröße (Buffersize): der gesamte Zielpuffer im Speicher für die DMA-Übertragung. In unserem Beispiel ist die Größe des Zwischenspeichers als das 16-Fache des Parameters Notifysize festgelegt.
- Triggerrate: die Wiederholungsrate des externen Signalgebers. In den Ergebnissen ist die maximal erzielte Triggerrate ohne Überlauf der Zwischenspeicher aufgeführt.
- Threads: Um die Geschwindigkeit des Summierungsprozesses zu erhöhen, wurde dieser Task parallelisiert, indem die Summierung in verschiedene Software-Threads aufgeteilt wird. Wenn in der Spalte „Threads“ der Wert Null steht, wird im Summierungsprozess kein Threading angewendet, sondern der Summierungsprozess läuft direkt inline in einer Schleife ab.
- CPU-Auslastung (CPU Load): Da der Prozess der Mittelwertbildung in der Software abläuft, muss die CPU bzw. müssen die CPUs die gesamte Rechenleistung erbringen. Glücklicherweise bestehen heutige CPUs aus mehreren Kernen, sodass die verschiedenen Tasks auf sie aufgeteilt werden können.
- SSE/SSE2-Befehle (SSE/SSE2 commands): Auf den ersten Blick scheinen sich diese Befehle perfekt für die Parallelisierung des Summierungsprozesses und die Beschleunigung der Software ohne den Einsatz einer thread-basierten Programmierung zu eignen. Leider basiert der gesamte SSE-Befehlssatz jedoch auf Daten desselben Typs. Da die aufgezeichneten Daten 8 Bit lang sind und der Zwischenspeicher für die Mittelwertbildung 32 Bit lang ist, bietet sich diese Lösung hier nicht an.
Wann die blockweise Mittelwertbildung sinnvoll ist
Sämtliche ausgeführten Messungen wurden mit eines Digitizer mit 1-Kanal-Abtastung mit 5 GS/s, einer 8-Bit-Auflösung und einem externen Trigger ausgeführt. In der Tabelle sind auch verschiedene Programmeinstellungen aufgeführt, um die Unterschiede der Ergebnisse zu veranschaulichen. Das beste Ergebnis je Segmentgröße ist in der Tabelle gelb hinterlegt.
Die Ergebnisse zeigen, dass die blockweise Mittelwertbildung, die mit einer Software ausgeführt wurden, die Segmentgröße verbessern, solange die Wiederholungsrate nicht zu hoch wird. Dank der Datenübertragungsraten auf dem PCIe-Bus lassen sich Mittelwerte für längere Aufzeichnungen bilden. Es kann eine der Hauptbeschränkungen FPGA-basierter Prozesse für die Mittelwertbildung überwunden werden. Müssen extrem hohe Wiederholungsraten verwaltet werden, ist die blockweise Mittelwertbildung nach wie vor die beste Option.
Das Testprogramm steht frei für eigene Tests oder als Grundlage für die Implementierung in anderen Softwareprogrammen zur Verfügung. Die beste Leistung lässt sich mit einem Wert von 1 MByte für den Parameter „Benachrichtigungsgröße“ (Notifysize) erzielen. Die Anzahl der errechneten Mittelwertbildungen hat keine sichtbare Auswirkung auf die Testergebnisse. Die Zeit, um das Ergebnissegment zu kopieren und den Ergebniszwischenspeicher zu löschen ist im Vergleich zur Summierung der Abtastungen irrelevant. Der gesamte Prozess der Datenaufbereitung und Summierung bei Aufzeichnung mehrerer Kanäle weicht nicht ab. Das Ergebnis für andere Kombinationen von Kanälen kann einfach nachberechnet werden. Alle Einstellungen führen zur maximalen Triggerrate:
- 1 Kanal, 5 GS/s @ Segmentgröße
- 2 Kanäle, 2.5 GS/s @ Segmentgröße/2
- 4 Kanäle, 1.25 GS/s @ Segmentgröße/4
Wird die Abtastrate für einen Kanal auf 2,5 GS/s verringert, kann ein Kanal mit der maximalen theoretischen Geschwindigkeit der Software den Mittelwert bilden. Bei einer Segmentgröße von 1 MSample und einer Totzeit von 160 Abtastungen liegt die maximale Triggerrate bei: (2,5 GS/s) / (1 MSample + 160) = 2,38 kHz. Das ist deutlich weniger als das gemessene Maximum von 2,9 kHz bei einer Abtastrate von 5 GS/s.
* Oliver Rovini ist Technical Director bei Spectrum Systementwicklung in Großhansdorf bei Hamburg.
(ID:44201835)