Я строю матрицу расстояний, на которой каждая строка представляет точку, а каждый столбец - это расстояние между этой точкой и всеми остальными точками данных, и мой алгоритм работает очень хорошо в последовательном порядке. Однако, когда я пытаюсь распараллелить его, у меня возникает ошибка сбоя сегментации. Ниже приведен мой код для параллели, где dat - это карта, содержащая все мои данные. Любая помощь здесь будет высоко оценена.ошибка сегментации ошибка openmp
map< int,string >::iterator datIt;
map< int,string >::iterator datIt2;
map <int, map< int, double> > dist;
int mycont=0;
datIt=dat.begin();
int size=dat.size();
#pragma omp parallel //construct the distance matrix
{
#pragma omp for
for(int i=0;i<size;i++)
{
datIt2=dat.find((*datIt).first);
datIt2++;
while(datIt2!=dat.end())
{
double ecl=0;
int c=count((*datIt).second.begin(),(*datIt).second.end(),delm)+1;
string line1=(*datIt).second;
string line2=(*datIt2).second;
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);
dist[(*datIt).first][(*datIt2).first]=ecl;
dist[(*datIt2).first][(*datIt).first]=ecl;
datIt2++;
}
datIt++;
}
}
С уважением, если вы ожидаете от нас отладки этого кода, вы можете по крайней мере обеспечить трассировку стека в момент сбоя. – NPE
Пожалуйста, по крайней мере открепите свой код перед его отправкой. –