gpt4 book ai didi

profiling - 如何计算内核的 Gflops

转载 作者:行者123 更新时间:2023-12-02 00:12:23 27 4
gpt4 key购买 nike

我想要衡量我的内核归档了多少峰值性能。

假设我有一台 NVIDIA Tesla C1060,它有 peak GFLOPS of 622.08 (~= 240 核 * 1300MHz * 2)。现在,在我的内核中,我为每个线程计算了 16000 次 flop(4000 x(2 次减法、1 次乘法和 1 sqrt))。因此,当我有 1,000,000 个线程时,我会得出 16GFLOP。由于内核需要 0.1 秒,我将归档 160GFLOPS,这将是峰值性能的四分之一。现在我的问题是:

  • 这种方法正确吗?
  • 比较怎么样(if(a>b) then....)?我也必须考虑它们吗?
  • 我可以使用 CUDA 分析器来获得更简单、更准确的结果吗?我尝试了说明计数器,但我无法弄清楚该数字的含义。

姐妹提问:How to calculate the achieved bandwidth of a CUDA kernel

最佳答案

首先是一些一般性评论:

一般来说,您所做的大部分都是徒劳的,并且与大多数人可能进行性能分析的方式相反。

首先要指出的是,您引用的峰值严格适用于浮点乘加指令 (FMAD),该指令算作 2 FLOPS,并且可以以每周期一次的最大速率退出。其他以每个周期最大速率退出的浮点运算在形式上仅被归类为单个 FLOP,而其他浮点运算可能需要许多周期才能退出。因此,如果您决定引用该峰值的内核性能,那么您实际上是将代码性能与纯 FMAD 指令流进行比较,仅此而已。

第二点是,当研究人员从一段代码中引用 FLOP/s 值时,他们通常使用模型 FLOP 计数进行操作,而不是尝试对指令进行计数。矩阵乘法和 Linpack LU 分解基准是这种性能基准测试方法的经典示例。这些计算的操作计数的下限是准确已知的,因此计算出的吞吐量只是该下限除以时间。实际指令数无关紧要。程序员经常使用各种技术,包括冗余计算、推测或预测计算以及许多其他想法来使代码运行得更快。此类代码的实际 FLOP 计数无关紧要,引用始终是模型 FLOP 计数。

最后,在量化性能时,通常只有两个真正感兴趣的比较点

  • 在相同的硬件上,代码版本 A 的运行速度是否比版本 B 更快?
  • 在执行感兴趣的任务时,硬件 A 的性能是否比硬件 B 更好?

在第一种情况下,您实际上只需要测量执行时间。在第二种情况下,合适的衡量标准通常不是 FLOP/s,而是每单位时间的有用操作(排序中每秒的记录数、流体机械模拟中每秒的单元数等)。有时,如上所述,有用的操作可以是已知理论复杂度的操作的模型 FLOP 计数。但实际的浮点指令数很少(如果有的话)进入分析。

如果您真正感兴趣的是优化和了解代码的性能,那么也许 this presentation来自 NVIDIA 的 Paulius Micikevicius 可能会感兴趣。

解决要点问题:

Is this approach correct?

严格来说,没有。如果您正在计算浮点运算,则需要从 GPU 运行的代码中了解确切的 FLOP 计数。例如,sqrt 操作可能比单个 FLOP 消耗更多,这取决于它的实现和它所操作的数字的特征。编译器还可以执行许多优化,这可能会改变实际操作/指令计数。获得真正准确计数的唯一方法是反汇编编译的代码并计算各个浮点操作数,甚至可能需要假设代码将计算的值的特征。

What about comparisons (if(a>b) then....)? Do I have to consider them as well?

它们不是浮点乘加运算,所以不是。

Can I use the CUDA profiler for easier and more accurate results? I tried the instructions counter, but I could not figure out, what the figure means.

不是真的。探查器无法区分浮点指令和任何其他类型的指令,因此(截至 2011 年)不可能通过探查器对一段代码进行 FLOP 计数。 [编辑:请参阅下面 Greg 的出色答案,了解自编写此答案以来发布的分析工具版本中可用的 FLOP 计数功能的讨论]

关于profiling - 如何计算内核的 Gflops,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7875607/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com