2017-03-17 30 views
0

我使用既特斯拉K40和GTX泰坦X和予有Cuda的8.0 ,我使用是CUBLAS和CuSparse库函数的功能: cusparseDcsrsv2_solve(); cusparseDcsrmv(); cublasDdot();CuSparse/CUBLAS K40 VS GTX泰坦X(麦克斯韦)

为什么GTX Titan X比K40快? 我正在编译nvcc标志,所有计算能力从3.0到6.0 和我的程序处理9 GB/12 GB RAM。 关于我库函数不使用双精度,因为使用浮点GTX TITAN X具有6.xx Tflops和K40具有4.xx Tflops而浮点双GTX TITAN X具有2xx GFlops而K40具有1.xx Tflops。理论上K40必须比GTX TITAN X更快 我的问题是什么?这很奇怪。

+0

尝试cublasDgemm。 K40的速度会更快。您列出的其他功能很可能是内存带宽限制,不受计算吞吐量的限制。稀疏矩阵操作通常就是这种情况。 cublasDdot没有足够的计算强度来改变 - 它仍然是带宽限制的。 –

+0

我没有在我的部门指定工作站。 两个工作站都有相同的RAM,CPU,HDD ecc。不同的是,一个GPU有两个GPU(输出nvidia-smi): GPU 0 GT 750使用X GPU 1 TESLA K40但是在CUDA中,coda的ID为TESLA K40,cudaSetDevice为0. 其他工作站只有GTX TITAN X 我认为差别在于内存带宽,因为TITAN具有DDR5 RAM,而K40具有DDR3 RAM。 但是关于你我的第一个配置可能会被错误地安装? –

+0

是的,如果代码运行在GT 750而不是Tesla K40上,那么你肯定会感到失望。您可以使用[CUDA_VISIBLE_DEVICES环境变量](http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#env-vars)强制代码在该机器上的K40上运行。尝试使用该变量和'deviceQuery'示例代码来确保您了解行为,然后重新运行您的实际代码。我真的不认为你的代码在GT 750上运行(我的感觉是他们不应该这样做),但它的价值是值得考验的。 –

回答

1

首先,这些问题的答案通常是:配置您的内核,您将了解究竟运行得更慢。

我会说,虽然,这不是真的,一个K40应该是比麦克斯韦泰坦X更快:

  • 时钟速度:泰坦X:1000兆赫,特斯拉K40:745兆赫。
  • 内存带宽:泰坦X:336 GB /秒,特斯拉K40:288 GB /秒。泰坦X 3072,特斯拉K40:“CUDA内核”(即,最大可同时执行车道多处理器矢量寄存器)
  • 号2888.

所以泰坦X有一堆在工作统计的它的青睐,更不用说它是一个不同的微体系结构,即使是相同的“原始”统计数据,它总是可以将性能明智地混合起来。因此,至少对于一些工作量来说,Titan X应该更快。当然,正如其他人所认为的,对于双精度浮点性能而言,K40应该能够轻松实现Titan X:K40拥有1430G FMA ops/sec的硅片,而Titan X仅适用于192(!)

+0

是的,这是事实。但是特斯拉K40应该更适合双浮点运算。它应该比Titan X快5倍。这是由于cuSparse使用更多的内存带宽 –

+0

@ AlessandroD'Auria:的确,请参阅编辑。实际上我并没有意识到您对nVIDIA如何从Kepler Titan X到Mawell Titan X的所有双精度硅进行切割的评论。 – einpoklum