参考:http://blog.csdn.net/canhui_wang/article/details/52919318

loop unrolling 不同于内存优化(hardware accessing),这是一种指令级优化(software programming)。如果说编程上For循环是一种以计算性能的打折作为代价来实现编程的简单化的编程思路,那么Loop unrolling将是一种以编程复杂为代价来提升并行代码性能的高级的编程方式;更进一步地,For循环可以看成是loop unrolling零优化的状态;所以,计算性能loop unrolling严格优于或至少等于For语句——这是CPU,GPU的硬件的系统结构所致。

举例分析如下:

loop_unrolling.cpp

#include <iostream>
#include <windows.h>
#pragma comment(lib, "Winmm.lib")   //timeGetTime() using namespace std;int main()
{int N = 10000000;DWORD start, end1,end2;start = timeGetTime();int *a = (int*)malloc(sizeof(int) * N);//传统实现for (int i = 0; i < N; i++) {a[i] = i*2;}end1 = timeGetTime();cout <<"传统实现时间:"<< (end1 - start) << " ms" << endl;//指令并行化for (int i = 0; i < N; i = i + 2) {a[i] = i * 2;a[i + 1] = (i + 1) * 2;}end2 = timeGetTime();cout << "指令并行化实现时间:"<< (end2 - end1) << " ms" << endl;return 0;
}

运行结果:

Unrolling Loop可以进一步抽象出“并行粒度”的概念,比如,例子一中一个线程处理一个指令(任务轻),例子二中一个线程处理两个指令(任务重);另一方面,就CUDA而言,例子一需要的blocks数目少,例子二需要的blocks数目多。因为总体的性能是由线程执行时间与blocks数目决定的(线程计算能力范围内任务轻重耗时相近,计算能力外任务重耗时大;并行blocks能力范围内(比如NVIDIA GTX780Ti一次可并行192blcoks)blcoks的数目多数目少二者耗时相近),能力范围外,blocks数多点调度数目多点,耗时长点————总而言之,这是一个tradeoff问题,我们做的就是寻找一种策略在blocks块数目与线程处理时间之间的处理平衡,达到性能最大优化。

简单介绍CUDA中loop unrolling(循环展开)技术相关推荐

  1. 简单介绍Java中Comparable和Comparator

    转载自 简单介绍Java中Comparable和Comparator Comparable 和 Comparator是Java核心API提供的两个接口,从它们的名字中,我们大致可以猜到它们用来做对象之 ...

  2. python中len用法_简单介绍Python中的len()函数的使用

    简单介绍Python中的len()函数的使用 函数:len() 1:作用:返回字符串.列表.字典.元组等长度 2:语法:len(str) 3:参数:str:要计算的字符串.列表.字典.元组等 4:返回 ...

  3. 简述python中的几种数据类型,简单介绍Python中的几种数据类型

    简单介绍Python中的几种数据类型 python 里面分为 基本数据类型 和 复合数据类型 基本数据类型包括:数值 字符串 布尔 和 none 复合数据类型包括:列表 元组 字典 和集合怎么算是深情 ...

  4. 简单介绍Python中的几种数据类型

    大体上把Python中的数据类型分为如下几类: Number(数字) 包括int,long,float,complex String(字符串) 例如:hello,"hello",h ...

  5. len函数python返回值类型_简单介绍Python中的len()函数的使用

    01状态机介绍 游戏中的状态机一般都是有限状态机,简写为FSM(有限状态机),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型. 状态机的每一个状态至少需要有以下三个操作: ...

  6. 简单介绍ASP中Cache技术的应用

    ASP从发布至今已经7年了,使用ASP技术已经相当成熟,自从微软推出了ASP.NET之后就逐渐停止了对ASP版本的更新.但是由于有很多人仍然习惯使用ASP来开发网站,所以,再次我将以一个简单的例子来说 ...

  7. 简单介绍pytorch中分布式训练DDP使用 (结合实例,快速入门)

    文章目录 DDP原理 pytorch中DDP使用 相关的概念 使用流程 如何启动 torch.distributed.launch spawn调用方式 针对实例voxceleb_trainer多卡介绍 ...

  8. 简单介绍Tomcat中catalina.out 和 catalina.log的区别和用途

    本文主要介绍了Tomcat中catalina.out 和 catalina.log的区别和用途详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 catalina. ...

  9. 简单介绍SQLserver中的declare变量用法

    这篇文章主要介绍了SQLserver中的declare变量用法,sql中declare是声明的意思,就是声明变量的,这个一般是用在函数和存储过程中的.感兴趣的可以来了解一下 平时写SQL查询.存储过程 ...

最新文章

  1. 【SVO2.0 安装编译】Ubuntu 20.04 + Noetic
  2. mybatis3+struts2+oracle整合的一个好的demo
  3. Oracle11g R2学习系列 之六数据库链接,快照及序列
  4. boost::gil模块计算直方图的测试程序
  5. ValueError: The QuerySet value for an exact lookup must be limited to one result using slicing.
  6. .net身份证号码验证
  7. python求平方根的代码_Python求解平方根的方法
  8. C语言试题十六之写删除字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。
  9. Linux---阻塞与非阻塞、同步与异步的区别
  10. Java接口xss,Java审计之XSS篇
  11. TPLINK-WR720N刷openwrt
  12. php读取excel显示,PHP读取Excel并展示实现代码
  13. 3600000毫秒等于多少小时_一秒多少毫秒
  14. 定位系统完美拍档——无线继电器
  15. C++中exchange()函数的使用方法(例题)
  16. IBM JDK官方下载地址
  17. 【原创项目】GC Server 更新
  18. 求教吉他继续提高的方法
  19. 日本机器自动化初创企业Cinnamon获天使轮融资
  20. FFMPEG 显示音频频谱图

热门文章

  1. 网规:第1章计算机网络原理-1.4网络设备与网络软件
  2. Dotnet程序集自动生成版本号
  3. JavaThread学习
  4. 数字权限管理(DRM)技术
  5. 16、document的_source元数据以及定制返回结果解析
  6. python浏览器怎么设置_怎么设置jupyter的默认浏览器
  7. 本地计算机策略未创建,未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序...
  8. Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization)
  9. 导出csv文件数字会自动变科学计数法的解决方式
  10. java代码内创建mysql索引_点评阿里JAVA手册之MySQL数据库 (建表规约、索引规约、SQL语句、ORM映射)...