问题标签 [roofline]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - Roofline 模型 - 如何计算 flop/byte 比率?
我想创建屋顶线模型,但每字节比率的算法失败有问题。你能解释一下如何计算吗?该算法使用 5 点模板进行计算。
这是算法
c++ - Roofline 模型:计算运营强度
假设我有一个这样的玩具循环
我假设我的缓存线是64 字节(即足够大)。然后我将(每帧)基本上 2 次访问 RAM 和 3 次 FLOP:
- 1(缓存)读取访问:加载所有 3
x[i-1], x[i], x[i+1]
- 1个写访问:存储
y[i]
- 3 FLOP (1 mul, 1 add, 1 sub)
操作强度是ergo
OI = 3 FLOP/(2 * 4 字节)
现在如果我做这样的事情会发生什么
请注意,现在没有y
了。这是否意味着我现在只有一个 RAM 访问权限
- 1(缓存)读/写:加载
x[i-1], x[i], x[i+1]
,存储x[i]
或仍然有 2 个 RAM 访问
- 1(缓存)读取:加载
x[i-1], x[i], x[i+1]
- 1(缓存)写入:存储
x[i]
因为在任何一种情况下,操作强度OI都会不同。任何人都可以谈谈这件事吗?或者也许澄清一些事情。谢谢
linux - 使用 Intel Advisor XE 报告 FLOP
我在 Linux CentOS 7.4 上使用 Intel Advisor 2018(内部版本 523188)来分析一组基准(我想将它们全部绘制在一个 Roofline 图中),并且我正在使用命令行工具 advixe-cl 来收集调查,每个基准测试的行程计数和失败信息。
但是,我找不到使用命令行界面以 FLOPs(每个循环或函数甚至整个程序)报告测量性能的方法。我正在查看的文档可在此处找到https://software.intel.com/en-us/advisor-help-lin-command-line-interface-reference,但我认为它不完整,例如选项 -flops -and-masks 和 -no-tip-counts 没有在任何地方提及。
您知道是否有任何方法可以通过命令行界面报告测量的触发器?或者你知道我在哪里可以找到 advixe-cl 的完整文档吗?
performance - Intel Advisor:检查方法,包括所有子方法
使用 Intel Advisor 和屋顶线模型,我想评估某个功能的性能。此函数使用 Eigen 库进行矩阵运算,其中完成了主要工作。
在输出中,我可以看到我的函数具有相对较小的自时间和几个由我的函数调用的 Eigen 函数。现在我想将我的函数的所有 FLOPS 和内存操作组合在一起(而不是每个单独的函数),并将这个结果用于屋顶线模型。我怎样才能做到这一点?
注意:我在英特尔支持论坛 [1] 中发布了一个类似的问题。
[1] https://software.intel.com/en-us/forums/intel-advisor-xe/topic/806091
cuda - NSIGHT 计算:SOL SM 与 Roofline
我在我的 cuda 内核上运行了 cuda-11.2 nsight-compute 。
它报告说 SOL SM 为 79.44%,我认为这非常接近最大值。SOL L1 为 48.38%
当我检查屋顶曲线图时,我发现我的测量结果与峰值性能相差甚远。
达到:4.7 GFlop/s 。
车顶线峰值:93 GFlop/s 左右。
我还看到 ALU 管道利用率为 80+%
那么,如果 ALU 管道被充分利用,为什么根据车顶线图实现的性能会低很多呢?
请注意,这是在 RTX 3070 上,单精度峰值为 17.6 TFlop/s:
更新
我想我知道这里发生了什么……@robert-crovella 让我走上了正确的轨道,表明 ALU 是整数运算,因此不包括在内。而且这些并不是唯一不包括在内的操作!
屋顶线图仅显示 fp32 和 fp64 操作,而不显示 fp16 操作。
我的代码使用半精度浮点数,我怀疑屋顶线图不适用于我的代码。
performance - 屋顶线模型分析的建议/指导(Skylake、Thunder X2、Haswell)
我目前正在学习带宽/内存和 CPU 绑定的性能和屋顶线图,我希望得到一些关于如何分析下图的帮助/输入。
屋顶线图来自“https://www.mdpi.com/2079-3197/8/1/20”
我在这里尝试做的第一个分析是两者中的哪个内核——Dirac 和 LBM——更接近 ThunderX2 的经验上限性能。我的想法是,狄拉克在 TX2 上的性能更接近上限,因为在狄拉克上比在 LBM 上时,相应的红色三角形(代表 TX2 的性能)更接近屋顶线。如果不正确,任何人都可以纠正我的理由/方法吗?
我试图得出的第二个结论是,在给定的三个架构(Skylake、Thunder X2 或 Haswell)中,哪个架构“最适合”LBM。这里可能有多种方法;我的猜测是 SKL 最适合 LBM,因为它是 LBM 环境中三者中性能最高的,但也可能是 TX2,因为它与自己的车顶线的距离是三者中最短的,因此是最有效/适合LBM的一种。
任何输入、更正或建议将不胜感激!
profiling - 从头开始构建 Roofline 模型
我最近接触了车顶线模型,我对它还很陌生。
我正在尝试为 Intel Xeon W-2133 构建一个,但用于单核和单线程应用程序
根据此处,英特尔至强 W-2133 的峰值 GFLOPS 为537.6 GFLOPS。据我了解,因为我正在使用单核单线程应用程序,W-2133 有 6 个内核[每个内核 2 个线程],峰值触发器应该下降到 537.6/12=44.75 GFLOPS
此处显示的至强 W-2133 的内存带宽为85.3 GB/s
机器平衡(水平线与对角线的交点)是否应该是:44.75/85.3 = 0.52 flops/byte?
我有以下问题:
- 我的假设对于单核单线程峰值触发器是否正确?
- 我的方法计算机器平衡是否正确?
考虑到内核的 AI,我计划使用此模型将其他内核分类为内存绑定/计算绑定。
这是使用屋顶线模型对内核进行分类的正确方法吗?
任何帮助将不胜感激。