我有一个很大的计算算法,我使用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
}
}
}
答案 0 :(得分:0)
#include <aligned_new>
read more (我假设您希望听到更多关于特定于OpenMP的减速信息,但在您的情况下与线程有任何关系的可能性很小;您可能通过禁用OpenMP并比较y = 50来验证它,y = 100,y = 150,..运行,虽然如果你真的处理复杂的NUMA /线程可组合性问题并不会证明很多,我再也不会认识到这种情况了)