为了准确计算我的内核执行时间,我应该运行多少次并取平均值?我发现在30次运行和500次运行(20%差异)之间存在非常大的差异。我认为GPU可能会节省电力以节省电力(其GTX 580Ti)。如何禁用此功能?是否可以根据单次运行所需的时间计算所需的启动次数?
谢谢!
答案 0 :(得分:2)
如果您的代码具有可变的执行路径(可能与数据有关,并且您正在为其提供不同的数据),那么没人能真正为您解答此问题。
如果你的代码有一个相对恒定的执行路径,我通常会通过两次计时并扔掉第一组结果来获得相当不错的结果。
各种GPU都具有电源管理功能,但是第一次运行内核时,任何相关功能都将被提升到最高状态,并且它们不会在运行该内核所需的短时间(微秒)内发生变化再次,为时间安排。
对传统主义者进行基准测试会告诉您运行代码数百次或数千次并对结果取平均值。我很少对这种清晰度感兴趣。我通常可以通过计时第二次运行得到一个很好的答案。
作为一项实验,您可能会尝试绘制每次运行500次运行的时间数据。这可能会比SO提供的任何答案更能提供您的见解。如果你在开始时看到一个大的峰值,而不是试图通过大量的运行来平均它,我通常更有兴趣丢弃它 - 因为它不能代表我的其他数据。
另外,请注意,在WDDM下运行的GPU在时序方面只是古怪的。操作系统实际上将WDDM GPU管理到比计算任务真正需要的程度更精细的程度,因此可能需要放弃并花费大量时间。如果你可以在Windows上以TCC模式运行GPU(不能与GeForce GPU一起运行),或者在没有X运行在GPU上的Linux上,你可能会有更加一致和可预测的运行结果。 (如果可以的话,X可以运行,只需将它从计算GPU上移开。)在我看来,在WDDM下,时序更具挑战性。