第一个程序"Hello World"
在进行并行编程之前,首先要知道自己的电脑是几核的。
(1)OpenMP线程数设定
在计算机管理—设备管理器—处理器一栏中有多少个图标就是几核。一个核能跑一个线程,当所需线程超过CUP核数目时,CPU会采用一定的调度算法每隔一段时间就将这些线程调入或调出CPU,以确保每个线程都能分享一部分CPU时间,实现多线程并发。所以线程的数目最好与核数目相同为好。如下图,我的电脑为12核,所以就设置为12线程。
(2)代码实现
#include <iostream>
#include <omp.h>
#include <stdio.h>
using namespace std;
int main()
{
int number; //存储核数的变量
number = omp_get_num_procs(); //读取电脑的核数
omp_set_num_threads(number); //设置线程数为核数
#pragma omp parallel
{
//分支
cout << "Hello World\n";
//聚合
}
return 0;
}
如上图所示,同传统的C++代码的唯一区别是增加了#pragma omp parallel这样一条指令。该指令的作用为派生分配的线程,使得12个线程均运行打印的指令。在该作用域开始,主进程分支成了12个线程,在作用域结束前,12个线程又聚合为一个主进行,该模型就是最简单的聚合模型,也是OpenMP的核心思想。