Forum: Digitale Signalverarbeitung / DSP / Machine Learning Ein- und Abschätzung zum Grafikkarten-CoPro-Thema


von Udo (Gast)


Lesenswert?

Könnte mir bitte jemand kurz eine Idee geben, wie man den Zeitbedarf für 
eine Berechung in einer Grafikkarte abschätzen kann, um zu sehen, wie 
sich Parallelisierung und Datenverschiebung auswirken?

Für reines C lassen sich die Zyklen ja recht gut gut schätzen, wenn man 
z.B. Laden, Elekemtarrechungen und Speichern abschätzt:

2Z Wert A aus RAM holen
1Z Wert C = A * A
2Z Wert B aus RAM holen
1Z Wert D = C + B
2Z Wert D als Ergebnis speichern

macht 8 Zyklen und somit für 768 Werte etwa 60us bei 100MHz

Für einen AVR sieht es freilich anders aus, als bei einem ARM oder DSP 
oder einer Plattform CPU, aber es wird mehr oder weniger in einer 
Schleife gerechnet und man kann es durch Variation schätzen.

Wei sieht das bei einer Grafikarte aus?

Wenn ich für 768 Werte jeweils die o.g. Formel Y(k) = A(k)*A(k) + B(k) 
rechnen will, wie lange daurt die Rechung, was ist dabei parallel und 
wie lange muss ich die Werte einladen?

Soweit ich weiss, können die Grafikchips nicht beliebige Auflösungen 
rechnen, sagen wir mal die Werte wären alle unterschiedlich und im 
Bereich von 16Bit Integer positv (0 ... 65536).

Können beim Einladen die 66MHz Bustakt angenommen werden oder kann hier 
auch parallel geladen werden, z.B: 8 Werte x 16 Bit auf 64 Bit auf 
einmal rein?  Das wären dann 768 / 4 * 2 Zyklen

Vor allem interessiert mich, wie die Parallelisierung ins Spiel kommt. 
Wenn ich die ersten Werte über den Bus geladen habe, dann könnte die 
Grafikarte ja schon losrechnen und hätte die ersten Werte schon fertig. 
Wieviele Rechnungen welcher Komplexität können da parallel ablaufen?

Aus meiner Sicht müsste sich für einen parallel abarbeitbaren Block 
sowas ergeben wie:

Elementarberechungszeit = Funktion (Formeltiefe; Formelbreite)

Sequenzialisierung =  Ganzzahl (gef. Auflösung / Grafikkartenauflösung)

Berechnungszeit je Block = Elementarberechungszeit * Sequenzialisierung

Zahl der Blöcke = Zahl der Daten / Parallelität

Zeit für alle Blöcke = Zahl der Blöcke *  Berechnungszeit je Block

Ein-ausschreibezeit =  Zahl der Daten  *  Bitbreite  /  Busbreite

Gesamtzeit = Zeit für alle Blöcke + Ein-ausschreibezeit (pipelined)

oder:

Gesamtzeit = Zeit für alle Blöcke + Zahl der Blöcke * 
Ein-ausschreibezeit (vollständig gelooped)

von Uwe (Gast)


Lesenswert?

> Vor allem interessiert mich, wie die Parallelisierung ins Spiel kommt.
So wie du sie machst.

von Udo (Gast)


Lesenswert?

Das ist natürlich eine unbefriedigende Antwort. Wie müsste man der 
Grafikkarte mitteilen, dass sie was rechnet und was hat man da zur 
Verfügung?

Gehen wir mal konkret davon aus, dass alle der 768 Kalkulationen 
unabhängig laufen können und sollen. Wieviele kann man da parallel 
reinladen?

von Joerg (Gast)


Lesenswert?

Irgendwo im Hinterkopf klingelt da c´t Artikel irgendwann in 2011, API 
Schnittstelle für solche Sachen von nVidia bei mir. Da stehen die Basics 
zur Grafikkartennutzung drin. Imho bekommste bei nVidia auch die API 
Doku auf der Webseite. Da es nicht meine Profession ist, hab ich den 
Artikel leider nicht geistig archiviert, war aber interessant zu lesen.

mfg
Joerg

von Uwe (Gast)


Lesenswert?

Wenn du 768 Cores hast, dann Alle. Aber da Sie ja Erst mal aus dem 
Hauptspeicher über den PCIe Bus muß wird hierdurch die Geschwindigkeit 
begrenzt.

von Soundman (Gast)


Lesenswert?

Uwe schrieb:
> Wenn du 768 Cores hast, dann Alle.
Was meinst Du mit Cores? Irgendwo gibt es dort doch ein Limit bez. des 
Produkts aus Zahl und Grösse.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Von M$ gabs da mal ne Vorstellung eines deren Software-Gurus. Ich glaube 
der Link kam hier von µC.net
Da gibts ein API, mit dem man normalen aussehenden C-Code automatisch in 
eine Variante für GPU umcompilieren lassen kann.

Zumindest war das hier schon öfters Thema. Also lesen.

Es gab auch mal ne Anfrage an den Programmierer von LTspice 
diesbezüglich obs Sinn machen würde, SPICE auf einer GPU laufen zu 
lassen. Sinngemäß war seine Antwort:
Nein, weil die FPU auf den heutigen CPUs extrem schnell ist und alles 
eher durch das I/O zeitlich begrenzt wird.
Er hat sich dafür einen internen Compiler ausgedacht, der den SPICE-Code 
auf alle Cores der CPU verteilen kann und einen Zwischencode benutzt.

von Arc N. (arc)


Lesenswert?

Abdul K. schrieb:
> Von M$ gabs da mal ne Vorstellung eines deren Software-Gurus. Ich glaube
> der Link kam hier von µC.net
> Da gibts ein API, mit dem man normalen aussehenden C-Code automatisch
> in eine Variante für GPU umcompilieren lassen kann.

http://herbsutter.com/2011/06/16/c-amp-keynote/

Guter Überblick über die verfügbaren Libraries und Sprachen
http://gpgpu.org/tag/programming-languages

> Zumindest war das hier schon öfters Thema. Also lesen.
>
> Es gab auch mal ne Anfrage an den Programmierer von LTspice
> diesbezüglich obs Sinn machen würde, SPICE auf einer GPU laufen zu
> lassen. Sinngemäß war seine Antwort:
> Nein, weil die FPU auf den heutigen CPUs extrem schnell ist und alles
> eher durch das I/O zeitlich begrenzt wird.

Extrem schnell? Momentan liegt die schnellste CPU i7 SB bei  ~100 GFlops 
(alle Cores zusammen), eine HD 7970 bei 947 GFlops (double precision) 
und 3.78 TFlops (single precision).
"Performance Comparison of Single-Precision SPICE Model-Evaluation
on FPGA, GPU, Cell, and multi-core Processors"
http://authors.library.caltech.edu/18923/1/Kapre2009p10508Fpl_2009_International_Conference_On_Field_Programmable_Logic_And_Applications.pdf
(eine 9600 GT GPU war da Faktor 3 bis 131 schneller als ein Xeon 5160)

http://www.nvidia.com/object/cuda_app_tesla.html
listet ein paar SPICE/Simulationspakete

Die Frage ist nur ab welcher Modellgröße/komplexität sich das lohnt.

von Soundman (Gast)


Lesenswert?

Zitat aus dem Vergleich FPGA, GPU und CPU:

We are able to show that we can accelerate Single-Precision
SPICE Model-Evaluation by


1- 33 when using an IBM Cell
3-131 when using the NVIDIA 9600 GT GPU
3–182 when using a Xilinx Virtex5 FPGA

compared to 3 GHz Intel Xeon 5160.

Der Virtex 6 lief auf nur 200 MHz. Allerdings kostet der auch x-mal mehr 
und frisst das dreifache an Strom.

von Helmut S. (helmuts)


Lesenswert?

> We are able to show that we can accelerate Single-Precision SPICE 
Model-Evaluation by ...

Natürlich haben die ihre Benchmarks mit single precision laufen lassen, 
damit das auf einer GPU gut aussieht.
Gerade bei SPICE sollte man aber mit 64bit floating point rechnen. Das 
zieht die GPU-Performance um Faktor 5 herunter. Da bleibt dann gar nicht 
mehr so viel Geschwindigkeitsvorteil, dass sich das für die Masse der 
Anwendungen lohnen würde.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Da muß ich Helmut leider recht geben. Ich muß bei vielen Sims die 
Precision auch hochstellen. Soll sagen, Single-Precision lohnt nicht 
wenn dafür extra Code erstellt werden müßte.

