对于一个可结合和可交换的合并操作来说,比如整数的加法或乘法,

我们可以通过将一组合并操作分割成 2 个或更多的部分,并在最后合并结果来提高性能。

原理:

普通代码只能利用 CPU 的一个寄存器,分割后可以利用多个寄存器。

当分割达到一个数量时,寄存器用完,性能不再提升,甚至会开始下降。

用代码来描述,如下:

// 一般情况下的代码
for (i = ; i < n+; i++)
{
res = res OPER i;
} // 循环分割后代码
for (i = ; i < n; i+=)
{
res1 = res1 OPER i;
res2 = res2 OPER (i+);
}

int 整数加法,性能测试结果对比如下:

整数的加法,普通代码运行 26s,循环分割后,18s。

浮点数计算的性能提升,明显大于整数,乘法的性能提升,略大于加法。

完整测试代码:

#include <time.h>
#include <iostream>
#define OPER +
#define INIT 0 using namespace std; int calc1(int n)
{
int i;
int res = INIT; for (i = ; i < n+; i++)
{
res = res OPER i;
} return res;
} int calc2(int n)
{
int i;
int res1 = INIT;
int res2 = INIT; for (i = ; i < n; i+=)
{
res1 = res1 OPER i;
res2 = res2 OPER (i+);
}
for (; i < n+; i++)
{
res1 = res1 OPER i;
} return res1 OPER res2;
} typedef int (*FUNC)(int n); int time_test(FUNC calc, int param)
{
cout << " Result: " << calc(param) << "\t";
time_t t_begin;
time(&t_begin); for (int i = ; i < ; i++)
for (int j = ; j < ; j++)
calc(param); time_t t_end;
time(&t_end);
cout << "Time Cost: " << difftime(t_end, t_begin) << endl;
} int main()
{
cout << "calc1 ";
time_test(calc1, ); cout << "calc2 ";
time_test(calc2, );
return ;
}

C++ 代码性能优化 -- 循环分割提高并行性的更多相关文章

  1. Python 代码性能优化技巧(转)

    原文:Python 代码性能优化技巧 Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化. ...

  2. JavaScript代码性能优化总结

    JavaScript 代码性能优化总结 尽量使用源生方法 javaScript是解释性语言,相比编译性语言执行速度要慢.浏览器已经实现的方法,就不要再去实现一遍了.另外,浏览器已经实现的方法在算法方面 ...

  3. 针对于Java的35 个代码性能优化总结

    针对于Java的35 个代码性能优化总结前言代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的 ...

  4. Java开发中程序和代码性能优化

    现在计算机的处理性能越来越好,加上JDK升级对一些代码的优化,在代码层针对一些细节进行调整可能看不到性能的明显提升, 但是我觉得在开发中注意这些,更多的是可以保持一种性能优先的意识,对一些敲代码时间比 ...

  5. Java开发代码性能优化总结

    代码优化,可能说起来一些人觉得没用.可是我觉得应该平时开发过程中,就尽量要求自己,养成良好习惯,一个个小的优化点,积攒起来绝对是有大幅度效率提升的.好了,将平时看到用到总结的分享给大家. 代码优化的目 ...

  6. 35个java代码性能优化。。转

    前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑 的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用 ...

  7. 35 个 Java 代码性能优化总结

    前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用, ...

  8. Java 代码性能优化总结

    前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用, ...

  9. java代码性能优化总结(转载)

    原文链接:http://developer.51cto.com/art/201511/496263.htm 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改 ...

随机推荐

  1. Windows 环境下基于 nginx 的本地 PyPI 源

    Windows 环境下基于 nginx 的本地 PyPI 源的搭建: 1.登录 nginx 官网,下载安装包

  2. JavaScript 要点(十四)HTML DOM 元素(节点)

    A.创建新的 HTML 元素 如需向 HTML DOM 添加新元素,必须首先创建该元素(元素节点),然后向一个已存在的元素追加该元素. <div id="div1"> ...

  3. Asp.Net Core- 配置组件详解

    我们之前写的配置都是放置在配置文件Web.config或者app.config中,.net core提供了全新的配置方式,可以直接写在内存中或者写在文件中. .Net Core的配置API主要体现在3 ...

  4. cocos2d-x 屏幕坐标系和OPenGL坐标系转换

    转自:http://home.cnblogs.com/group/topic/57609.html cocos2d坐标系(OPenGL坐标系):以左下角为原点,x向右,y向上 屏幕坐标系(androi ...

  5. 【转载】Android Studio 设置内存大小及原理

    http://www.cnblogs.com/justinzhang/p/4274985.html http://tsroad.lofter.com/post/376316_69363ae Andro ...

  6. IOS7 隐藏状态栏

    - (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } // - (BOOL)pref ...

  7. 使用CATransition实现页面的“从左向右” “从右向左”的动画

    -(void)initView{ UISwipeGestureRecognizer *left_gesture=[[UISwipeGestureRecognizer alloc]initWithTar ...

  8. 【20】宁以pass-by-reference-to-const替换pass-by-value

    1.首先理解需求,被调用方法修改了形参,如果期望在主调方法中的实参也发生变化,必须使用pass-by-reference.因为C++缺省情况下(继承C方式),以by-value传递对象,在被调方法中修 ...

  9. Codeforces Round #322 (Div. 2) A. Vasya the Hipster 水题

    A. Vasya the Hipster Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/581/p ...

  10. 使用Zipalign工具优化Android APK应用记录

    生成的Android应用APK文件最好进行优化,因为APK包的本质是一个zip压缩文档,经过优化能使包内未压缩的数据有序的排列,从而减少应用程序运行时的内存消耗.我们可以使用Zipalign工具进行A ...