OpenMP嵌套循环的分段错误

时间:2017-04-16 16:28:40

标签: c++ openmp

我有一个程序,它从数据库中找到类似的字符串,包含数百万个长度相同的字符串m。我程序的输入是一个长度为n的字符串(>>> m)。程序检查长度为m的每个子字符串。它是用c ++实现的并使用OpenMP,但是我为下面的代码得到了分段错误。该字符串仅包含四个字符ABCD。程序找到相似的字符串,如果汉明距离小于给定值,则计算每个字符的出现次数(将其存储在ARR

           std::map<char, int> mapp = {{'A', 0}, {'B', 1}, {'C', 2}, {'D', 3}};
           int **ARR = (int**) malloc(sizeof(int*)*n);
           for(int z=0; z<n; z++)
             ARR[z] = (int*) malloc(sizeof(int)*4);
           for(int i=0; i<n; i++)
             for(int j=0; j<4; j++) ARR[i][j] = 0; 

            vector<string> V;
            #pragma omp parallel for private(V) shared(ARR) 
            for(int i=0; i<str.length()-m-1; i++){  
              std::string substr = str.substr(i, m);
              for(int j=0; j<N; j++){  // N number of databases to search
                V = retrieve(substr);  // find similar strings
                for(int k=0; k<(int)V.size(); ++k) {
                  int hd = hamming_distance(substr, V[k]); // no. of mismatches between substr and kth element of V
                  if( h < minHD){
                    for(int l=0; l<m; l++){
                      char c = V[k][l];
                      #pragma omp critical
                      {
                        ARR[j+l][mapp.at(c)]++;
                      }
                    }
                  }
                }
              }
            }

我只是想知道是否存在任何竞争条件,因为嵌套循环会产生seg错误。任何帮助将不胜感激。

0 个答案:

没有答案