#include <stdio.h>
#include <iostream>
#include <thread>
#include<omp.h>
//#include <opencv2/core.hpp>
//#include <cv/cv_tools.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/version.hpp>
using namespace std;
using namespace cv; #define TEST_BY_OPENMP void childFunc(Mat& pic, Mat &dst)
{
int w = pic.cols;
int h = pic.rows;
//do{
int sz = * w*h;
for (int i = ; i != sz; ++i) {
//int src_data = pic.data[i];
//float ss= 1.234556;
//ss*=1.2;
//src_data+=ss;
//dst.data[i] = ((src_data >>5)<<5);
dst.data[i] = ((pic.data[i] >> ) << );
}
//}while(0);
} vector<Mat> split(Mat& _src, int n)
{
int sz = _src.cols*_src.rows*;
vector<Mat> pics(n);
for (int i = ; i != n; ++i) {
pics[i] = Mat(_src.rows/n,_src.cols,CV_8UC3, _src.data + i*sz/n );
}
return pics;
}
int main()
{
const int LOOPS = 1e10;
Mat src = imread("bg.jpg");
resize(src,src,Size(,));
Mat dst(src.size(),src.type());
vector<Mat> child_pics = split(src, );
vector<Mat> child_pics_d = split(dst, ); long long t0 = getTickCount(); for(int k=;k!=LOOPS;++k){
#ifdef TEST_BY_OPENMP
#pragma omp parallel num_threads(4)
{
int index = omp_get_thread_num();
childFunc(child_pics[index], child_pics_d[index]);
}//7.3 ms cpu=60% for (int i = ; i != ; ++i) {
childFunc(child_pics[i], child_pics_d[i]);
}//6.97ms cpu=45%
#else
thread t[];
for (int i = ; i != ; ++i) {
t[i] = thread(childFunc, child_pics[i], child_pics_d[i]);
}
for (int i = ; i != ; ++i) {
t[i].join();
}//21.32ms cpu=55%
#endif }; long long t1 = getTickCount();
double time_waste = double(t1 - t0) / getTickFrequency();
time_waste /= LOOPS;
printf("time waste=%.2f ms\n", time_waste * );
imshow("test", dst);
waitKey();
}

发现好像确实不能使用thread   分片处理图像数据   处理时间太慢   不知道为什么....可能是数据竞争的原因吧。。

openmp速度更快一些

openmp 和 thread 性能实测的更多相关文章

  1. logback log4j log4j2 性能实测

    logback log4j log4j2 性能实测 转载: https://blog.souche.com/logback-log4j-log4j2shi-ce/ 日志已经成为系统开发中不可或缺的一部 ...

  2. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU特性介绍(2)- RT1052DVL6性能实测

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的性能. 在前面的文章 i.MXRT微控制器概览 里,痞子衡给大家简介过恩智浦半导体在2017年推出的新 ...

  3. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU特性介绍(2)- RT685EVKA性能实测(Dhrystone)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的性能. 在前面的文章 i.MXRTxxx微控制器概览 里,痞子衡给大家简介过恩智浦半导体在2018 ...

  4. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU特性那些事(2)- RT1052DVL6性能实测(CoreMark)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的性能. 在前面的文章 i.MXRTyyyy微控制器概览 里,痞子衡给大家简介过恩智浦半导体在2 ...

  5. mysql5.5 uuid做主键与int做主键的性能实测

    数据库:mysql5.5 表类型:InnoDB 数据量:100W条 第一种情况: 主键采用uuid 32位. 运行查询语句1:SELECT COUNT(id) FROM test_varchar; 运 ...

  6. java MVEL2/Spring EL表达式、直接调用、反射性能实测

    import java.io.Serializable; import java.lang.reflect.Field; import java.util.HashMap; import java.u ...

  7. MakeCode图形编程应用在micro:bit上的多工性能实测

    1. 简述 本文不涉及对测试中所用到的设备或软件的推广. micro:bit 是一款由英国广播电视公司(BBC)为青少年编程教育设计,并由微软,三星,ARM,英国兰卡斯特大学等合作伙伴共同完成开发的微 ...

  8. spring赌上未来的一击:WebFlux性能实测

    最近花了一点时间系统的测试验证了在SpringBoot框架下使用SpringMVC和Spring WebFlux两种框架开发接口,对比了响应时间以及压测吞吐量的区别. WebFlux&Spri ...

  9. 性能瞬间飙升!教你如何组RAID0磁盘阵列

    性能瞬间飙升!教你如何组RAID0磁盘阵列 1组建RAID0磁盘阵列之Intel篇回顶部 前言:传统硬盘由于工作原理的限制,在性能上的提升非常缓慢.而固态硬盘价格昂贵,短时间内难以被普通用户接受.因此 ...

随机推荐

  1. Team团队管理执行力

    执行力是什么_百度知道https://zhidao.baidu.com/question/144991863.html [图文]如何提高团队执行力 - 百度文库https://wenku.baidu. ...

  2. LoadRunne遇到的一些问题FAQ(持续更新...)

    1.LR11破解完成,添加License失败,报错License security violation Loadrunner11破解成功后,用deletelicense.exe工具把License全删 ...

  3. linux内核中设备树的维护者仓库地址

    1. 仓库地址 git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git https://kernel.googlesource.com ...

  4. mac下PHP安装mongo扩展

    说明:mongo 和 mongodb是两个扩展,目前mongo扩展已经被废弃,建议使用mongodb扩展,但对于一些老项目还在使用mongo扩展的,请参考此文. mongodb和其他PHP扩展的安装方 ...

  5. NPM 私服

    下载https://nodejs.org/en/download/ linux binaries x64版本xz -d ....xztar -xvf ....tar导入path修改~/.bashrc加 ...

  6. delete 删除指针

    危险的代码: int* p=new int(1);   delete p;   delete p; 安全的代码: int* p=new int(1);   delete p;   p = NULL; ...

  7. NULL和nullptr

    NULL就是0 nullptr是空指针[c++11]

  8. C++11消息队列 + Qt线程池 + QRunnable执行任务简单模型

    1.模板类queue,包含头文件<queue>中,是一个FIFO队列. queue.push():在队列尾巴增加数据 queue.pop():移除队列头部数据 queue.font():获 ...

  9. Transaction check error:

    Transaction check error:  file /etc/my.cnf from install of MariaDB-common-10.3.16-1.el7.centos.x86_6 ...

  10. sklearn.svc 参数

    sklearn.svc 参数 sklearn中的SVC函数是基于libsvm实现的,所以在参数设置上有很多相似的地方.(PS: libsvm中的二次规划问题的解决算法是SMO). 对于SVC函数的参数 ...