Linux下OpenMP段错误问题

youzy 2011-03-14 08:47:39
主要代码如下:
#pragma omp single
{
//printf("single start\n");
blockNum=rowstr[lastrow-firstrow+1]/num_threads;
tempNum=blockNum;
nzStart[0]=0.0;
for(i=0,j=1;i<lastrow-firstrow+1;i++)
if(rowstr[i]>=tempNum)
{
nzStart[j]=i;
tempNum+=blockNum;
j++;
}
nzStart[num_threads]=lastrow-firstrow+1;
//printf("single end,parallel start\n");
for(i=0;i<=num_threads;i++)
printf("nzstart[%d]=%d\n",i,nzStart[i]);
}
#pragma omp flush
//段错误发生在下面的循环中
#pragma omp for private(i,j)
for(k=0;k<num_threads;k++)
{
//printf("one for, %d\n",omp_get_thread_num());
for(i=nzStart[k];i<=nzStart[k+1];i++)
{
double sum=w[i];
for(j=rowstr[i];j<rowstr[i+1];j++)
{
int index=colidx[j];
sum=sum+a[j]*p[index];
}
w[i]=sum;//如果注释掉这行就不会出现段错误
}
//printf("one end, %d\n",omp_get_thread_num());
}

单个线程时,一般不出现段错误。多个线程有时有段错误,有时没有。


请高手帮我分析下
...全文
390 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xunxun 2011-08-20
  • 打赏
  • 举报
回复
自行设置OpenMP栈大小,有个环境变量,忘了名字了
youzy 2011-08-19
  • 打赏
  • 举报
回复
没人回复居然不能结贴

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