OpenMP是一个针对共享内存并行编程的API。
与之前的MPI不同的是,OpenMP是
线程级并行
,比MPI的
进程级并行
要更轻量化一些。在
更重要的一个特点是,MPI的并行需要完全重写整个程序,而将一个串行程序改造成OpenMP的并行则有可能只要进行少量的改动即可。
而且gcc原生支持OpenMP,不需要像MPI一样另外要装个运行环境和运行库。
用gcc编译时加上
-fopenmp
开关即可:
1 2 3
|
$ gcc -fopenmp <source.c> -o <exec>
$ g++ -fopenmp <source.cpp> -o <exec>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <omp.h>
using namespace std;
void hello() { int my_rank = omp_get_thread_num(); int thread_count = omp_get_num_threads();
printf("Hello from thread %d of %d\n", my_rank, thread_count); }
int main() { int thread_count = 4;
# pragma omp parallel num_threads(thread_count) hello();
return 0; }
|