除法的效率 arm处理器

除法的效率

性能结论:

除法:545ms

乘法:93ms

差了3倍

代码:

复制代码
#define CNT (1000)
#define factor (0.666667)  // 乘法0.666667 ,除法时 1/1.5
void parse3AState(Pack1* in, Pack2* out) {
    for (int i = 0; i < CNT; i++) {
        out[i].a1.a = in[i].a1.a * factor;
        out[i].a1.b = in[i].a1.b * factor;
        out[i].a1.c = in[i].a1.c * factor;
        //
        out[i].a2.a = in[i].a2.a * factor;
        out[i].a2.b = in[i].a2.b * factor;
        out[i].a2.c = in[i].a2.c * factor;

        out[i].a3.a = in[i].a3.a * factor;
        out[i].a3.b = in[i].a3.b * factor;
        out[i].a3.c = in[i].a3.c * factor;
    }
    return;
}

int parseTest() {
    int cnt = 1000* 10;
    Pack1 in[CNT] = {0};
    Pack2 out[CNT] = {0};
    memset(in, 1, sizeof(in));
    memset(out, 1, sizeof(out));
    for (int i =0; i < cnt; i++) {
        parse3AState(in, out);
    }
    return cnt;
}

测试结果 :

复制代码
perfile_monitor_test_fun()  E

cpu cycles:      1079996448      cycles per loop:        107999.645
inst cnt:        260163128        insts per loop:        26016.313
cache misses:    14571430
cache ipc:       0.240893
perfile_monitor_test_fun()  X.   perf:545.50ms

perfile_monitor_test_fun()  E

cpu cycles:      179856277       cycles per loop:        17985.628
inst cnt:        270163809        insts per loop:        27016.381
cache misses:    14543847
cache ipc:       1.502109
perfile_monitor_test_fun()  X.   perf:93.20ms

使用__restrict__

void fun(Pack1* restrict in, Pack2* restrict out) ;
__restrict__ 申明该指针为唯一的访问该内存的指针

优化成果:

  • 时间优化为原来的82%
  • 指令优化为74%
  • cache miss 没有变化

优化对比

复制代码
优化前
  cpu cycles: 3864307714         cycles per loop: 38643.077
    inst cnt: 5633595795          insts per loop: 56335.958
cache misses: 295589314
         ipc: 1.458
perfile_monitor_test_fun()  X.   perf:1953.13ms

优化后
  cpu cycles: 3204657277         cycles per loop: 32046.573
    inst cnt: 4199995460          insts per loop: 41999.955
cache misses: 295200231
         ipc: 1.311

perfile_monitor_test_fun()  X.   perf:1621.12ms

测试平台

MTK arm天机 8000

相关推荐
GalaxyPokemon1 小时前
归并排序:分治思想的高效排序
数据结构·算法·排序算法
ThreeYear_s1 小时前
基于FPGA的PID算法学习———实现PI比例控制算法
学习·算法·fpga开发
Coding小公仔3 小时前
LeetCode 240 搜索二维矩阵 II
算法·leetcode·矩阵
C++chaofan3 小时前
74. 搜索二维矩阵
java·算法·leetcode·矩阵
青小莫4 小时前
数据结构-C语言-链表OJ
c语言·数据结构·链表
Studying 开龙wu4 小时前
机器学习监督学习实战五:六种算法对声呐回波信号进行分类
学习·算法·机器学习
Mi Manchi264 小时前
力扣热题100之二叉树的层序遍历
python·算法·leetcode
wu~9704 小时前
leetcode:42. 接雨水(秒变简单题)
算法·leetcode·职场和发展
zhurui_xiaozhuzaizai6 小时前
模型训练-关于token【低概率token, 高熵token】
人工智能·算法·自然语言处理