【发布时间】:2014-07-29 05:17:11
【问题描述】:
我有一个 C 程序,它的主要功能占用了总运行时间的 70%。我使用 gprof 来分析应用程序。之后,我在 CUDA 中重写了该特定函数以提高整个应用程序的运行时间。它目前正在正确给出结果,但我想知道性能。
无论如何(或工具)我可以使用新内核的运行时间来分析这个新应用程序,作为运行时间相对于整个新应用程序的百分比?我还想查看与所有其他剩余 C 函数相关的数据。我尝试使用 nvprof,但它只输出 CUDA 内核的运行时。
谢谢,
【问题讨论】:
-
如果您有一个程序,其功能是执行特定计算,那么该计算应该占用程序中的大部分时间。仅仅因为你优化它并不意味着它会占用更少的运行时间百分比,它实际上可能会占用更多的运行时间百分比,因为它变得更快,因此可以在相同的时间范围。
-
@JoachimPileborg 我不遵循你的逻辑。如果您减少在应用程序的一部分中花费的时间,t1opt
-
@Tom 假设您有一个应用程序每秒执行 X 次计算,并且该计算占应用程序运行时间的 50%。现在,如果计算优化为将花费的时间减半,您可以将计算的运行时间百分比减半,使其占应用程序总运行时间的 25%,但是您将如何处理另外 25% 的时间?只是闲着?为什么不让计算仍占运行时间的 50%,而是在同一时间范围内将计算次数加倍?
-
如果您对 gprof 感到满意,您可以在内核调用周围放置一个精简的 C 包装函数,并使用 gprof 进行分析。您可能希望在包装器末尾添加一个
cudaDeviceSynchronize()调用,具体取决于包装器中的确切代码。 -
@JoachimPileborg 使用您的示例,如果您将在函数中花费的时间减半,但您没有将百分比减半,您的应用程序不会因为节省的时间而空闲,它会提前完成!您所描述的是不同的(在某些方面类似于弱缩放),因为您试图在固定的时间内增加工作,而最初的问题是关于在减少的时间内完成固定数量的工作时间。