随着时间的推移降低开放MP的效率

时间:2015-04-01 22:12:08

标签: parallel-processing openmp

我有一个很大的计算算法,我使用open mp来帮助加快速度。它适用于前50次左右的迭代(即直到y = 50左右),但随后开始逐渐减速。我还注意到最终CPU使用率从~100%到~40%。

代码看起来像这样:

#include <iostream>
#include <omp.h>
#include <ipp.h>



void main(){
    std::string filename = "Large_File.file";
    FILE * fid = fopen(filename.c_str(), "rb");    
    Ipp32f* vector= ippsMalloc_32f(100000000);

    for (int y=0; y<300; y++){

        fread(vector,sizeof(float),100000000,fid);

        #pragma omp parallel for
        for (int x=0; x<300; x++){

            //A time-consuming calculation

        }
    }

}

1 个答案:

答案 0 :(得分:0)

  1. 首先,检查是否与给定的stackoverflow链接完全相同的问题和相同的答案Why does moving the buffer pointer slow down fread (C programming language)? (这与Hristo建议的距离不远)
  2. 其次,从您提出问题和“常识”的方式来看,减速最有可能是由于“fread”调用(因为只有“y”增加而变化,因为你可以在“限制”的例子)。
  3. 第三方评论:由于您使用IPP,您可能会使用新的(可能是英特尔)编译器。如果是这样,我建议使用更新颖的方式以对齐方式分配内存:_aligned_malloc()或使用#include <aligned_new> read more
  4. (我假设您希望听到更多关于特定于OpenMP的减速信息,但在您的情况下与线程有任何关系的可能性很小;您可能通过禁用OpenMP并比较y = 50来验证它,y = 100,y = 150,..运行,虽然如果你真的处理复杂的NUMA /线程可组合性问题并不会证明很多,我再也不会认识到这种情况了)

相关问题