基于GCC的openMP学习与测试(2)
一、openMP简单测试
1、简述
openMP很多情况下对于利用多核处理器进行加速是很有效果的,然而,也有一些情况是openMP不但没有效果,甚至还有一些反作用。
2、简单测试(1)
#include<omp.h>
#include<time.h>
#include<iostream>
using namespace std; void openMP()
{
int i,j;
for(i=; i<; i++)
{
for( j = ; j < ; j++)
j++;
}
} int main()
{
time_t start,end1;
time( &start );
double omp_start = omp_get_wtime( );
int N = ;
int i,j;
#pragma omp parallel
for(int m = ; m < N ; m++)
{
openMP(); } double omp_end = omp_get_wtime( );
time( &end1 );
std::cout<<"used_times "<<end1 - start<<"\n";
std::cout<<"omp_times "<<omp_end - omp_start<<"\n"; return ;
}
- 从上面可以看出,使用openMP并行化程序并没有比不使用openMP的要快,甚至线程数量越大的情况下,运行时间反而越长。
- 这是因为,数据量巨大,线程数量越多的时候,程序分配并行程序的时间越多,导致程序的运行时间变慢。这种情况下,使用openMP设置的线程数量越多,效果会越差。
3、简单测试(2)
#include<omp.h>
#include<time.h>
#include<iostream>
using namespace std; void openMP()
{
int i,j;
for(i=; i<; i++)
{
for( j = ; j < ; j++)
j++;
}
} int main()
{
time_t start,end1;
time( &start );
double omp_start = omp_get_wtime( );
int N = ;
int i,j;
#pragma omp parallel for
for(int m = ; m < N ; m++)
{
openMP(); } double omp_end = omp_get_wtime( );
time( &end1 );
std::cout<<"used_times "<<end1 - start<<"\n";
std::cout<<"omp_times "<<omp_end - omp_start<<"\n"; return ;
}
- 从上面的图表可以看出,使用openMP以及扩大线程数量与不使用openMP的程序运行时间相差无几
- 这是因为循环一次的情况下,openMP无论设置了多少个线程,所使用的CPU利用率,系统最大会分配给100%,也就是一个线程的CPU利用率,也就和不使用openMP没有什么差别,这种情况下,openMP是没有什么效果的。
二、openMP学习参考
- 通过 GCC 学习 OpenMP 框架:https://www.ibm.com/developerworks/cn/aix/library/au-aix-openmp-framework/
Guide into OpenMP : http://bisqwit.iki.fi/story/howto/openmp/
基于GCC的openMP学习与测试(2)的更多相关文章
- 基于GCC的openMP学习与测试
(一).openMP简述 Open Multiprocessing (OpenMP) 框架是一种功能极为强大的规范,可以帮助您利用 C.C++ 和 Fortran 应用程序中的多个核心带来的好处,是基 ...
- 基于linux下的NIST数字测试包安装过程
基于linux下的NIST数字测试包安装过程 1. 首先解决windows文件不能粘贴到Ubuntu的问题 选择利用VMware Tools进行解决 打开虚拟机VMware Workstation,启 ...
- 从Theano到Lasagne:基于Python的深度学习的框架和库
从Theano到Lasagne:基于Python的深度学习的框架和库 摘要:最近,深度神经网络以“Deep Dreams”形式在网站中如雨后春笋般出现,或是像谷歌研究原创论文中描述的那样:Incept ...
- 【转】基于 Android NDK 的学习之旅-----数据传输(引用数据类型)
原文网址:http://www.cnblogs.com/luxiaofeng54/archive/2011/08/20/2147086.html 基于 Android NDK 的学习之旅-----数据 ...
- 基于 Keras 用深度学习预测时间序列
目录 基于 Keras 用深度学习预测时间序列 问题描述 多层感知机回归 多层感知机回归结合"窗口法" 改进方向 扩展阅读 本文主要参考了 Jason Brownlee 的博文 T ...
- 基于OpenCL的深度学习工具:AMD MLP及其使用详解
基于OpenCL的深度学习工具:AMD MLP及其使用详解 http://www.csdn.net/article/2015-08-05/2825390 发表于2015-08-05 16:33| 59 ...
- 测试开发:从0到1学习如何测试API网关
本文来自我的一名学员分享 日常工作中,难免会遇到临危受命的情况,虽然没有这么夸张,但是也可能会接到一个陌生的任务,也许只是对这个概念有所耳闻.也许这个时候会感到一丝的焦虑,生怕没法完成领导交给的测试任 ...
- 语义分割:基于openCV和深度学习(二)
语义分割:基于openCV和深度学习(二) Semantic segmentation in images with OpenCV 开始吧-打开segment.py归档并插入以下代码: Semanti ...
- 语义分割:基于openCV和深度学习(一)
语义分割:基于openCV和深度学习(一) Semantic segmentation with OpenCV and deep learning 介绍如何使用OpenCV.深度学习和ENet架构执行 ...
随机推荐
- window(x64)+IIS+Access发布网站出现HTTP 错误 404.0 - Not Found
我的电脑是window7 64位,昨天用ASP.NET写好一个网页,想用IIS发布到校园局域网,配置好IIS,谁知道最后还是出现问题,截图如下 于是我就上网找解决方案,网上各种版本都有,有的说是文件路 ...
- 通过vmware 启动cloudera-quickstart-vm-5.10.0-0-vmware.zip镜像无法启动。
解压cloudera-quickstart-vm-5.10.0-0-vmware.zip中找到cloudera-quickstart-vm-5.10.0-0-vmware.vmx文件打开注释点#msg ...
- C#中设置TextBox控件中仅可以输入数字且设置上限
首先设置只可以输入数字: 首先设置TextBox控件的KeyPress事件:当用户按下的键盘的键不在数字位的话,就禁止输入 private void textBox1_KeyPress(object ...
- linux下安装一款笔记软件(为知笔记)
今天突然想在ubuntu上安装一款跨平台(windows.linux.android)的笔记软件来做日常记录.文章记录以及网页收藏.原先并没有使用过类似的软件,只是见身边的很多人在使用印象笔记来做记录 ...
- poj2976(01分数规划)
poj2976 题意 给出 a b 数组,一共 n 对数,其中最多可以去掉 k 对,问怎样使剩下比率(原始比率是 $ \frac{\sum_{i=1}^{n} a}{\sum_{i=1}^{n} b} ...
- css如何让div和页面等高?
我们都知道,只要是block状态的标签,宽度和父级等宽,或者设置宽度100%也可以等宽,但设置高度100%是不管用的,那么如何让标签和页面等高呢,除了用js去动态计算设置高度值,用css也可以 只要将 ...
- xtrabackup备份原理
Percona XtraBackup工作原理 Percona XtraBackup是基于InnoDB的崩溃恢复功能.复制InnoDB数据文件,导致内部不一致的数据; 但随后它对文件执行崩溃恢复,使它们 ...
- JavaScript中的string对象及方法
string对象 string对象的两种创建 var a="hello"; var b=new String("hello"); //下面是方法 //charA ...
- (cljs/run-at (->JSVM :browser) "语言基础")
前言 两年多前知道cljs的存在时十分兴奋,但因为工作中根本用不上,国内也没有专门的职位于是搁置了对其的探索.而近一两年来又刮起了函数式编程的风潮,恰逢有幸主理新项目的前端架构,于是引入Ramda. ...
- 精通JavaScipt第二版笔记——特性、函数和对象
前言:感觉这本书只有第二章 第三章有点看头 基本类型和引用类型 基本类型:字符串 数字 布尔值 null(待确定) undifined 引用类型:对象 数组 引用传递 保存的只是对象的地址 var o ...

