我最近从GTX480升级到GTX680,希望在我的CUDA代码中,三倍数量的内核会显示出显着的性能提升.令我惊恐的是,我发现我的内存密集型CUDA内核在GTX680上运行速度慢了30%-50%.
我意识到这不是一个严格的编程问题,但它确实直接影响了CUDA内核在不同设备上的性能.任何人都可以提供一些有关CUDA设备规格的信息,以及它们如何用于推断它们在CUDA C内核上的性能?
不完全回答你的问题,但有些信息可能在理解GK104(开普勒GTX680)相对于GF110(费米GTX580)的性能会有所帮助:
在费米,核心的运行频率是其余逻辑的两倍.在开普勒,它们以相同的频率运行.如果想要与费米进行更多的苹果比较,那么这有效地将开普勒核心数量减半.使叶片GK104(开普勒)与2分之1536= 768"费米等效芯",这是比在GF110(费米)的512个核心更只有50%.
从晶体管数量来看,GF110拥有30亿个晶体管,而GK104拥有35亿个晶体管.因此,即使开普勒拥有3倍的内核,它只有更多的晶体管.所以,现在,不仅开普勒有更多的只有50%,"费米相当于核"费米相比,但每个那些核心的必须比费米的那些简单得多.
因此,这两个问题可能解释了为什么许多项目在移植到开普勒时会看到减速.
此外,GK104,是开普勒的版本显卡,已经以这样的方式,线程之间的合作比费米慢被调整作出(这种合作不针对图形一样重要).考虑到上述事实后,任何潜在的潜在绩效收益都可能被否定.
还存在双精度浮点性能的问题.特斯拉卡中使用的GF110版本可以在单精度性能的1/2下进行双精度浮点运算.当芯片在显卡方面使用的双精度性能被人为限制在单精度性能的1/8,但是这仍然比GK104的1/24双精度性能要好得多.