美文网首页
【OpenMP】parallel for使用多线程进行并行加速

【OpenMP】parallel for使用多线程进行并行加速

作者: 星夜兼程工作笔记 | 来源:发表于2020-05-01 16:13 被阅读0次

1.定义

 使用parallel指令只是产生了并行域,让多个线程分别执行相同的任务,并没有实际的使用价值。parallel for用于生成一个并行域,并将计算任务在多个线程之间分配,从而加快计算运行的速度。可以让系统默认分配线程个数,也可以使用num_threads子句指定线程个数。

2.parallel for时间问题

// OpenMPTest.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include "omp.h"

#include <iostream>

using namespace std;

//void main()

//{

//#pragma omp parallel for num_threads(6)

// //上面程序指定了6个线程,迭代量为12,每个线程都分配到了2次的迭代量

// //备注:如果for循环比较简单(执行时间短),不建议使用多线程并发,因为线程

// //间的调度也会比较耗时,是一个不小的开销。

// for (int i = 0; i < 12;i++)

// {

// printf("OpenMP Test,线程编号为:%d\n", omp_get_thread_num());

// }

// system("pause");

//   

//}

//OpenMP效率提升以及不同线程数效率对比

void test()

{

for (int i = 0; i < 80000; i++)

{

}

}

void main()

{

float startTime = omp_get_wtime();

//指定两个线程

#pragma omp parallel for num_threads(2)

for (int i = 0; i < 80000; i++)

{

test();

}

float endTime = omp_get_wtime();

printf("指定 2 个线程,执行时间: %f\n", endTime - startTime);

startTime = endTime;

//指定4个线程

#pragma omp parallel for num_threads(4)

for (int i = 0; i < 80000; i++)

{

test();

}

endTime = omp_get_wtime();

printf("指定 4 个线程,执行时间: %f\n", endTime - startTime);

startTime = endTime;

//指定8个线程  

#pragma omp parallel for num_threads(8)

for (int i = 0; i < 80000; i++)

{

test();

}

endTime = omp_get_wtime();

printf("指定 8 个线程,执行时间: %f\n", endTime - startTime);

startTime = endTime;

//指定12个线程

#pragma omp parallel for num_threads(12)

for (int i = 0; i < 80000; i++)

{

test();

}

endTime = omp_get_wtime();

printf("指定 12 个线程,执行时间: %f\n", endTime - startTime);

startTime = endTime;

//不使用OpenMP

for (int i = 0; i < 80000; i++)

{

test();

}

endTime = omp_get_wtime();

printf("不使用OpenMP多线程,执行时间: %f\n", endTime - startTime);

startTime = endTime;

system("pause");

}

3.结果显示 

可见,使用OpenMP优化后的程序执行时间是原来的1/8左右,并且并不是线程数使用越多效率越高,一般线程数达到4~8个的时候,不能简单通过提高线程数来进一步提高效率。

参考 :

https://blog.csdn.net/u011808673/article/details/80319792

相关文章

网友评论

      本文标题:【OpenMP】parallel for使用多线程进行并行加速

      本文链接:https://www.haomeiwen.com/subject/cmsqghtx.html