openmp 和 thread 性能实测
2024-08-30 15:04:17
#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速度更快一些
最新文章
- 设立点击ProgressDialog外的区域对话框不消失
- Yocto开发笔记之《应用程序架构》(QQ交流群:519230208)
- Android学习笔记01-Mac下搭建Java开发环境
- [mysql]支持emoji(字符集问题)!
- C#函数运行超时则终止执行(任意参数类型及参数个数通用版)
- The Romantic Hero
- Buffer Cache 原理
- openwrt拦截snmp报文
- CentOS6.4下安装Nginx1.12.2
- Python中的turtle初探
- 19个实例学会plsql
- Ehcache计算Java对象内存大小
- css里px em rem特点(转)
- 【学亮IT手记】Servlet的生命周期
- ANSI C 常见宏的使用
- 有 a - b <; c 对Java安全性的思考
- 课程14:get和post是神马
- 【BZOJ】1617: [Usaco2008 Mar]River Crossing渡河问题(dp)
- Python 面向对象 (补充) , 反射 , 内置函数
- wait和notify函数的规范代码模板
热门文章
- saveLayerAlpha简单入门
- ISO/IEC 9899:2011 条款6.2.5——类型
- 阶段5 3.微服务项目【学成在线】_day18 用户授权_08-动态查询用户的权限-用户中心查询用户权限
- 算法习题---3.01猜数字游戏提示(UVa340)
- @Component默认是单例还是多例?
- 爆库记录(X-Forwarded-For注入漏洞实战 记录)
- LODOP获取打印状态码和时间列表
- 第五章 编码/加密——《跟我学Shiro》
- iOS-UIScrollView滚动视图(转)
- 查看某个进程PID对应的文件句柄数量,查看某个进程当前使用的文件句柄数量