/*************************************************************************** * Copyright (C) 2006 by Piotr Franaszczuk * * pfranasz@jhmi.edu * * Johns Hopkins University, Baltimore,MD * * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #define NO_OF_PROC 16 #define NO_OF_LINKS 1000000 #define RISC #include #include #include #include #include #include #include #include "lnet.h" int main(int argc,char *argv[]) { NEURON_INDEX **link_out; int lin_no[NO_OF_PROC][NO_OF_PROC]; // int check_out[NO_OF_PROC][NO_OF_PROC]; // int check_link=0; int lout_no[NO_OF_PROC]; int nproc,last; char fname[100]; char name[NO_OF_PROC][200]; // int in_sum=0,out_sum=0; FILE* fil_in, *fil_out, *fil_tab, *fil_dst[NO_OF_PROC]; int ii,i,nin,nout,src_proc,dst_proc,src_neu,dst_neu,preclassnum,w; int axflag,old_src; double del; struct LINK tmp; if(argc <3 ){fprintf(stderr,"USAGE:\n\tcrl fname(no.ext) nproc\n");exit(1);} nproc=atoi(argv[2]); if(nproc>NO_OF_PROC || nproc<1) {fprintf(stderr,"nproc= %i> %i\n",nproc,NO_OF_PROC);exit(1);} link_out=(NEURON_INDEX**)malloc(sizeof(NEURON_INDEX*)*nproc); if(!link_out) { fprintf(stderr,"malloc link_out");exit(1);} for(i=0;i %i for src:%i dst:%i\n", NO_OF_LINKS,src_proc,dst_proc); exit(2); } fprintf(fil_dst[dst_proc],"%i:%i %i:%i %i %5.2f %i\n",src_proc,src_neu,dst_proc,dst_neu,preclassnum,del,w); if(ferror(fil_dst[dst_proc])) {fprintf(stderr,"fwrite dst.%i error\n",dst_proc);exit(3);} lin_no[src_proc][dst_proc]++; //if (lin_no[src_proc][dst_proc]>(USHRT_MAX-1)){ // {fprintf(stderr,"lin_no exceeding max, src_proc=%i, dst_proc=%i\n",src_proc,dst_proc);exit(3);} // } if(feof(fil_in)) { link_out[dst_proc][lout_no[dst_proc]++]=(NEURON_INDEX)src_neu; //if (lout_no[dst_proc]>(USHRT_MAX-1)){ // {fprintf(stderr,"lout_no exceeding max, dst_proc=%i\n",dst_proc);exit(3);} //} src_proc=old_src+1; } if(src_proc!=old_src) // fprintf(stderr,"%i new=%i old=%i\n",check_link,src_proc,old_src); if(src_proc>old_src) { // write out data for old_src processor nout=0; for(i=0;i0)nout++; } sprintf(fname,"%s.lout.%i",argv[1],old_src); fil_out=fopen(fname,"w"); if(fil_out==NULL){fprintf(stderr,"fopen(%s) error\n",fname);exit(1);} fwrite(&nout, sizeof(int),1,fil_out); if(nout>0) { printf("proc %i nout %i\n",old_src,nout); for(i=0;i0) { printf("%i->%i:%i\n",old_src,i,lout_no[i]); fwrite(&i,sizeof(int),1,fil_out); fwrite(&lout_no[i],sizeof(int),1,fil_out); fwrite(link_out[i],sizeof(NEURON_INDEX),lout_no[i],fil_out); /* for(ii=0;ii0) { printf("%i->%i:%i\n",old_src,old_src,lout_no[old_src]); fwrite(&old_src,sizeof(int),1,fil_out); fwrite(&lout_no[old_src],sizeof(int),1,fil_out); fwrite(link_out[old_src],sizeof(NEURON_INDEX),lout_no[old_src],fil_out); /* for(ii=0;ii0)nout++; fprintf(fil_tab,"%i %i:",old_src,nout); for(i=0;i0) fprintf(fil_tab," %i",i); } fprintf(fil_tab,"\n"); // new src_proc /* // check for(i=0;i%i,%i,%i\n",old_src,i,check_out[i][old_src],lout_no[i]); } // fprintf(stderr,"%i:out_sum=%i,check_link=%i\n",old_src,out_sum,check_link); */ if(feof(fil_in))break; bzero(lout_no,nproc*sizeof(int)); old_src=src_proc; } link_out[dst_proc][lout_no[dst_proc]++]=(NEURON_INDEX)src_neu; // check_link++; }/* while(feof) */ fclose(fil_in); fclose(fil_tab); /* for(i=0;i0)nin++; } // fprintf(stderr,"%i: in_sum=%i\n",dst_proc,in_sum); sprintf(fname,"%s.lin.%i",argv[1],dst_proc); fil_out=fopen(fname,"w"); if(fil_out==NULL){fprintf(stderr,"fopen(%s) error\n",fname);exit(1);} fwrite(&nin,sizeof(int),1,fil_out); do { if(nin>0) { if(first)printf("proc %i nin %i\n",dst_proc,nin); rewind(fil_dst[dst_proc]); old_src=-1; while(!feof(fil_dst[dst_proc])) { fscanf(fil_dst[dst_proc],"%i:%i %i:%i %i %lf %i\n",&src_proc,&src_neu,&dst_proc,&dst_neu,&preclassnum,&del,&w); if(ferror(fil_dst[dst_proc])) {fprintf(stderr,"fread dst.%i error\n",dst_proc);exit(3);} if(src_proc!=dst_proc ^ first )continue; if(src_proc>old_src && lin_no[src_proc][dst_proc]>0) { printf("%i<-%i:%i\n",dst_proc,src_proc,lin_no[src_proc][dst_proc]); fwrite(&src_proc,sizeof(int),1,fil_out); fwrite(&lin_no[src_proc][dst_proc],sizeof(int),1,fil_out); old_src=src_proc; } tmp.neuron_post=(NEURON_INDEX)dst_neu; tmp.delay=rint(del/(1000.*DELTA_T)); /*input in msec */ tmp.weight=w; /* weight */ tmp.first=tmp.last=EMPTY_LIST; /* was EMPTY_LIST */ tmp.preclass_num=(NEURON_INDEX)preclassnum; fwrite(&tmp,sizeof(struct LINK),1,fil_out); } // printf("\n"); first=!first; } } while(!first); fclose(fil_out); fclose(fil_dst[dst_proc]); remove(name[dst_proc]); } // printf("no_links=%i\n",check_link); return 0; }