Archiv verlassen und diese Seite im Standarddesign anzeigen : GTX 580 oder 2 x GTX 480 für CUDA/OpenCL HPC Anwendungen?
pajofego
2011-05-16, 20:57:54
Hallo zusammen,
ich bin dabei in das Thema Cuda/OpenCL einzusteigen, dabei stellt sich mir die Frage inwiefern hätte es Vor -oder Nachteile folgende Hardwarekonfiguration für reine HPC Anwendungen zu benutzen?
Für ein festes Budget von ca. 500€ stünde eine GTX 580 mit 3GB RAM mit 512 Shadereinheiten und einem Speicherinterface von 384 bit, oder zwei GTX 480 mit 480 Shadereinheiten und jeweils 1,5 GB Ram bei ebenfalls 384 bit zur Auswahl.
Meine Frage kann ich im ersten Ansatz bei der Kombination von zwei GTX 480 Karten davon ausgehen, dass mir auch dann 2 x 480 Shadereinheiten und in der Summe 3GB zur Verfügung stehen? Also in etwa die doppelte Leistung? Wie verhalten sich zwei Karte in Cuda/OpenCL. Muss spezieller Code wie z.B. bei OpenMP für das Parallelisieren von CPU Code geschrieben werden? Im Vergleich zur GTX 580 hätte ich welche Vor- und Nachteile?
Danke und Gruß
pajofego
Meines aktuellen Wissens nach unterstützt CUDA bisher kein SLI. Dann also besser eine GTX 580-Karte.
Update: Sieh an, ab CUDA Toolkit 4.0 (http://developer.nvidia.com/cuda-toolkit-40) werden doch endlich mehrere GPUs endlich unterstützt.
-GENO-
2011-05-17, 08:54:40
Ich rendere viel mit Octane (Cuda Renderer) und der kann problemlos mit mehreren Karten umgehen und dann auch alle Cuda Cores nutzen. Er benötigt dafür keinen SLI Verbund und die verbauten Karten können sogar grundlegend verschiedene Modelle sein.
Demnach hätte er mit 2x GTX480 mehr Power aber trotzdem nur 1,5Gb Ram. Man kann den Speicher nicht addieren.
Also bleibt ihm entweder mehr Ram oder mehr Rechenleistung.
Im Endeffekt sollte er sich genauer mit dem geplanten Workload auseinandersetzen und dann sich für VRAM oder FLOPs entscheiden.
Übrigens, wenn der massive Einsatz von doppelter Genauigkeit geplant ist, sollte man eher nach einer ATI-Karte schauen, die in diesem Bereich nicht wie die GeForces künstlich gedrosselt sind.
N0Thing
2011-05-17, 10:09:02
Demnach hätte er mit 2x GTX480 mehr Power aber trotzdem nur 1,5Gb Ram. Man kann den Speicher nicht addieren.
Also bleibt ihm entweder mehr Ram oder mehr Rechenleistung.
Es geht hier ja nicht um SLI, von daher sollte auch der Speicher auf beiden Karten nutzbar sein, wenn ich den Beitrag von -GENO- richtig interpretiere.
Für richtig komfortables Entwickeln/Arbeiten würde ich auf jeden Fall die Lösung mit 2 Grafikkarten emfpehlen. Dann läuft nämlich der Desktop und die Anzeige auf der einen Karte, die CUDA Berechnungen auf der anderen. Wir haben hier in fast allen Rechnern eine "Anzeigekarte" (billige 8600/9600 oder so) und eine "Rechenkarte" GTX4xx/5xx, Tesla usw.)
Gerade wenn man in seiner Anwendung irgendwas visualisieren will macht das einen enormen Unterschied, weil die Visualisierung nicht vom CUDA Teil unterbrochen wird.
Speicher kann man ab CUDA 4.0 von beiden Karten nutzen (unified memory architecture). Ebenso die Rechenleistung. SLI hat damit nichts zu tun bzw braucht man nicht dafür, diese Funktionalität ist ein Teil der CUDA Bibliothek.
pajofego
2011-05-17, 21:32:30
Speicher kann man ab CUDA 4.0 von beiden Karten nutzen (unified memory architecture). Ebenso die Rechenleistung. SLI hat damit nichts zu tun bzw braucht man nicht dafür, diese Funktionalität ist ein Teil der CUDA Bibliothek.
Woher weiss Cuda, dass 2 und mehr Karten zur Verfügung stehen? Erfolgt dies vom Treiber? Oder muss man den Code parallelisieren?
Danke.
Woher weiss Cuda, dass 2 und mehr Karten zur Verfügung stehen? Erfolgt dies vom Treiber? Oder muss man den Code parallelisieren?
Danke.
Ich nehme an die Info kommt vom Treiber, ja.
Mehrere Karten scheinen einfach als mehrere Devices auf denen CUDA Code laufen kann auf. Man kann transparent mit setDevice() entscheiden wo was läuft (ab CUDA 4), was im Prinzip bedeutet dass man den Code parallelisieren muss. Ich habe es allerdings noch nicht selbst ausprobiert, hier verwenden wir noch CUDA 3.x.
Den Hauptnutzen dafür würde ich allerdings bei richtig großen Anwendungen sehen die von sich aus schon aus einer Vielzahl untereinander unabhängiger Kernels bestehen. Diese kann man dann leicht auf mehrere Devices aufteilen. Der "typische" Anwendungsfall (einige wenige Kernels die voneinander abhängen) profitiert davon eher weniger.
Link vergessen:
http://developer.download.nvidia.com/compute/cuda/4_0_rc2/toolkit/docs/CUDA_4.0_Readiness_Tech_Brief.pdf
pajofego
2011-05-19, 11:15:29
Danke für den Link.
Gruß
pajofego
Nighthawk13
2011-05-24, 17:23:35
* Jede Grafikkarte muss auf jeden Fall seperat programmiert werden: Eigener Kontext mit getrennten Variablen, manuelle Synchronisation usw. (Ging auch schon mit Cuda 2.3, hatte so ein Setup am laufen)
* Mit Cuda 4.0 kann man zwar auf den Speicher der anderen Karte direkt zugreifen, allerdings ist die Bandbreite sehr viel geringer: 6GB/s (PCI-E) vs. 170GB/s (onboard). Also wenn >1.5GB Speicher nötig ist wäre die GTX580 mit 3GB das richtige.
* Für mehr Rechenleistung 2x480/570/560 oder gleich ne 590 denkbar. Allerdings muss dein Problem in 2 getrennten Kontexten berechenbar sein(mit wenig Kommunikationsaufwand dazwischen), und der Entwicklungsaufwand ist höher.
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.