您现在的位置是:首页 >技术教程 >基于OpenMP的并行计算实验网站首页技术教程

基于OpenMP的并行计算实验

shenqilang 2024-06-17 10:29:44
简介基于OpenMP的并行计算实验

一、实验目的

在Linux系统中,基于C++编写OpenMP用例对并行计算进行实验:

1.掌握OpenMP的配置方式;

2.通过编写测试用例,观察引入OpenMP的加速效果

二、实验内容

2.1配置并测试OpenMP

1.配置并测试OpenMP

配置环境变量,设置线程数:

 2.编写测试用例

编写一个简单的测试用例:

#include <iostream>
#include <omp.h>

using namespace std;

int main(){
#pragma omp parallel
{
    cout<<"Test"<<endl;
}
return 0;
}

3.编译并运行

编译上述测试用例:

 执行生成的可执行文件

执行结果如下

 

 2.2编写测试用例

通过编写一个测试用例来说明并行计算的加速效果,该用例有一个简单的函数test(),在main()中一个for循环把这个函数重复运行8次

首先编写单核运行的程序,并加入计时功能:

#include <iostream>
#include <sys/time.h>

using namespace std;

void test(){
int res = 0;
for(int i=0;i<100000000;i++)
 res++;
}

int main(){
struct timeval t1,t2;
double timeuse;
gettimeofday(&t1,NULL);

for(int i=0;i<8;i++)
test();
gettimeofday(&t2,NULL);
timeuse = (t2.tv_sec - t1.tv_sec)+double(t2.tv_usec-t1.tv_usec)/1000000.0;
cout<<"time elapse:"<<timeuse<<" sec"<<endl;
return 0;
}

编译运行,打印出消耗时间

引入OpenMP,将上述代码转换为多核运算:

#include <iostream>
#include <sys/time.h>
#include <omp.h>
using namespace std;

void test(){
int res = 0;
for(int i=0;i<100000000;i++)
 res++;
}

int main(){
struct timeval t1,t2;
double timeuse;
gettimeofday(&t1,NULL);
omp_set_num_threads(4);
#pragma omp parallel for
for(int i=0;i<8;i++)
test();
gettimeofday(&t2,NULL);
timeuse = (t2.tv_sec - t1.tv_sec)+double(t2.tv_usec-t1.tv_usec)/1000000.0;
cout<<"time elapse:"<<timeuse<<" sec"<<endl;
return 0;
}

 编译运行,打印出多核运算的消耗时间:

 单核消耗时间为1.29689s,而多核消耗时间仅为0.374862s,由此可知多核并行执行速度远高于单核运行速度

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。