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插入到顺 ...
随机推荐
- CentOS / RHEL 配置yum源
CentOS / RHEL 配置yum源 */--> CentOS / RHEL 配置yum源 Table of Contents 1. 前言 2. 关于yum 2.1. yum是什么 2.2. ...
- 在Android初次的前期学习中的二个小例子(2)
Hello13:SQLite数据库 一.简述SQLite的概念和主要特性 SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,使用非常方便,支持SQL语法标准和数据库事务原则. 相对于Sh ...
- 部署Hadoop-3.0-高性能集群
一.Hadoop概述: Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储.Hadoop的框 ...
- leetcode 257. 二叉树的所有路径 包含(二叉树的先序遍历、中序遍历、后序遍历)
给定一个二叉树,返回所有从根节点到叶子节点的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 输入: 1 / \2 3 \ 5 输出: ["1->2->5", & ...
- iOS开发UIkit动力学UIDynamicAnimator一系列动画
UIDynamicAnimator类,通过这个类中的不同行为来实现一些动态特性. UIAttachmentBehavior(吸附),UICollisionBehavior(碰撞),UIGravityB ...
- jenkins配置jdk、git、maven
进入首页->系统管理->全局工具配置 配置jdk 查找jdk安装路径 如果是容器版jenkins,就登进容器里面查看jdk路径 [root@test2 ~]# echo $JAVA_HOM ...
- laravel redis存数组并设置过期时间
$data = [ 'zoneList'=>$zoneList, 'eqList' => $eqList, 'mdateList' => $mdateList ]; Redis::s ...
- Trie代码学习
感觉不把这个Trie理解一下,AC自动机的代码看起来有点费劲. 这里代码的学习仿照训练指南209页. 这里如果只是查询单词,感觉用map更好,但是如果查前缀,还是用Trie. 1.Trie查询前缀字符 ...
- express服务端
1. 使用 Node.js + Express 开发服务端 2. 使用 Node.js + Express+MySQL 实现简单的增删改查 3. 初识NodeJS服务端开发(Express+MySQL ...
- spring-boot集成8:集成shiro,jwt
Shrio是一个轻量级的,基于AOP 和 Servlet 过滤器的安全框架.它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权. JWT(JSON Web Token)是 ...