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. dev exception 2018

    java.lang.IllegalArgumentException: Circular placeholder reference 'trace.enable' in property defini ...

  2. [面试] Java高级软件工程师面试考纲(转)

    如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...

  3. Python - 二叉树, 堆, headq 模块

    二叉树 概念 二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树), 或者由一个根结点和两棵互不相交的.分别称为根结点的左子树和右子树组成. 特点 每个结点最多有两颗子树,所 ...

  4. C# 程序的关闭 讲究解释

    程序的关闭是很讲究的,处理的不好的话,将软件连续开启和关闭,当数次后在启动软件后程序会崩溃.或者程序退出很慢.细节决定成败,一款好的软件应该从各方面都要做严格地反复地推敲,力争做到无可挑剔.    有 ...

  5. kettle记录集(Merge Join)使用

    果两个表需要进行连接查询筛选出数据,那么可以使用记录集组件.(Merge Join). 使用之前要进行排序: 使用记录集之前,要对输入的两张表进行排序,如果不排序,会导致两张表连接的时候出现问题,关联 ...

  6. Python中第三方库Requests库的高级用法详解

    Python中第三方库Requests库的高级用法详解 虽然Python的标准库中urllib2模块已经包含了平常我们使用的大多数功能,但是它的API使用起来让人实在感觉不好.它已经不适合现在的时代, ...

  7. Go项目实战:打造高并发日志采集系统(五)

    前情回顾 前文我们完成了如下功能1 根据配置文件启动多个协程监控日志,并启动协程监听配置文件.2 根据配置文件热更新,动态协调日志监控.3 编写测试代码,向文件中不断写入日志并备份日志,验证系统健壮性 ...

  8. React Native面试题记录

    一.ES6中增加了那些新的功能? 1> for-of循环: 使用 for-of 的时候,循环的是数组内部的元素且不会出现 for-in 中将附加属性也遍历的情况,其次,循环变量的类型和其在数组中 ...

  9. JavaScript高程第三版笔记-DOM扩展

    在那个刀耕火种的年代,用过jQuery的都体会到了jQuery带来的便捷,尤其是元素选择器. jQuery(www.jquery.com)的核心就是通过 CSS 选择符查询 DOM 文档取得元素的引用 ...

  10. rocksdb wiki文档阅读笔记

    由于是英文文档,不做笔记过一阵就忘了,现在把关键点记录到这,开发的时候使用. 具体wiki地址:https://github.com/facebook/rocksdb/wiki 1)Column Fa ...