EN
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

应用Core Bound占比较高

现象

应用运行时,如发现应用Core Bound占比较高,可通过调整运算操作或变量精度,减少资源消耗。

调优思路

使用鲲鹏DevKit系统性能分析的HPC应用分析发现问题点,对运算操作及变量的精度进行微调,以便达到减少资源消耗的目的。

操作步骤

  1. 准备示例源码core_bound.c并进行编译。
    gcc core_bound.c -O3 -o core_bound -fopenmp -lm
  2. 使用鲲鹏DevKit系统性能分析执行HPC应用分析任务。
    表1 任务配置参数说明

    参数

    说明

    分析对象

    应用

    应用路径

    输入程序所在的绝对路径,例如本示例将代码样例放在服务器“/opt/testdemo/core_bound”路径下。

    分析类型

    HPC应用分析

    采集模式

    OpenMP模式;本示例主要是对OMP的应用进行分析。

    分析模式

    统计分析

    采样模式

    Summary模式

    采样时长

    默认

  3. 查看任务结果。

    观察Top-Down各项指标,发现其中Core Bound占比为87.4%,远高于其他指标比率。

    图1 HPC Top-Down
  4. 进一步观察热点函数,同时对源码进行分析。

    热点函数CoreBoundBench_OPT存在sdiv操作,导致core bound占比较高。

    void CoreBoundBench()
    {
        int i;
        __asm__ volatile(".rept 3   \n\t"
        "nop       \n\t"
        ".endr");
        __asm__ volatile("mov x12, 2");
        for (i = 0; i < INTRA_LOOP_SIZE; i++) {
            __asm__ volatile("sdiv x11, x11, x12");
        }
    }
  5. 源码优化。

    在源码内对关键函数CoreBoundBench_OPT进行修改,利用移位操作代替除法操作,从而减小core bound占比。

    void CoreBoundBench_OPT()
    {
        int i;
        __asm__ volatile(".rept 3   \n\t"
        "nop       \n\t"
        ".endr");
        for (i = 0; i < INTRA_LOOP_SIZE; i++) {
            __asm__ volatile("lsr x11, x11, #1");
        }
    }
  6. 将修改后源码重新编译。

    使用1中的命令重新编译应用并使用工具进行分析。

优化效果

优化后,应用执行时间缩短,同时Core Bound占比由87.4%下降为0.11%。