Ich denke, der ganze GPU-Kram ist für die breite Anwendung auch noch 
nicht genug gefestigt. Wer weiß, obs das in 10 Jahren noch gibt. Ich 
kann mich noch gut an die vielen CPU/DSP-Einsteckkarten für PCs 
erinnern. Da ist doch der Run schon vorbei und es blieben allenfalls 
wenige Speziallösungen übrig - da wo es sich finanziell wirklich lohnt. 
Früher lief Elektronik-Software auf sogenannten Workstations - die 
keiner zuhause hatte.

von Oli (Gast)


Lesenswert?

Na, von denen gibt es noch reichlich, aber die sitzen in der Niesche und 
man darf annehmen, dass sie ihre Produkte soweit optimiert haben, dass 
das Preis/Leistungsverhältnis stimmt.

Die Frage ist, wie man seine Rechenkapazität erweitert, wenn man mit dem 
Prozessor am Ende ist. Entweder man nutzt eine Dual CPU oder schleift 
einen weiteren Rechner ein. Im AV-Bereich wird einfach die SW nochmal 
installiert und ber Ethernet drangekoppelt.

..oder halt eine DSP-Karte.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Oli schrieb:
> Na, von denen gibt es noch reichlich, aber die sitzen in der Niesche und
> man darf annehmen, dass sie ihre Produkte soweit optimiert haben, dass
> das Preis/Leistungsverhältnis stimmt.
>

Bis die betreffende Firma dann plötzlich verschwand ;-)


> Die Frage ist, wie man seine Rechenkapazität erweitert, wenn man mit dem
> Prozessor am Ende ist. Entweder man nutzt eine Dual CPU oder schleift
> einen weiteren Rechner ein. Im AV-Bereich wird einfach die SW nochmal
> installiert und ber Ethernet drangekoppelt.

Es scheitert an der Software Verfügbarkeit bzw. dem Willen der 
Programmierer/Geldgeber.
SETI@Home ginge auch für andere Anwendungen.

Speziell für den Bereich SPICE ist eine vernünftige Auslegung der 
Simulation zielführender. Wenn man natürlich meint, man könne den AVR 
gleich mit in SPICE simulieren, wird das sicherlich scheitern oder 
zumindest sehr schwierig werden. Also Probleme möglichst kleinmaschig 
aufspalten und einzeln simulieren. Die Ergebnisse dann per Brain 
zusammenführen.


>
> ..oder halt eine DSP-Karte.

Sehe ich keine Zukunft. Sowas wird vielleicht für CTs und ähnlich 
bildgebende Sachen verwendet. Man muß den ständig steigenden Kostendruck 
in Form des PC-Preisverfalles im Auge haben.

von Oli (Gast)


Lesenswert?

Der PC wird immer billiger? Sehe ich eigentlich nicht. Die Chips werden 
wohl etwas besser, aber der PC als solcher nicht wirklich. Ausserdem 
würde die DSP Chips ja mit billiger werden.

von Udo (Gast)


Lesenswert?

Der PC ist genau genommen auch noch ein unterschätztes Thema, denn 
schließlich ist er ein Grössen und ein Kostenfaktor. Man rechnet ja 
gerne vor, dass bei der Nutzung eines PC keine Kosten entstünden, weil 
der ja ohnehin vorhanden ist, aber wenn eine APP ihn belegt, ist er 
rechentechnisch weg.

Wenn man da nur mal an MATLAB und Konsorten denkt.

> ..oder halt eine DSP-Karte.
Ich kenne es nur von den Audio-DSP-Plattformen: Wenn man die einmal 
konfiguriert hat, also einen Synthesizer, ein Mischpult oder einen 
Klangprozessor eingebaut hat, laufen die autark ohne Rechnerbelastung, 
weil sie ihre IOs selber treiben.

Bei den Grafikkarten kommt man meines Wissens nur über den PC an die 
Aussenwelt heran, oder kennt jemand eine Applikation, wo eine einmal 
geladene Karte selber rechnet und auch IO-Kanäle besitzt?

von Thomas (Gast)


Lesenswert?

Udo schrieb:
> wo eine einmal
> geladene Karte selber rechnet und auch IO-Kanäle besitzt?

Das ist wohl was für die Zukunft. Für das Treiben von IOs müssten aber 
schon FPGAs her, die die Grafik-Chips passend ansteuern. Dazu müssten 
die Hersteller die Chips aber solo liefern und ich weiss nicht, ob da 
Interesse besteht.

Ich fände die Vorstellung aber reizvoll, weil man an einen FPGA 
sicherlich gleich mehrere Grafik-Chips samt RAMs dran bekommt und 
parallel laden und entladen kann.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.