Forums Neueste Beiträge
 

Rechnen per CUDA

07/07/2009 - 07:32 von Frank Buss | Report spam
Ich habe meine Magnetfeldberechnung auf einen Auftrag hin per CUDA auf die
Grafikkarte ausgelagert und wollte mal kurz darüber berichten, da ja auch
andere in dieser Newsgroup teilweise viel Rechenleistung für elektronische
Aufgaben brauchen: Ein Test làuft auf einem Intel Quad Core (allerdings nur
auf einem Core laufend) mit 2,4 GHz in ca. 230 Sekunden durch, auf einer
NVIDIA 8800 GTX braucht es rund 2 Sekunden und auf einer NVIDIA 8600 GT
rund 10 Sekunden, wobei der C-Source für die Grafikkarte fast identisch
ist, nur ein paar unnötige Branches sind wegoptimiert (z.B. Division durch
0 wird nicht getestet, da die Grafikkarte das einfach ignoriert und
Infinity zurückgibt). Man kann da ganz normal in C programmieren, mit ein
paar wenigen Erweiterungen z.B. Threadsynchronisierung oder Abfrage der
Thread- und Block Id, um jeweils einen passenden Teilbereich eines Arrays
abzuarbeiten. Die Integration von CUDA in Visual Studio ist sehr gut, wenn
man erstmal der IDE per Registry-Key beibebracht hat, daß jetzt auch
.cu-Dateien wie C++ per Syntax-Highlighting dargestellt werden sollen :-)

Welche Aufgaben könnte man noch leicht paralellisieren? Wàre das auch was
für Spice-Berechnungen oder Leiterbahnrouting? GNU Radio scheint ja bereits
einiges in dieser Richtung zu machen.

Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
 

Lesen sie die antworten

#1 Oliver Bartels
07/07/2009 - 08:04 | Warnen spam
On Tue, 7 Jul 2009 07:32:35 +0200, Frank Buss
wrote:
Welche Aufgaben könnte man noch leicht paralellisieren? Wàre das auch was
für Spice-Berechnungen oder Leiterbahnrouting? GNU Radio scheint ja bereits
einiges in dieser Richtung zu machen.



Simulationen mit Matrizen etc. lassen sich sehr gut parallelisieren,
auch der Design Rule Check bei uns im BAE High End ist bereits
parallelisiert (der merkt, wenn weitere Cores anwesend sind).
Signalverarbeitung schreit auch danach.

Hingegen wird man sich beim Autorouter sehr schwer tun, weil es
eine recht eklige Abhàngigkeit der Daten voneinander gibt, die
allen Dijkstra-àhnlichen Algorithmen gemein ist:
http://de.wikipedia.org/wiki/Dijkstra-Algorithmus

Siehe z.B.:
http://ditwww.epfl.ch/SIC/SA/public...page3.html
"Local Dijkstra"

Die Synchronisierung ist - auch nach unserern ausgiebigen Tests -
das große Problem. Bei handelsüblichen n-Core Prozessoren für PC's
kostet die mehr Zeit als das Parallelisieren bringt, bei einer
Grafikkarte wàre das noch zu untersuchen.

Gruß Oliver

Oliver Bartels + Erding, Germany +
http://www.bartels.de + Phone: +49-8122-9729-0 Fax: -10

Ähnliche fragen