关于OpenCV源码中的CPU指令集CV_SSE2等的相关知识

2024-04-16 07:18

本文主要是介绍关于OpenCV源码中的CPU指令集CV_SSE2等的相关知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


在这篇博客中,我将会给大家分享关于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的取值有以下几种:
          
请看一下代码:


#include <iostream>
#include <opencv2\opencv.hpp> using namespace std;
using namespace cv; int main(int argc ,char** args)
{//设置是否启用指令集优化特性cv::setUseOptimized(true);//获取当前机器的CPU指令集支持特性bool opt_status = cv::useOptimized();cout<<"当前的指令集优化状态:"<<opt_status<<endl;//检查硬件支持volatile bool simd = checkHardwareSupport(CV_CPU_SSE);cout<<"HardwareSupport(CV_CPU_SSE): "<<simd<<endl;simd = checkHardwareSupport(CV_CPU_MMX);cout<<"HardwareSupport(CV_CPU_MMX): "<<simd<<endl;simd = checkHardwareSupport(CV_CPU_SSE2);cout<<"HardwareSupport(CV_CPU_SSE2): "<<simd<<endl;simd = checkHardwareSupport(CV_CPU_SSE3);cout<<"HardwareSupport(CV_CPU_SSE3): "<<simd<<endl;simd = checkHardwareSupport(CV_CPU_SSSE3);cout<<"HardwareSupport(CV_CPU_SSSE3): "<<simd<<endl;simd = checkHardwareSupport(CV_CPU_SSE4_1);cout<<"HardwareSupport(CV_CPU_SSE4_1): "<<simd<<endl;simd = checkHardwareSupport(CV_CPU_SSE4_2);cout<<"HardwareSupport(CV_CPU_SSE4_2): "<<simd<<endl;simd = checkHardwareSupport(CV_CPU_POPCNT);cout<<"HardwareSupport(CV_CPU_POPCNT): "<<simd<<endl;simd = checkHardwareSupport(CV_CPU_AVX);cout<<"HardwareSupport(CV_CPU_AVX): "<<simd<<endl;return getchar();
}


在上述代码中,如果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的指令集优化功能

这篇关于关于OpenCV源码中的CPU指令集CV_SSE2等的相关知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/908128

相关文章

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

使用Python检查CPU型号并弹出警告信息

《使用Python检查CPU型号并弹出警告信息》本教程将指导你如何编写一个Python程序,该程序能够在启动时检查计算机的CPU型号,如果检测到CPU型号包含“I3”,则会弹出一个警告窗口,感兴趣的小... 目录教程目标方法一所需库步骤一:安装所需库步骤二:编写python程序步骤三:运行程序注意事项方法二

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL