我有一些问题,我无法弄明白。 我有一个Nvidia GPU 750M,从规格说它应该有722.7 GFlop / s。 (GPU specification)但是当我尝试从CUDA样本进行测试时,给我大约67.64 GFlop / Sec。
为什么会有这么大的差异? 感谢。
答案 0 :(得分:1)
只有当每个核心在每个周期忙于执行FMA
时才能实现最高性能,这在实际任务中是不可能的。
除了没有其他操作被视为FMA
,
对于单个内核启动,如果在Visual Profiler中进行一些采样,您会注意到有一些名为stall
的内容。每个操作都需要时间才能完成。如果另一个操作依赖于前一个操作的结果,则必须等待。这最终会造成“差距”。核心处于空闲状态等待新操作已准备好执行。其中,设备内存操作具有巨大的延迟。如果你做得不对,你的代码最终会忙着等待内存操作。
可以很好地优化某些任务。如果你在cuBLAS上测试gemm,它可以达到峰值FLOPS的80%以上,在某些设备上甚至可以达到90%。虽然其他一些任务无法针对FLOPS进行优化。例如,如果将一个向量添加到另一个向量,则性能始终受到内存带宽的限制,并且您永远不会看到高FLOPS。