RGB2GRAY 各种算法速度比较,整形乘法比查表法快!
1. 查表法,外循环用 这种格式 :
//for(int j = 0; j != h; ++j)// for(int i = 0; i!=w;++i)//、
for(int j = 0; j != h; ++j)
for(int i = 0; i!=w;++i)
{
int r,g,b,y,r1,g1,b1,y1;
r = D[in[of3]];//查表 //这里给第一个ALU执行
g = E[in[of3+1]];
b = F[in[of3+2]];
y = r + g + b;
out[of] = y;
of3 +=3;
of+=1;
}
耗时: 1000ms
2. 查表法, 外循环用这种格式 : for(int i = 0; i != img_size; ++i)
for(int i = 0; i != img_size; ++i)
{
int r,g,b,y,r1,g1,b1,y1;
r = D[in[of3+2]];//查表 //这里给第一个ALU执行
g = E[in[of3+1]];
b = F[in[of3]];
y = r + g + b;
out[i] = y;
of3 +=3;
}
耗时 700ms
3. 整形乘法, 1ALU
for(int i = 0; i != img_size; ++i)
{
int r,g,b,y,r1,g1,b1,y1;
r = 1224 * in[of3+2];
g = 2404 * in[of3+1];
b = 467 * in[of3];
y = r + g + b;
y = y >> 12; //这里去掉了除法运算
out[i] = y;
of3 +=3;
}
耗时: 550ms
4. 整形乘法 : 2ALU
for(int i = 0; i != img_size; i+=2) //一次并行处理2个数据
{ int r,g,b,y,r1,g1,b1,y1; r = 1224 * in[of6+2];
g = 2404 * in[of6+1];
b = 467 * in[of6];
y = r + g + b;
y = y >> 12;
out[i] = y; r1 = 1224 * in[of6+5];
g1 = 2404 * in[of6+4];
b1 = 467 * in[of6+3];
y = r1 + g1 + b1;
y = y >> 12;
out[i + 1] = y;
of6 += 6;
//of += 1;
}
耗时:450ms
5. 根据实验,发现bgr2y 函数是否加inline 对耗时无明显影响, 为了保险,还是应该加上inline。
思考:
1. 2ALU算法比1ALU算法快10%~25%
2.整形乘法法比查表法快 18%,至于为什么会比查表法快,是因为现在的CPU使用的都是硬件乘法器,比操作内存要快!!
RGB2GRAY 各种算法速度比较,整形乘法比查表法快!的更多相关文章
- 经典算法,yuv与rgb互转,查表法,让你的软件飞起来
代码的运算速度取决于以下几个方面 1. 算法本身的复杂度,比如MPEG比JPEG复杂,JPEG比BMP图片的编码复杂. 2. CPU自身的速度和设计架构 3. CPU的总线带宽 4. 您自己代码的写法 ...
- JS写的CRC16校验算法(查表法)
var CRC = {}; CRC._auchCRCHi = [ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0 ...
- Python 八大排序算法速度比较
这篇文章并不是介绍排序算法原理的,纯粹是想比较一下各种排序算法在真实场景下的运行速度. 算法由 Python 实现,用到了一些语法糖,可能会和其他语言有些区别,仅当参考就好. 测试的数据是自动生成的, ...
- AVX图像算法优化系列二: 使用AVX2指令集加速查表算法。
查表算法,无疑也是一种非常常用.有效而且快捷的算法,我们在很多算法的加速过程中都能看到他的影子,在图像处理中,尤其常用,比如我们常见的各种基于直方图的增强,可以说,在photoshop中的调整菜单里8 ...
- Lasso回归算法: 坐标轴下降法与最小角回归法小结
前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结.里面对线程回归的正则化也做了一个初步的介绍.提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归.但是对 ...
- python 下的数据结构与算法---2:大O符号与常用算法和数据结构的复杂度速查表
目录: 一:大O记法 二:各函数高阶比较 三:常用算法和数据结构的复杂度速查表 四:常见的logn是怎么来的 一:大O记法 算法复杂度记法有很多种,其中最常用的就是Big O notation(大O记 ...
- SQL自连接(源于推荐算法中的反查表问题)
”基于用户的协同过滤算法“是推荐算法的一种,这类算法强调的是:把和你有相似爱好的其他的用户的物品推荐给你. 要实现该推荐算法,就需要计算和你有交集的用户,这就要用到物品到用户的反查表. 先举个例子说明 ...
- 机器学习算法 Python&R 速查表
sklearn实战-乳腺癌细胞数据挖掘( 博主亲自录制) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...
- 设顺序表中的数据元素递增有序,试着写一算法,将x插入到顺序表上的适当位置上,以保持该表的有序性。
原创,转载请注明出处.https://www.cnblogs.com/yangf428/p/11254370.html 天勤例题[2-1]: 设顺序表va中的数据元素递增有序.试写一算法,将x插入到顺 ...
随机推荐
- springboot批量读取参数映射到实体类
spring读取配置参数可以通过${name}的方式获取,如properties文件中存在如下配置 person.username=xi 则可通过${person.username}获取其对应的值xi ...
- DataFactory连接MySQL数据库
1.下载驱动 https://dev.mysql.com/downloads/connector/odbc/ 需要使用oracle登录账号密码后才能下载 下载完成后进行安装,一路下一步即可 2.连接m ...
- 【转载】网页JS获取当前地理位置(省市区)
眼看2014又要过去了,翻翻今年的文章好像没有写几篇,忙真的或许已经不能成为借口了,在忙时间还是有的,就像海绵里的水挤挤总会有滴.真真的原因是没有学习过什么新的技术,工作过程中遇到的问题也不是非常难并 ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-8.用户模块开发之保存微信用户信息
笔记 8.用户模块开发之保存微信用户信息 简介:开发User数据访问层,保存微信用户信息 问题: 微信回调 用户昵称乱码 解决: ...
- redis运维手册
版本采用:redis-3.2.11.tar.gz 官网下载地址:https://redis.io/download 1.redis服务器资源 redis服务器基础配置CPU2核.内存按需分配,系统磁盘 ...
- LAMP之Apache调优
一.环境的搭建 实验环境: 操作系统:Centos 7.4 [root@xuegod70 ~]# ls apr-1.6.3.tar.gz apr-util-1.6.1.tar.bz2 httpd-2. ...
- mysql安装报错error: Header V3 DSA signature: BAD, key ID
CentOS安装rpm安装MySQL时爆出警告: warning: mysql-community-server-5.7.18-1.el6.x86_64.rpm: Header V3 DSA/SHA1 ...
- Java类的加载及初始化
每个类的编译代码都存在于它自己的独立文件中,该文件在需要使用该程序代码时才会被加载.通常有以下三种加载情况: (1) 访问了子类的静态变量或静态方法:仅对类的静态变量,静态块执行初始化操作,并仅初始化 ...
- 阿里云window server2012 r2服务器安装sql server2014配置成本地management工具连接
1.关服务器防火墙. 2.阿里云管理控制台配置安全组, 3.进入服务器,打开
- MongoDB导入文件夹(内含json和bson文件)
1. 使用mongo命令将数据库删除: mongo命令: use db_name; db.dropDatabase() 2. 导入(指定文件夹)数据: linux命令: mongorestore -d ...