OpenCV五学习: 如何使用命令来启动或关闭OpenCV的CPU指令系统CV_SSE2,CV_SSSE4和其他优化
2015-07-30 16:39
676 查看
在这个博客。我想分享一下OpenCV源代码CPU指令系统CV_SSE2和其他相关知识
一个、CV_SSE系列指令集的预编译符号定义在opencv2/core/internal.hpp这个头文件里,假设你不包括这个头文件的话。把源代码复制到自己的函数中,CV_SSE是不被定义的
以下是harrisCorner中的一部分代码
在上述代码中。假设条件编译符号CV_SSE被定义过,则调用checkHardwareSupport(CV_CPU_SSE); 获取你的电脑上的CPU是否支持CPU_SSE指令集优化特性。
假设查询结果为真,就说明你的CPU在当前状态下支持CPU_SSE指令集优化特性。
假设查询结果为假。就说明你的CPU不支持CPU_SSE指令集优化。可是这并不说明你的CPU硬件本身不支持SSE指令集优化特性。
二、
CPU指令集优化功能能够依据须要开启或关闭:
首先能够使用此函数
bool cv::useOptimized()
来查询当前是否开启了CPU指令集优化功能。
能够使用函数
void cv::setUseOptimized(bool onoff)
来设置是否开启CPU指令集优化功能;
能够使用此函数
bool checkHardwareSupport(int feature);
来查询你的CPU是否支持某种指令集优化特性。
feature的取值有下面几种:
请看一下代码:
在上述代码中,假设setUseOptimized()函数的參数为true的话,则CPU的硬件指令优化功能被开启。状态函数opt_status = cv::useOptimized()返回为真,
并且在上述代码中我们查询了我的机器的CPU指令优化支持特性,我的CPU型号为Inter Core(TM) i5 650 的。查询结果显演示样例如以下:
能够看到,我的CPU支持绝大多数的指令集优化特性。仅仅有最后一个CPU_AVX是0,虽然我们用程序指令开启了指令集优化特性,可是CPU_AVX依旧是0,这就说明我的CPU在硬件层面上不提供CPU_AVX的优化功能,即使setUseOptimized()函数的參数为true。也无法使用此功能。
假设setUseOptimized()函数的參数为false的话,则CPU的硬件指令优化功能被关闭。状态函数opt_status = cv::useOptimized()返回为假。上述代码的执行结果为
能够看到,此时全部的CPU指令集优化功能都被禁止了,即使CPU硬件本身支持的特性,也被禁止使用了。
所以在你的程序中,你能够在main()主函数中通过setUseOptimized()功能设置是否启用OpenCV指令集的优化
相关文章推荐
- 使用Nginx Upstream 部署 OpenERP
- 用 OProfile 彻底了解性能
- CentOS6.5 服务器+apache5.3绑定多个域名+SELinux设置
- 关于nginx的1W并发的优化
- ssh centos中文乱码
- eclipse启动tomcat访问不到主页
- shell 获取指定日期的前N天或后N天
- Linux学习之Shell基础
- Apache Commons Lang
- linux环境下彻底卸载Pycharm的方法
- Centos 6.5添加网易163源
- 游戏服务端架构发展史(转)
- Linux系统装有多个PHP的版本切换问题
- Linux学习之Shell基础
- Docker
- gdb调试命令
- 自己收集的比较好的博客或网站
- OC学习:可变字符串替代:replaceOccurrencesOfString:(NSString *) withString:(NSString *) options: range:方法
- Openstack magnum 简介
- Linux Socket编程