#pragma omp critical VS CPU 100%使用率

时间:2013-09-22 08:21:34

标签: iphone

我在visual studio 2012中用open-mp写了一个程序,我有一些问题。这是我的代码:

    #pragma omp parallel num_threads(4) private(k) 
         {

    #pragma omp   for
    for(k=0x20AC6E12AF3E4DB0;k<=MAXINT64;k++)
        {
     U.k=k;
     init();
    Decrypt(s1);
    Decrypt(s2);
        }
        }

上面编译的代码和我的cpu使用率为100%,但输出错误。当我将代码更改为:

    #pragma omp parallel num_threads(4) private(k) 
       {    
    #pragma omp   for
    for(k=0x20AC6E12AF3E4DB0;k<=MAXINT64;k++)
       {
    U.k=k;
    init();
           #pragma omp critical
       {
    Decrypt(s1);
    Decrypt(s2);
       }
       }
       }

输出变得正确但在这种情况下我的cpu使用率不是100%而我实际上失去了并行性! 我该怎么办?

1 个答案:

答案 0 :(得分:0)

您的程序没有说明s1和s2是什么,以及init()修改了什么。在任何情况下,您都需要确保一个线程不会更改另一个线程使用的数据。

根据定义,“#pragma omp critical”是一个瓶颈,因为它使得块一次只能由一个线程输入。

一个“#pragma omp parallel for”就足够了。让线程在for循环中复制变量。