我試圖用openmp在其中計算每個點和所有其他點之間的距離並行實現距離矩陣,所以我認爲到目前爲止最好的算法成本O(n^2)我的算法在8處理器機器上使用10個線程使用openmp的性能並不比運行時間的串行方法更好,所以我想知道在我的openmp方法實現中是否有任何錯誤,因爲這是我第一次使用openmp,所以如果我的apporach中有任何錯誤或者更好的「更快」的方法,請讓我知道。以下是我的代碼,其中「dat」是包含數據點的向量。openmp並行性能
map <int, map< int, double> > dist; //construct the distance matrix
int c=count(dat.at(0).begin(),dat.at(0).end(),delm)+1;
#pragma omp parallel for shared (c,dist)
for(int p=0;p<dat.size();p++)
{
for(int j=p+1;j<dat.size();j++)
{
double ecl=0;
string line1=dat.at(p);
string line2=dat.at(j);
for (int i=0;i<c;i++)
{
double num1=atof(line1.substr(0,line1.find_first_of(delm)).c_str());
line1=line1.substr(line1.find_first_of(delm)+1).c_str();
double num2=atof(line2.substr(0,line2.find_first_of(delm)).c_str());
line2=line2.substr(line2.find_first_of(delm)+1).c_str();
ecl += (num1-num2)*(num1-num2);
}
ecl=sqrt(ecl);
#pragma omp critical
{
dist[p][j]=ecl;
dist[j][p]=ecl;
}
}
}
你可以發表更多的行,使其成爲一個運行的例子嗎? – 2012-01-27 20:46:15
你在雙重嵌套循環中有一個'#pragma omp critical',你想知道瓶頸在哪裏? o.O – ildjarn 2012-01-27 20:59:54