英特尔® Parallel Amplifier 入门 - 并发性在哪里存在不足?

此步骤中,您将运行并发性分析,了解应用程序是否有效利用了所有处理器内核,并识别哪些串行化程度较高的代码需要并行化。

检查并发性

要运行并发性分析,在 Amplifier 工具栏中选择 Concurrency - Where is my concurrency poor? 并单击 Profile。矩阵应用程序计算完毕退出时,Amplifier 会确定结果并打开 Concurrency 窗口:



Concurrency 窗口和 Summary 选项卡均表明,整个矩阵应用程序都是串行化的。CPU Time by Utilization 列中的红条表示处理器多核利用率低下。在Summary 选项卡显示中只有 0 或 1 个运行线程的 CPU 时间。

请注意,耗费串行时间最多的函数是 algorithm_3,如 Hotspots:Bottom-up 窗口所示。该模块很有可能是实现并行的良机。双击 algorithm_3 查看源代码,识别串行时间最多的代码行。


重新生成应用程序

在此步骤中,您将重新生成并行化的矩阵应用程序。

  1. 在 Visual Studio* 中打开 matrix.cpp。
  2. 在第 22 行去掉USE_MULTIPLE_THREADS 宏定义的注释。
  3. 在第 23 行去掉USE_MULTIPLE_THREADS 宏定义的注释。
  4. 在algorithm_3 过程的第 216 和 218 行,去掉对 Enter 和 LeaveCriticalSection 调用的注释来保证初始化的安全,使之免受多线程访问影响。
  5. 使用debug build重新编译应用程序。
    确定您看到 Visual Studio* 的输出窗格中显示 0 错误和 0 警告。


将性能与基准相比较

在命令行窗口内再次运行新生成的应用程序。


请注意,执行时间从 21.31 秒缩短至 14.01 秒。



再次检查并发性

此步骤中,您将在修改后的矩阵应用程序上再次运行并发性数据收集。

请注意,algorithm_3 现在已不存在利用率低下的时间。但仍有一些串行时间(CPU 时间利用率以橘黄色条标记,属于OK 类型),您可尝试进行优化。

注意:该应用程序的修改版使用了线程间同步原语。在运行并发性或锁定和等待(Locks and Watis)分析时,Amplifier 会分析这些原语,这导致确定分析结果阶段的时间延长,因此增加了应用程序的总用时。

有关编译器优化的更完整信息,请参阅优化通知