C openMP-稠密矩阵的分段错误
我正在尝试使用openMP在C中实现。在收集给定C openMP-稠密矩阵的分段错误,c,parallel-processing,segmentation-fault,openmp,C,Parallel Processing,Segmentation Fault,Openmp,我正在尝试使用openMP在C中实现。在收集给定元素的邻域的循环中,我使用两个openMP指令,如下所示: #pragma omp parallel for shared(pos) private(i) for(i=0;i<n;i++){ if(M[n*element+i]==1 && element!=i){ #pragma omp critical neighbors[pos] = i; pos++; }
元素的邻域的循环中,我使用两个openMP指令,如下所示:
#pragma omp parallel for shared(pos) private(i)
for(i=0;i<n;i++){
if(M[n*element+i]==1 && element!=i){
#pragma omp critical
neighbors[pos] = i;
pos++;
}
}
共享(pos)专用(i)的pragma omp并行
对于(i=0;i什么是邻域
?它有多少存储空间?邻域
是一个最大维度为n
的数组,因为每个元素
最多可以有n
邻域pos
在该循环之前正确初始化为0
?在没有OpenMP指令的情况下是否正常工作?Y是的,它被初始化为0
,在顺序模式和稀疏矩阵中一切都很好。问题出现在更密集的矩阵中。我不确定这是否是SEGFULT的原因,但至少临界部分应该包含pos
的赋值和增量。这意味着您需要在那里添加一些花括号…现在,我有点怀疑您提出的算法是否正确并行。邻居
的最终内容将受到竞争条件的限制。这不是一个问题吗?什么是邻居
?它有多少存储空间?邻居
是一个具有最大dimen的数组sion=n
,因为在此循环之前,每个元素最多可以有n
邻域pos
正确初始化为0
?在没有OpenMP指令的情况下,它能正常工作吗?是的,它被初始化为0
,并且在顺序模式和稀疏矩阵中一切正常。问题m出现在更密集的矩阵中。我不确定这是否是SEGFULT的原因,但至少,临界
部分应该包含pos
的赋值和增量。这意味着您需要在那里添加一些花括号……现在,我有点怀疑您提出的算法是否正确并行lelized.邻居的最终内容将取决于比赛条件。这不是一个问题吗?