gpt4 book ai didi

algorithm - Roofline 模型 - 如何计算 flop/byte 比率?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:42:18 36 4
gpt4 key购买 nike

我想创建 roofline 模型,但我遇到了每字节比率算法失败的问题。你能解释一下如何计算吗?该算法使用 5 点模板进行计算。

这是算法

for(int i=1; i<m-1; ++i) {
for(int j=1; j<n-1; ++j) {
outMax[i][j] = max( inMax[i][j], inMax[i][j-1], inMax[i][j+1],
inMax[i-1][j], inMax[i+1][j] );
}
}
swap(inMax, outMax)

for(int i=1; i<m-1; ++i) {
for(int j=1; j<n-1; ++j) {
outMin[i][j] = min( inMin[i][j], inMin[i][j-1], inMin[i][j+1],
inMin[i-1][j], inMin[i+1][j] );
}
}
swap(inMax, outMax)

最佳答案

通常,roofline 是针对每个循环或每个程序的。因此,我可能会考虑第一个循环的 flop/byte,并单独考虑第二个循环。

对于每个循环:

  1. 您需要估计操作数,这(对于 roofline 和 flop/byte 算术强度)通常等于所有 ALU(乘法、加法、除法等)操作的数量,在循环的单次迭代中执行。 (就硬件指令而言,您必须考虑不会导致生成 MOV* 或跳转指令的操作)。在您的情况下,您只需要计算比较次数(因为最小/最大处理比较)。您的具体比较次数取决于 min()/max() 函数的实现。

  2. 您必须估计从/到 inMax(或者在第二种情况下从/到 inMin)读取和写入了多少字节;同样,您每次迭代都这样做。在您的情况下,您肯定会阅读 5*sizeof(double) == 40 字节。你至少写了一个双倍。如何在 min()/max() 函数内读取/写入内存取决于它的实现。

  3. 您必须将这 2 个值彼此相除。在您的情况下,flop/byte 可能类似于 0.1,具体取决于 min()/max() 算法。

与此同时,C/C++/Fortran 程序中的每个循环和函数的自动 Roofline 模型生成(连同 float /字节指标)作为英特尔 Advisor 产品启动中的一流功能提供从其 2017 版中,请参阅 https://software.intel.com/en-us/articles/intel-advisor-roofline , https://www.codeproject.com/Articles/1169323/Intel-Advisor- Intel Advisor Roofline: each circle corresponds to some loop/function; flop/byte ration is on horizontal axis

请记住,一些 roofline 变体在如何定义“字节”值方面有所不同。

找出模板的 flop/byte 和 roofline 模型是 roofline 专家和开发人员非常流行的话题。因此,通过查看下面的链接,您可能会找到足够的模板屋顶线示例来遵循并在您的特定情况下重新应用,无论是考虑 DRAM 还是 L1:

http://icsc2014.sjtu.edu.cn/wp-content/uploads/2014/05/Tutorial-Leopold1.pdf (尤其是从第 17 页开始)

http://blogs.fau.de/hager/files/2014/05/Roofline_ECM_SPPEXA_PhD_2014.pdf

关于algorithm - Roofline 模型 - 如何计算 flop/byte 比率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32128318/

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