并行计算omp

来源:互联网 发布:quick report软件下载 编辑:程序博客网 时间:2024/06/03 22:40

对于一些比较消耗时间的for循环,采用openMP的优化代码

首先编译器是vs2017的基础上,项目右键—>属性—>c/c++—>语言—>支持omp


常见指令包括
#pragma omp parallel
{
每个线程执行大括号内的代码
}

带有for制导的语句:

1. #pragma omp parallel for   for()      //作用域只是紧跟着的那个for循环2.#pragma omp parallel{    #pragma omp for    for()}//在整个并行块中可以出现多个for制导指令

如果不使用for制导语句,则每个线程都执行整个for循环。所以,使用for制导语句将for循环拆分开来尽可能平均地分配到各个线程执行

int main(){    omp_set_num_threads(2); //四个线程 不超过CPU核心数#pragma omp parallel     for (int i = 0; i < 10; i++)    {        //cout << "i = " << i << ", I am Thread " << omp_get_thread_num() << endl;        printf("i = %d, I am Thread %d\n", i, omp_get_thread_num());    }    cout << endl;    return 0;}
i = 0, I am Thread 0i = 0, I am Thread 1i = 1, I am Thread 0i = 1, I am Thread 1i = 2, I am Thread 0i = 2, I am Thread 1i = 3, I am Thread 0i = 3, I am Thread 1i = 4, I am Thread 0i = 4, I am Thread 1i = 5, I am Thread 0i = 5, I am Thread 1i = 6, I am Thread 0i = 6, I am Thread 1i = 7, I am Thread 0i = 7, I am Thread 1i = 8, I am Thread 0i = 8, I am Thread 1i = 9, I am Thread 0i = 9, I am Thread 1
int main(){    omp_set_num_threads(6); //四个线程 不超过CPU核心数#pragma omp parallel for    for (int i = 0; i < 10; i++)    {        //cout << "i = " << i << ", I am Thread " << omp_get_thread_num() << endl;        printf("i = %d, I am Thread %d\n", i, omp_get_thread_num());    }    cout << endl;    return 0;}
i = 0, I am Thread 0i = 2, I am Thread 1i = 4, I am Thread 2i = 3, I am Thread 1i = 5, I am Thread 2i = 1, I am Thread 0i = 6, I am Thread 3i = 9, I am Thread 5i = 7, I am Thread 3i = 8, I am Thread 4