关于《深入理解计算机系统》代码加速的思考

在《深入理解计算机系统》这本书的时候,有一个这样的知识点引起了我的注意:

例如下面这段代码:

代码1:

	const int length = 100000;
	float data[length];
	memset(data,1,sizeof(float)*length);

	for ( int i = 0; i < length; ++i )
	{
		data[i] = 3.0;
	}

我们在使用这个循环的时候,如果改用下面的这种形式:

代码2:

for ( int i = 0; i < length - 3; i += 3 )
	{
		data[i] = 3.0;
		data[i+1] = 3.0;
		data[i+2] = 3.0;

	}


也就是在循环中每次处理三个数据,那么时间会大大降低,书中称为“unrolling"技术。

我想每次都用三个变量,同时处理三个数据会有神马效果呢?下面的代码3是我自己的想法

代码3:

int maxI = length/3;
	int maxJ = 2*length/3;
	for ( int i=0,j=length/3+1,k=2*length/3 +1; i<maxI && j<maxJ && k<length; ++i,++j,++k)
	{
		data[i] = 3.0;
		data[j] = 3.0;
		data[k] = 3.0;
	}

下面分别是debug和release版本的时间复杂度对比:

 debugrelease
代码10.242ms0.0ms
代码20.101ms0.055ms
代码30.121ms0.076ms

大家首先对比代码1和代码2

在debug模式下,《深入理解计算机系统》这本书中提到的技术的确可以加速代码,但是在release版本下反而没有我们惯用的循环的效率高,我想大概是针对代码1,牛B的编译器可以对其进行深度的优化,(有可能就用到了类似memset类似的东西),但是对于代码2,这种不太“正常”的做法反而降低了编译器的优化效率。


代码3和代码2的原理一样,就是实现的时候方式不一样,因为多了几个变量,所以每次循环的时候负担略大,比代码2的时间复杂度高一点也可理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PcBoost能够帮助你增强电脑性能,使电脑运行更迅速、更稳定。PcBoost将在系统托盘中运行,控制和管理CPU的使用情况。每当你开始一个新的应用程序,PcBoost便会重新分配电脑的内存,以避免不必要的崩溃。 直观的交互式程序界面简单易用,即便你是一个新手,也能顺利的完成操作。程序安装完成之后,我们只需将鼠标放在系统托盘中的程序图标上,便能看到当前CPU的使用情况以及正在运行的程序。 官方介绍: PcBoost是一个可以快速运行程序的工具。只需要你一点努力就能使你的程序和游戏比没有在使用这个产品的计算机上更快,许多程序和游戏经常使用一个最小量的CPU功能,导致CPU空闲和实际上并非总是使用那么多。 pcboost 可以安全高效的增强你的系统性能达100%以上!您的电脑常常当机吗?开机非常龟速吗?有私人档案需要作保护吗?pcboost 正是您所需要的软体!2 分钟内帮您完成系统自动加速;当然,也可以手动个别设定调整,包括桌面、开始功能表、网路、硬体、光碟机、记忆体、关机的优化。 软件特点 1、更改前台及后台程序运行优先级,从而显着提高系统运行速度 2、可智能调节CPU使用率,保证CPU处于供给有余的状态 3、解锁硬件性能,可接触各种隐藏限制 4、本款电脑加速工具可以分配更多的CPU能力给活动的程序或游戏 5、所有这些都是自动地完成,不需要你动一个手指,它对你的电脑没有一点损害。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值