循环优化:2:使用条件数据传送代替条件转移

本文探讨了现代计算机中流水线处理数据的方式,特别是如何处理条件转移指令。通过提供一个将条件转移控制改为条件数据传送的示例,展示了如何减少流水线中的分支预测错误,从而提高代码效率。优化后的代码减少了对条件分支的依赖,改善了程序性能。
摘要由CSDN通过智能技术生成

背景:现代计算机采用流水线工作的方式处理数据,即在取一条指令的同时执行它前面一条指令的算术运算。要做到这一点,需要在执行前一条指令的同时,知道随后需要执行的指令序列,从而使指令充满流水线。当遇到条件转移指令的时候,由于不能确定随后需要执行的指令,编译器衍生出了一种预测分支方向的功能,但是这种功能的正确率不会在所有情况下都一样高。所以需要编写程序的一方,来尽量减少这种情况的出现。
列举一个将条件数据转移的控制方式,修改成条件数据传送方式的例子:

// rearrange two vector for a[i] >= b[i]  (premise a.size() == b.size())
void rearrange(vector<int>&a, vector<int>&b) {
	size_t i;
	for (i = 0; i < a.size(); ++ i) {
		if (a[i] < b[i]) {
			int temp = a[i];
			a[i] = b[i];
			b[i] = temp;
		}
	}
}
// 修改后:
void rearrange(vector<int>&a, vector<int>&b) {
	size_t i;
	for (i = 0; i < a.size(); ++ i) {
		int max = a[i] >= b[i] ? a[i] : b[i];
		int min = a[i] >= b[i] ? b[i] : a[i];
		a[i] = max;
		b[i] = min;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值