C语言运行出现点小问题,求大神解惑

低调Di程序猿 2014-04-02 02:31:59
大神们,这是一个MPI程序,求教为什么我加上一句char temp[NAVRS];程序就不能并行执行了呢?输出截图在后面
#include "stdafx.h"
#include <string.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>

#define POPSIZE 5
#define NVARS 12
#define MAXGENS 2000
#define EXNUM 3

struct genotype
{
char gene[NVARS];
double fitness;
double rfitness;
double cfitness;
}*population,*newpopulation,*localbest;

int numprocs,myid;
FILE *galog;
int generation;
char cmp[NVARS];
double lowfitness;
char temp[NVARS];

void report(){
int i;
for(i=0;i<POPSIZE;i++)
printf("pid:%d\tseq:%s\tscore:%.1f\n",myid,population[i].gene,population[i].fitness);fflush(stdout);
printf("pid:%d\tcmp:%s\tlowfitness:%.1f\tbest:%s\tfit:%.1f\n",myid,cmp,lowfitness,localbest[0].gene,localbest[0].fitness);fflush(stdout);
}

int _tmain(int argc, char* argv[])
{
double starttime=0.0;
double endtime;
int i,j,flag;
int n=0;

MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);

fprintf(stdout,"Process %d of %d start....\n",myid,numprocs);
fflush(stdout);

galog=stdout;

generation=0;

if(myid==numprocs-1){
srand(time(0));
starttime=MPI_Wtime();
}

initialize();

//evaluate();

//keepthebest();

report();

MPI_Finalize();
getchar();
return 0;
}


pid全为0,说明全是0号执行的结果,这个是错误的,加上char temp[NAVRS];就不对了(只声明了一下,没有使用),去掉这句声明就对了,截图如下:
求教大神传授这是原理造成的和解决方法,万分感谢!!
...全文
219 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-04-04
  • 打赏
  • 举报
回复
Windows: 崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。 Linux: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件,参考“ulimit -c core文件最大块大小”命令
zbo_stepping 2014-04-04
  • 打赏
  • 举报
回复
不一定因为去掉char temp[NAVRS];没错就肯定是这里的错误。 这一句铁定没错的。错误肯定在其他地方。 或许越界?
低调Di程序猿 2014-04-03
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
也许全局变量的空间不够用了。
全局变量和静态变量应该都分配在数据段的空间,数据段空间应该比较大,不会存这点东西就满的吧。如果满了应该也会报错吧。不过还是先谢谢你的回答。
赵4老师 2014-04-03
  • 打赏
  • 举报
回复
也许全局变量的空间不够用了。
低调Di程序猿 2014-04-03
  • 打赏
  • 举报
回复
引用 5 楼 JiMoKuangXiangQu 的回复:
MPI_Init MPI_Comm_size MPI_Comm_rank 每一个调用的返回值是不是应该都检验下?以确保调用成功。
这些是MPI中获取进程的总数和编号,进程个数肯定没有错误。肯定和这个没关系啦。
JiMoKuangXiangQu 2014-04-03
  • 打赏
  • 举报
回复
MPI_Init MPI_Comm_size MPI_Comm_rank 每一个调用的返回值是不是应该都检验下?以确保调用成功。
低调Di程序猿 2014-04-02
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
没见*population,*newpopulation,*localbest在哪申请了内存空间。
有个初始化函数,在里面申请了内存了,只是我没有粘出来,程序没有错误,只是出了那个问题,我想知道原因和解决方法
赵4老师 2014-04-02
  • 打赏
  • 举报
回复
没见*population,*newpopulation,*localbest在哪申请了内存空间。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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