C++ consequentive-openMP并行循环的性能

C++ consequentive-openMP并行循环的性能,c++,openmp,C++,Openmp,在我的电脑(vc++2017)上,生成以下代码: 1025 ms 如果我取消注释它生成的第一个杂注: 1530 ms 几乎慢了50%。为什么会这样?我真正的代码要复杂得多,不可能将两个循环放在同一个线程池中。还有别的解决办法吗? 谢谢 #包括 #包括“time.h” #包括 int main() { 整数n=500000000; 双精度*arr0=新双精度[n],*arr1=新双精度[n]; omp_设置_数量_线程(2); //#pragma-omp并行 对于(int i=0;i

在我的电脑(vc++2017)上,生成以下代码:

1025 ms
如果我取消注释它生成的第一个杂注:

1530 ms
几乎慢了50%。为什么会这样?我真正的代码要复杂得多,不可能将两个循环放在同一个线程池中。还有别的解决办法吗? 谢谢

#包括
#包括“time.h”
#包括
int main()
{
整数n=500000000;
双精度*arr0=新双精度[n],*arr1=新双精度[n];
omp_设置_数量_线程(2);
//#pragma-omp并行
对于(int i=0;i你的处理器是什么?你有AMD处理器吗?代码持续多久?除此之外,时钟不适合测量并行代码的挂钟时间。请改用。
#include <iostream>
#include "time.h"
#include <omp.h>

int main()
{
    int n = 500000000;
    double *arr0 = new double[n], *arr1 = new double[n];
    omp_set_num_threads(2);
    //#pragma omp parallel for
    for (int i = 0; i < n; i++)
        arr0[n] = sqrt((double)i / (double)n);
    omp_set_num_threads(8);

    clock_t start0 = clock();
#pragma omp parallel for
    for (int ii = 0; ii < n; ii++)
        arr1[n] = sin((double)ii / (double)n);

    std::cout << double(clock() - start0) << " ms" << std::endl;
    delete[] arr0; delete[] arr1;

    std::cin.get(); return (EXIT_SUCCESS);
}