I am using Tesla K20c and measuring power with nvidia-smi as my application is run. My problem is power consumption does not reach a steady state but keeps rising. For example, if my application runs for 100 iterations, power reaches 106W(in 4 seconds), for 1000 iterations 117 W (in 41 seconds), for 10000 iterations 122W (in 415 seconds) and so on increasing slightly every time. I am writing for some recommendation on which power value I should record. In my experimental setup I have over 400 experiments, and doing each one for 10000 iterations is not feasible at least for now. The application is matrix multiplication which is doable in just one iteration taking just a few milliseconds. Increasing the number of iterations does not bring any value to the results, but it increases the run time allowing power monitoring.
1 回答
您看到功耗随时间增加的原因是 GPU 在持续负载下升温。电子元件在温度升高时会消耗更多功率,这主要是由于欧姆电阻的增加。此外,Tesla K20c 是一个主动冷却的 GPU:随着 GPU 升温,卡上的风扇旋转得更快,因此需要更多的功率。
我在与您的非常相似的 K20c 上运行了大约 10 分钟的实验。我发现功耗在 5 到 6 分钟后达到平稳状态,之后只有 +/-2 W 的噪声级振荡。这可能是由于风扇的温度控制反馈回路中的滞后现象,或者是由于在每个内核结束时对 GPU 的不完全利用造成的短期波动。由于风扇速度差异导致的功耗差异约为 5 W。GPU 需要相当长的时间才能达到稳定状态的原因是整个组件的热容量,它具有相当大的质量,包括坚固的金属背板.
您的测量似乎旨在确定使用 400 种不同的代码变体运行时的相对功耗。实现稳态功耗似乎并不重要,只是测试每个变体的条件与实际可实现的条件相同。请记住,GPU 的功率传感器并非旨在提供高精度测量,因此为了进行比较,您需要假设噪声水平约为 5%。为了进行准确的比较,您甚至可能希望对多个相同类型的 GPU 的测量值进行平均,因为制造公差可能会导致多个“相同”GPU 之间的功耗变化。
因此,我建议采用以下协议:运行每个变体 30 秒,在接近该间隔结束时测量功耗。然后让 GPU 空闲 30 秒,让它冷却下来,然后再运行下一个内核。这应该为每个变体提供大致相等的起始条件。如果您发现温度保持较高的时间较长,您可能需要稍微延长建议的空闲时间。报告的温度数据nvidia-smi
可以在这里为您提供指导。通过这个过程,您应该能够在一夜之间完成对 400 个变体的测试。