问题标签 [intel-advisor]
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++ - Intel Advisor 最佳标志和设置
我正在阅读有关使用 Intel Advisor 进行代码矢量化的教程。特别是在此页面中,他们建议:
以发布模式构建目标示例应用程序...编译器选项:-O2 -g
和以下:
要构建您自己的应用程序以生成最准确和完整的 Vectorization Advisor 分析结果,请使用以下设置在发布模式下构建优化的二进制文件。
现在,我有几个问题:
- 我认为在发布模式下我们没有产生任何调试信息(在“调试模式”中产生),所以不
-g
应该包括 - 最奇怪的是,在为示例代码(
vec_samples
in/opt/intel/advisor_*/...
)给出的 Makefile 中,仅使用了-g -O2
为什么它们不包含所有其他选项。为什么?
parallel-processing - 在远程计算机上使用 Intel Advisor 的正确方法是什么?
英特尔 VTune 放大器可以分析在远程机器上执行的并行应用程序。
Intel Advisor 没有这样的选项。根据此文档,您必须使用 Intel Advisor 的命令行版本:
这使得自动化许多任务以及分析在远程主机上运行的应用程序成为可能
然而,GUI 版本有很多 cl 版本没有提供的功能(比如关于如何解决矢量化/多线程低效率等的建议)。
我尝试advixe-cl
在远程机器上运行,然后在本地复制项目(并产生结果)。它可以工作,但丢失了一些功能。作为最后的机会,我尝试ssh -X
了远程机器和使用advixe-gui
,但似乎我的 Xeon Phi KNL 的主要核心太弱了,无法正常运行这样的图形应用程序。
在这种情况下,英特尔顾问的正确/最佳用途是什么?
c++ - 低效的内存访问模式和不规则的跨步访问
我正在尝试优化此功能:
我正在使用 Intel Advisor 对其进行优化,即使内部for
已被矢量化,Intel Advisor 仍检测到低效的内存访问模式:
- 60% 的单位/零步幅访问
- 40% 的不规则/随机步幅访问
特别是在以下三个指令中有 4 个收集(不规则)访问:
根据我的理解,当访问的元素是 type 时,会发生收集访问的问题a[b]
,其中b
是不可预测的。这似乎是 的情况imptr[rowOffset+x]
,其中rowOffset
和x
都是不可预测的。
同时,我看到Vertical Invariant
当以恒定偏移量访问元素时,这应该发生(再次,根据我的理解)。但实际上我看不到这个常量偏移量在哪里
所以我有3个问题:
- 我是否正确理解了收集访问的问题?
- 垂直不变访问呢?我不太确定这一点。
- 最后,我怎样才能改善/解决这里的内存访问?
与 2017 更新 3 一起编译,icpc
带有以下标志:
c++ - 写后读依赖是什么?
我有这个循环这个函数:
这被称为:
特别是,Intel Advisor 表示内部循环非常耗时,应该进行矢量化:
但是,它还说在这两行存在读取后写入依赖性:
读:
写:
但我真的不明白为什么会发生这种情况(即使我知道 RAW 依赖的含义)。
这是优化报告:
第 95 行是:
第 105 行是:
c++ - 我的代码中无效的“剥离/剩余”循环
我有这个功能:
halfWidth
非常随机:可以是9、84、20、95、111……我只是想优化一下这段代码,具体没看懂。
如您所见,内部for
已经矢量化,但 Intel Advisor 建议这样做:
这是 Trip Count 分析结果:
据我了解,这意味着:
- 向量长度为8,也就是说每个循环可以同时处理8个浮点数。这意味着(如果我没记错的话)数据是 32 字节对齐的(尽管正如我在这里解释的那样,编译器似乎认为数据没有对齐)。
- 平均而言,2 个循环是完全矢量化的,而 3 个循环是余数循环。最小值和最大值也是如此。否则我不明白什么
;
意思。
现在我的问题是:我如何才能遵循英特尔顾问的第一个建议?它说“增加对象的大小并添加迭代,因此行程计数是矢量长度的倍数”......好吧,所以它只是说“嘿,伙计这样做halfWidth*2
+1(因为它从-halfWidth
to+halfWidth
是一个倍数8)"。但是我该怎么做呢?如果我添加随机循环,这显然会破坏算法!
我想到的唯一解决方案是添加这样的“假”迭代:
当然,这段代码不会工作,因为它从-halfWidth
to 开始halfWidth
,但它是为了让你了解我的“假”迭代策略。
关于第二个选项(“增加静态和自动对象的大小,并使用编译器选项添加数据填充”)我不知道如何实现这一点。
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
c - 如何使用 Intel Advisor 分析我的并行 MPI 应用程序?
我正在一个远程 Linux 服务器上工作,我的应用程序与 MPI 并行运行。我想对其进行分析并测试每个 MPI 进程中的负载平衡有多好,哪些是代码中最重的部分。
要并行运行我的应用程序,我通常这样运行它:
mpirun -n # ${location}/myApp arg1 arg2 etc.
在机器中有一个关于 Intel Advisor 的模块,我将使用它。GUI命令
advixe-gui
不起作用,所以我必须这样做advixe-cl
如果有帮助,当我输入:
advixe-cl
它返回给我这个:
Intel(R) Advisor Command Line Tool
Copyright (C) 2009-2019 Intel Corporation. All rights reserved.
Usage: advixe-cl <--action> [--action-option] [--global-option] [[--] <target> [target options]]
Use --help for details.
关于如何进一步进行分析的任何想法?