csapp程序优化

一、局限性

编译器 安全 保守

妨碍优化的方面:

1、内存别名使用

多个指针指向同一个地址

2、函数调用

编译器不优化防止全局变量产生影响

程序性能评价 CPE

二、循环的优化

1、代码移动

IMG_20220420_185356

2、减少过程调用

将重复调用的过程移动到循环外

3.消除不必要的内存引用

image-20220420185902024

三、现代处理器优化策略

核心: 指令级并行

延迟界限:下一条指令前执行完

吞吐量界限:计算单元限x制

1、整体操作

(超标量)乱序并行

2.功能单元的性能

延迟:完成运算的时间

发射时间:两个连续同类型运算之间的最小间隔周期

容量:能够执行该运算的功能单元个数(同时能发射多少个)

image-20220420193245215

3、循环展开

(1)一次运行两个

image-20220420194552078

2*1
void unroll2a_combine(vec_ptr v, data_t *dest)
{
    //循环展开,由于加载单元只有两个
    //两两展开
/* Combine 2 elements at a time */
for (i = 0; i < limit; i+=2) {
x = (x OP d[i]) OP d[i+1];
}
    //剩下一个
for (; i < length; i++) {
x = x OP d[i];
}*dest = x;
}

image-20220420194136601


(2)重新组合
2*a
void unroll2aa_combine(vec_ptr v, data_t *dest) {
/* Combine 2 elements at a time */
for (i = 0; i < limit; i+=2) {
x = x OP (d[i] OP d[i+1]); }//
/* Finish any remaining elements */
for (; i < length; i++) {
x = x OP d[i];
}*dest = x;
}

image-20220420194650200


(3)两个负载单元
/* Combine 2 elements at a time */
for (i = 0; i < limit; i+=2) {
x0 = x0 OP d[i];
x1 = x1 OP d[i+1];
}
/* Finish any remaining elements */
for (; i < length; i++) {
x0 = x0 OP d[i];
}
*dest = x0 OP x1;

image-20220420195525958

image-20220420195333213

i];
}
*dest = x0 OP x1;


[外链图片转存中...(img-1UwBRh3H-1650973951342)]

[外链图片转存中...(img-s64S2DiK-1650973951343)]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值