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 各种算法速度比较,整形乘法比查表法快!的更多相关文章

  1. 经典算法,yuv与rgb互转,查表法,让你的软件飞起来

    代码的运算速度取决于以下几个方面 1. 算法本身的复杂度,比如MPEG比JPEG复杂,JPEG比BMP图片的编码复杂. 2. CPU自身的速度和设计架构 3. CPU的总线带宽 4. 您自己代码的写法 ...

  2. JS写的CRC16校验算法(查表法)

    var CRC = {}; CRC._auchCRCHi = [ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0 ...

  3. Python 八大排序算法速度比较

    这篇文章并不是介绍排序算法原理的,纯粹是想比较一下各种排序算法在真实场景下的运行速度. 算法由 Python 实现,用到了一些语法糖,可能会和其他语言有些区别,仅当参考就好. 测试的数据是自动生成的, ...

  4. AVX图像算法优化系列二: 使用AVX2指令集加速查表算法。

    查表算法,无疑也是一种非常常用.有效而且快捷的算法,我们在很多算法的加速过程中都能看到他的影子,在图像处理中,尤其常用,比如我们常见的各种基于直方图的增强,可以说,在photoshop中的调整菜单里8 ...

  5. Lasso回归算法: 坐标轴下降法与最小角回归法小结

    前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结.里面对线程回归的正则化也做了一个初步的介绍.提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归.但是对 ...

  6. python 下的数据结构与算法---2:大O符号与常用算法和数据结构的复杂度速查表

    目录: 一:大O记法 二:各函数高阶比较 三:常用算法和数据结构的复杂度速查表 四:常见的logn是怎么来的 一:大O记法 算法复杂度记法有很多种,其中最常用的就是Big O notation(大O记 ...

  7. SQL自连接(源于推荐算法中的反查表问题)

    ”基于用户的协同过滤算法“是推荐算法的一种,这类算法强调的是:把和你有相似爱好的其他的用户的物品推荐给你. 要实现该推荐算法,就需要计算和你有交集的用户,这就要用到物品到用户的反查表. 先举个例子说明 ...

  8. 机器学习算法 Python&R 速查表

    sklearn实战-乳腺癌细胞数据挖掘( 博主亲自录制) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...

  9. 设顺序表中的数据元素递增有序,试着写一算法,将x插入到顺序表上的适当位置上,以保持该表的有序性。

    原创,转载请注明出处.https://www.cnblogs.com/yangf428/p/11254370.html 天勤例题[2-1]: 设顺序表va中的数据元素递增有序.试写一算法,将x插入到顺 ...

随机推荐

  1. [log4j]Error:The method getLogger(String) in the type Logger is not applicable for the arguments

    原因:本该导入import org.apache.log4j.Logger; 结果成了import java.util.logging.Logger; 如果硬把private static Logge ...

  2. 前端知识点回顾之重点篇——JavaScript异步机制

    JavaScript异步机制 来源:https://www.cnblogs.com/zhaodongyu/p/3922961.html JavaScript是单线程异步执行的,单线程意味着代码在任务队 ...

  3. shiro中接入单点登录功能

    最近新建的系统中使用了shiro,而shiro框架中包含登录认证和鉴权的功能,因为我们系统要统一接入公司内部的单点登录(isso)系统,所以通过isso的登录用户,需要在shiro中置为已认证,一下提 ...

  4. js对象和jQuery对象的区别

    (1)js对象的三种基本定位方式 (A)通过ID属性:document.getElementById() (B)通过NAME属性:document.getElementsByName() (C)通过标 ...

  5. 扩展:Zero Copy

  6. 连接服务器VNC

    1,启动vnc vncserver 2,提示输入密码 3,Would you like to enter a view-only password (y/n)?  选择n 4,会生成一个端口号 5, ...

  7. Python实现的寻找前5个默尼森数算法示例

    Python实现的寻找前5个默尼森数算法示例 本文实例讲述了Python实现的寻找前5个默尼森数算法.分享给大家供大家参考,具体如下: 找前5个默尼森数. 若P是素数且M也是素数,并且满足等式M=2* ...

  8. git学习教程二之远程仓库学习

    首先你需要注册一个github用户名,我的github账户是:1654218052@qq.com 由于本地的git仓库和github的仓库是通过SSH加密的,所以我们还需要设置一点东西哦 第1步:创建 ...

  9. 微信小程序添加卡券到微信卡包,使用wx.addCard()方法传参及整体流程

    一.准备: 1.经微信认证过的微信公众号. 2.经微信认证过的微信小程序号. 先来看看微信小程序官方的文档,https://developers.weixin.qq.com/miniprogram/d ...

  10. Claymore's Dua Miner挖矿教程

    一.软件准备:首先需要一款挖矿软件.在这里推荐Claymore's Dua Miner的官方原版. 注意: 1. 如果不了解,请不要在网上随意下载其它版本的挖矿软件或者Claymore's Dua M ...