Hardwareeinschränkungen bei der Datenübertragung (hoher Durchsatz)

485
Daimonie

Ich untersuche derzeit die Hardwareeinschränkungen für ein wissenschaftliches Setup. Wir sind auf hochlastenbedingten Datenverlust gestoßen. Ich werde zunächst das Problem erläutern und eine Lösung vorschlagen, von der ich hoffe, dass Sie sie überprüfen können.

Wir haben eine Kamera mit vier 120px x 120px Bildern bei 10 kHz. Diese werden von einem Framegrabber (NI PCIe-1433) erfasst. Der Framegrabber ist an einen PCI-Steckplatz angeschlossen.

Wenn ich es richtig verstanden habe, werden die Daten vom Framegrabber zur CPU übertragen. (Frame Grabber -> Bus -> Südbrücke -> Bus -> Nordbrücke -> Front Side Bus -> CPU -> Speichercontroller auf dem Chip -> Bus -> RAM?)

Dann laden wir die Daten auf die High-End-GPU, dh die CPU fordert die Daten vom RAM (RAM-> Bus-> CPU-Speichercontroller?) An und lädt sie in die GPU (CPU -> Frontside-Bus -> Northbridge) -> bus -> NVidia GPU?).

Die Framegrabber-Spezifikationen selbst sind ziemlich klar und sollten in der Lage sein, damit umzugehen. Die derzeitige Meinung ist, dass die doppelte CPU-Last (Schreiben in RAM; RAM -> GPU) einen Engpass verursacht. Die wahrscheinlichen Korrekturen bestehen dann darin, entweder die CPU auf ein höheres Single-Clock-Modell aufzurüsten und / oder den RAM zu erweitern.

Ich bin auch auf der Suche nach einer Ressource, die diese Datenübertragungen (wahrscheinlich ohne Framegrabber) kurz erklärt und wie man die Geschwindigkeiten einschätzt und optionale Engpässe findet.

