当我的应用程序运行时,我正在使用Tesla K20c并使用nvidia-smi测量功率。我的问题是功耗没有达到稳定状态但却在不断上升。例如,如果我的应用程序运行100次迭代,则功率达到106W(4秒内),1000次迭代117 W(41秒内),10000次迭代122W(415秒)等等,每次都略有增加。我正在写一些关于我应记录哪个功率值的建议。在我的实验设置中,我有超过400个实验,并且每次进行10000次迭代至少目前是不可行的。该应用程序是矩阵乘法,只需几毫秒即可完成一次迭代。增加迭代次数不会给结果带来任何价值,但会增加运行时间,从而实现功率监控。
答案 0 :(得分:3)
您看到功耗随时间增加的原因是GPU在持续负载下正在升温。电子元件在升高的温度下吸收更多功率,主要是由于欧姆电阻的增加。此外,特斯拉K20c是一款主动冷却的GPU:随着GPU的升温,卡上的风扇旋转速度更快,因此需要更多功率。
我在K20c上进行了与你的非常相似的实验,大约10分钟。我发现5到6分钟后功率消耗稳定,之后只有+/- 2 W的噪声电平振荡。这可能是由于风扇温度控制的反馈回路中的滞后,或者是由于每个内核末端GPU的不完全利用导致的短期波动。由于风扇速度差异导致的功耗差异大约为5 W. GPU需要相当长的时间达到稳定状态的原因是整个组件的热容量,它具有相当大的质量,包括坚固的金属背板
当您使用400种不同的代码变体运行时,您的测量结果似乎是针对确定相对功耗。实现稳态功耗似乎并不重要,只是测试每个变体的条件与实际可实现的相同。请记住,GPU的功率传感器并非设计用于提供高精度测量,因此为了进行比较,您需要假设噪声水平大约为5%。为了进行准确的比较,您甚至可能需要对同一类型的多个GPU进行平均测量,因为制造公差可能导致多个“相同”GPU之间的功耗变化。
因此,我建议使用以下协议:运行每个变体30秒,测量接近该间隔结束的功耗。然后让GPU空闲30秒让它冷却下来,然后再运行下一个内核。这应该为每个变体提供大致相同的起始条件。如果您发现温度长时间保持升高,则可能需要稍微延长建议的空闲时间。 nvidia-smi
报告的温度数据可以指导您。通过这个过程,您应该能够在一夜之间完成400种变体的测试。