技术标签: CUDA loop unrolling 循环展开
参考: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块数目与线程处理时间之间的处理平衡,达到性能最大优化。
Mybatis错误笔记菜鸟一枚,在学习Mybatis的时候,搭建新手项目,出了不少错误,这里铭记一下,警示自己!因为需要还原错误,所以错误的顺序是倒着进行的!Mybatis学习笔记1,一个简单的demo1.得到空指针null得到空指针的问题有很多,我在项目中是因为传入的id属性是数据库中没有的,所以返回NULL类型。2.serverTimezone=UTC产生的错误org.apach...
VTK 9.0 源码编译的CMake选项VTK 9.0 使用源码编译的CMake选项VTK 9.0 使用VTK 已经Release到9.0的版本了,对于python使用VTK 9.0, 有二种方式.一种是可以使用 pip install vtk另一种是使用源码编译。源码编译时,会有一些选项。对于 vtk 有一些remote 功能,如 poissionReconstruction, SplineDrivenImageSlicer等。如果要使用的话,必须自己编译源码。源码编译的CMake选项
版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/svitter/article/details/24904105 ...
烧录环境模组型号:ESP32-WROVER-E使用工具(官网可下载):flash_download_tool_v3.8.5_1.zip固件包(官网可下载):ESP32-WROVER_AT_Bin_V2.0flash_download_tool的配置:1、打开flash_download_tool_v3.8.5.exe选择Developer Mode2、选择ESP32 Download Tool3、根据固件包内download.config文件配置工具固件包里有download.
在Windows操作系统下,为了获得高精度的定时器,大多数时候采用多媒体定时器,其分辨率可达到1ms,适用于对实时性要求比较高的场合(虽然Windows自身为非实时系统,但是在很多场合还是够用的);而SetTimer提供的定时精度相比较而言,不太精确,适用于对时间性要求不高的系统里面。当我们使用Visual C++作为开发语言时,调用多媒体定时器的API函数即可解决定时器问题;但是有时候需要采
HTTP协议Header介绍 查看Header: 选中一个HTTP请求--->单击Inspectors tab--->request tab--->Headers Cache相关的Header: HTTP请求和HTTP响应中有很多用于缓存的Header HTTP缓存是指当Web请求抵达缓存时,...
本文首发于政采云前端团队博客:浅析 vue-router 源码和动态路由权限分配https://www.zoo.team/article/vue-router-analysis背景上月立...
要显示JTable组件(需要用到)TableModel接口(需要下面这个类才能实现)DefaultTableModel类主要步骤:创建表格模型对表格模型进行操作将表格模型添加到表格JTable中将JTable添加到滚动面板上(JScrollPane) //第一步:创建表格模型 DefaultTableModel tablemodel = new DefaultTableMo...
错误截图错误分析遇到这种sql语法错误,可以直接将sql语句复制到数据库中看看把?改成数据可以更好的分析报错原因错误原因这里数据库里有个字段group与sql语句里的关键字重名了所以发生报错解决方案修改字段名即可修改后...
在做莫烦的神经网络mnist手写字体数据分类的时候,遇到了bugConnectionAbortedError: [WinError 10053]在网上找了一天也没找到,其他人报错基本上都是写爬虫的时候的错误,我在想可能还是网络的问题,下载mnist数据包的源地址可能速度并不快,在网上找了下载mnist时timeout的解决方法,解决了bug在错误信息里面找到mnist,py文件,点进去:然后修改最上面的mnist数据来源:把原来的DEFAULT_SOURCE_URL = ‘https://st
外卖CPS红包小程序源码分享外卖返利小程序饿了么美团吃喝玩乐电影票对接公众号返利系统分销系统源码【小程序】外卖CPS优惠券小程序平台v3.0源码外卖红包小程序 美团外卖小程序 饿了么外卖小程序 美团饿了吗技术栈服务端api基于Node.js+ThinkJS+MySQL后台管理 基于VUE.js+element-ui小程序基于Trao饿了么、美团优惠开发(外卖cps,三级裂变源码)源码搭建https://gitee.com/my-humble-opinion/rowew_eeee截图
1.学会写简单的makefile2.编一应用程序,可以用makefile跑起来3.学会写驱动的makefile4.写一简单char驱动,makefile编译通过,可以insmod,lsmod,rmmod.在驱动的init函数里打印helloworld,insmod后应该能够通过dmesg看到输出。5.写一完整驱动,加上read,wr...