1
Ist es PCI oder PCI-E? Bei 144.000.000 Pixeln pro Sekunde (unter der Annahme, dass keine Datenkomprimierung durchgeführt wird) und 8 Bit pro Pixel wäre das ein Datenstrom von 1.152.000.000 Bit / 137 MB / s. Normale PCI würde irgendwo bei 133 MB / s liegen. Der Name lässt vermuten, dass es sich um ein PCI-E-Modell handelt. Da moderne Computerarchitekturen nicht wirklich eine klassische Nord- / Südbrücke haben, wie sie früher war, und Technologien wie DMA möglicherweise verwendet werden, ist es nicht so einfach zu erkennen, welchen Weg die Daten benötigen. Wie laden Sie die Daten in die GPU? Seth vor 7 Jahren 0
Es sollte PCIe sein. Das Motherboard ist ein Dell 0k240y, der Prozessor ist ein Intel Xeon 1620v3. Auf die Daten wird von labview zugegriffen, das eine C ++ / CUDA-DLL aufruft, die die gewünschten Daten lädt und berechnet. Daimonie vor 7 Jahren 0
Übrigens, die Berechnung, die Sie oben vorgenommen haben, berücksichtigt die 8B / 10B-Kodierung nicht, oder? Daimonie vor 7 Jahren 0
Nicht tut es nicht. Es war nur eine schnelle Berechnung für den Fall, dass es wirklich nur PCI ist und jegliche spezielle Kodierungen, Komprimierungen oder ähnliches ignoriert. Ihre Vorstellung von den Daten vom Grabber bis zum RAM ist ziemlich genau, auch wenn FSB und North Bridge weitgehend eliminiert wurden. Der Pfad zwischen CPU und GPU hängt davon ab, wie das Modul aufgebaut ist. Abhängig davon kann die GPU direkt aus dem RAM lesen. Ich bin nicht so, wie Sie eine Verbindung bewerten würden. Es sind wahrscheinlich einige RAM-Geschwindigkeitstests verfügbar. Überprüfen Sie auch Ihren Code auf Engpässe wie teure Operationen in Schleifen. Seth vor 7 Jahren 0
Danke - ich habe gerade über 8/10 gelesen und war neugierig. Richtig, ich bin froh, dass ich ein paar Dinge richtig gemacht habe! Der Code macht nicht viel teures OPS. Die GPU-Codierung ist C ++ / CUDA. Die CPU verwendet also Zeiger auf den RAM-Daten (schnell), erfordert jedoch immer eine Host / Device-Übertragung (langsam). Wenn ich das richtig verstanden habe, sind die PCIe-Spuren für den Grabber und die GPU unterschiedlich, daher sollte es dort keine großen Anforderungen geben. Es könnte jedoch einen Engpass bei den CPU-RAMs aus dem geben, was ich erfahre. Es sieht so aus, als könnte ein i7-Skylake wirklich einen Unterschied machen (Southbridge-Busgeschwindigkeit, Single-Core-Geschwindigkeit). Daimonie vor 7 Jahren 0
Die Southbridge ist nicht Teil der CPU, sondern Teil des Chipsets. Die Southbridge wird hier wahrscheinlich überhaupt nicht verwendet, es sei denn, der PCIe-Steckplatz, den Sie verwenden, ist damit verbunden. Die meisten PCIe-Lanes sind direkt an die CPU angeschlossen. Es wäre hilfreich, wenn Sie erklären würden, was genau Ihr Problem ist. Auch die RAM-Bandbreite ist wahrscheinlich nicht das Problem, da Quad-Channel-DDR4 weitaus mehr Bandbreite als der PCIe-Bus bietet - 64 GB / Sek. Ist die maximale Bandbreite, die von der CPU unterstützt wird. Bei der Beurteilung der Engpässe gibt es verschiedene Busanalysatoren, die jedoch recht teuer sind. Muh Fugen vor 7 Jahren 0
Nachdem Sie sich das Datenblatt für diese Karte angesehen haben, verfügt sie über eine eigene DMA-Engine, und Ihre Nvidia-GPU wird dies ebenfalls tun. Es scheint nicht so, als hätte ein schnellerer CPU-Takt hier viel, da die Prozessoren beider Karten direkt auf den Speicher des Host-Systems zugreifen werden. Sie müssen sich wahrscheinlich an Ihren Anbieter wenden, um hier Unterstützung zu erhalten. Muh Fugen vor 7 Jahren 0
Ich habe gesehen, dass der Skylake DMI3 verwendet, was einen besseren Bus für Nord / Süd bietet. Ich dachte, das würde helfen. Danke für die klaren Antworten! Wie das Problem zu beschreiben; Es ist einfach so, dass wir irgendwo im Prozess Daten verlieren, abhängig von der Häufigkeit der Erfassung. Oberhalb von 8 kHz verlieren wir immer mehr Daten. Dies liegt an einem Engpass irgendwo und wir versuchen zu beurteilen, wo. Ich kann den CPU / GPU-Teil des Prozesses auf einer alten GTX 580 problemlos bis zu 14 kHz ausführen. Dies deutet auf den Hardware-Engpass für uns hin. Daimonie vor 7 Jahren 0
Nur um dies hinzuzufügen. Ich habe mit einem Anwendungstechniker von National Instruments gesprochen, der zustimmt, dass die Karte den Durchsatz des Systems unterstützen soll. Daher betrachten wir unsere Softwareimplementierung, insbesondere LabView, sehr kritisch. Daimonie vor 7 Jahren 0
Ich wollte dieses Problem für zukünftige Verwendung aktualisieren. Da sich die Prioritäten verschoben haben, haben wir uns entschlossen, einen stärkeren PC zu gewinnen, um das Problem ohne Zeitaufwand zu lösen (ASUS ROG Maximus Hero IX, Intel i7-7700K). Leider konnte dies nicht gelöst werden. Der versprochene kritische Blick auf die Implementierung von C ++ / CUDA zeigte, dass dies nicht das Problem war. Auch die minimale Implementierung von labview war nicht der Fall. Das Problem scheint in der Akquisition zu liegen, bei der nicht alle erfassten Frames erfasst werden. Dies wird in naher Zukunft gelöst. Daimonie vor 6 Jahren 0

0 Antworten auf die Frage