2017-03-17 2 views
0

ich verwende beide Tesla K40 und GTX Titan X und ich habe Cuda 8.0 Die Funktionen, die ich verwende, sind CuBlas und CuSparse Bibliotheksfunktionen: cusparseDcsrsv2_solve(); cusparseDcsrmv(); cublasDdot();CuSparse/CuBlas K40 vs GTX Titan X (Maxwell)

Warum GTX Titan X ist schneller als K40? Ich kompiliere nvcc mit Flag für alle Rechenkapazität von 3.0 bis 6.0 und mein Programm behandelt 9 GB/12 GB RAM. Über mich die Bibliothek Funktionen verwenden keine doppelte Präzision, weil mit Gleitpunkten GTX TITAN X hat 6.xx Tflops und K40 hat 4.xx Tflops während mit Doppelpunkt GTX TITAN X hat 2xx GFlops und K40 hat 1.xx Tflops. In der Theorie muss K40 schneller sein als GTX TITAN X Was könnte mein Problem sein? Es ist so komisch.

+0

versuchen Sie cublasDgemm. Es wird schneller auf K40 sein. Die anderen Funktionen, die Sie auflisten, können sehr wohl Speicherbandbreiten sein, die nicht durch den Datendurchsatz begrenzt sind. Dies ist im Allgemeinen bei dünnen Matrixoperationen der Fall. Der cublasDdot hat nicht genug Rechenintensität, um einen Unterschied zu machen - er ist immer noch bandbreitengebunden. –

+0

Ich habe die Arbeitsplätze in meiner Abteilung nicht angegeben. Beide Workstations haben den gleichen RAM, CPU, HDD usw. der Unterschied ist, dass man zwei GPUs hat (Ausgabe nvidia-smi): GPU 0 GT 750 zu verwenden X GPU 1 TESLA K40 Aber in CUDA Coda ist die ID TESLA K40 für cudaSetDevice 0. Die andere Workstation hat nur GTX TITAN X Ich dachte, dass der Unterschied die Speicherbandbreite ist, weil TITAN DDR5 RAM hat, während K40 DDR3 RAM hat. Aber über Sie kann meine erste Konfiguration falsch installiert werden? –

+0

Ja, wenn die Codes auf der GT 750 anstelle der Tesla K40 laufen, dann werden Sie sicherlich enttäuscht sein. Sie können die Umgebungsvariable [CUDA_VISIBLE_DEVICES] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#env-vars) verwenden, um zu erzwingen, dass die Codes auf dem K40 auf diesem Computer ausgeführt werden . Experimentieren Sie mit dieser Variablen und dem 'deviceQuery'-Beispielcode, um sicherzustellen, dass Sie das Verhalten verstehen, und führen Sie dann Ihre tatsächlichen Codes erneut aus. Ich glaube nicht wirklich, dass Ihre Codes auf der GT 750 laufen (mein Sinn ist, dass sie nicht sollten), aber es ist einen Test wert. –

Antwort

1

Zunächst ist die Antwort auf diese Fragen in der Regel: Profilieren Sie Ihre Kernel und Sie werden erfahren, was genau langsamer läuft.

Ich werde sagen, aber es ist nicht wahr, dass ein K40 ein Maxwell Titan X schneller sein soll als:

  • Taktfrequenz: Titan X: 1000 MHz, Tesla K40: 745 MHz.
  • Speicherbandbreite: Titan X: 336 GB/Sek., Tesla K40: 288 GB/Sek.
  • Anzahl "CUDA cores" (dh maximale gleichzeitig Ausführungs Fahrspuren in Multiprozessor- vektorisiert Register): Titan X 3072, Tesla K40: 2888.

so das Titan X hat eine Reihe von Arbeitsstatistiken in seine Gunst, ganz zu schweigen von der Tatsache, dass es sich um eine andere Mikroarchitektur handelt, die selbst mit den gleichen "rohen" Statistiken die Dinge immer leistungsmäßig vermischen kann. So sollte zumindest für einige Workloads der Titan X schneller sein.

Natürlich, wie andere empfehlen, sollte die K40 für eine Gleitkomma-Performance mit doppelter Genauigkeit die Titan X einfach am besten schlagen: Die K40 hat Silizium für 1430G FMA ops/sec und die Titan X nur für 192 (!)

+0

Ja, das stimmt. Aber Tesla K40 sollte mit doppelten Gleitkommaoperationen besser sein.Es sollte 5 mal schneller sein als Titan X. Es ist wegen cuSparse, die mehr Speicherbandbreite verwendet –

+0

@ AlessandroD'Auria: In der Tat, siehe bearbeiten. Ich war mir vor Ihrem Kommentar gar nicht bewusst, wie nVIDIA im Wesentlichen das gesamte doppelt präzise Silizium von Kepler Titan X zu Mawell Titan X abbaute. – einpoklum