int main() { short pcrnum = 0x7; char digest[] = { 0x22, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff}; if (utpm_pcr_extend(pcrnum, digest) != 0) { printf("pcr extend failed.\n"); return -1; } printf("pcr_extend: pcr %d is: \n", pcrnum); printf_buffer(digest, 20); char digest2[20]; if (utpm_pcr_read(pcrnum, digest2) != 0) { printf("pcr read failed.\n"); return -1; } printf("pcr_read: pcr %d is: \n", pcrnum); printf_buffer(digest2, 20); return 0; }
int main(int argc, char const *argv[]) { int size, rank; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&size); MPI_Status status; int subROWS=ROWS/size; double *local,*local_new; double *p,*p_new; init_grid(&local,&local_new,COLS,subROWS+2); if (0==rank) { init_grid(&p,&p_new,COLS,ROWS+2); init_boundaries(p,COLS,ROWS+2); memmove(p_new,p,COLS*(ROWS+2)*sizeof(double)); printf_buffer(p_new,COLS,ROWS+2); } MPI_Barrier(MPI_COMM_WORLD); return 0; }
int main(int argc, char const *argv[]) { int size, rank; //MPI_Init(&argc, &argv); MPI_Init(NULL,NULL); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&size); MPI_Status status; int subROWS=ROWS/size; double *local,*local_new; double *p,*p_new; init_grid(&local,&local_new,COLS,subROWS+2); if (0==rank) { printf("Size: %d\nSubrow size is:%d\nThis is the unrelaxed data we have:\n",size,subROWS); init_grid(&p,&p_new,COLS,ROWS+2); init_boundaries(p,COLS,ROWS+2); memmove(p_new,p,COLS*(ROWS+2)*sizeof(double)); printf_buffer(p_new,COLS,ROWS+2); printf("data ended\n"); } MPI_Barrier(MPI_COMM_WORLD); /*free(local); free(local_new); free(p); free(p_new);*/ //return 0; //MPI_Barrier(MPI_COMM_WORLD) if(0==rank) for(int j=0;j<size;j++) MPI_Send(p+j*subROWS*COLS,(subROWS+2)*COLS,MPI_DOUBLE,j,0,MPI_COMM_WORLD); MPI_Recv(local,(subROWS+2)*COLS,MPI_DOUBLE,0,0,MPI_COMM_WORLD,NULL); register int count=50; int up_nbr,dn_nbr; double *firstbuf, *lastbuf; init_grid(&firstbuf,&lastbuf,COLS,1); while(count>=0) { ///* //printf("Rank:%d\n",rank); memmove(local_new,local,COLS*(subROWS+2)*sizeof(double)); relax(local_new,local,COLS,subROWS+2); //printf("After relax\n"); //printf_buffer(local_new,COLS,subROWS+2); memmove(lastbuf,local_new,COLS*sizeof(double)); memmove(firstbuf,local_new+(subROWS+1)*COLS,COLS*sizeof(double)); up_nbr=(rank==size-1) ? MPI_PROC_NULL : rank+1; dn_nbr=(rank==0) ? MPI_PROC_NULL : rank-1; //refresh these two buffers here MPI_Sendrecv(local_new+(1)*COLS,COLS,MPI_DOUBLE,dn_nbr,0,firstbuf,COLS,MPI_DOUBLE,up_nbr,MPI_ANY_TAG,MPI_COMM_WORLD,&status); MPI_Sendrecv(local_new+(subROWS)*COLS,COLS,MPI_DOUBLE,up_nbr,0,lastbuf,COLS,MPI_DOUBLE,dn_nbr,MPI_ANY_TAG,MPI_COMM_WORLD,&status); MPI_Barrier(MPI_COMM_WORLD); memmove(local_new,lastbuf,COLS*sizeof(double)); memmove(local_new+(subROWS+1)*COLS,firstbuf,COLS*sizeof(double)); //maybe things here memmove(local,local_new,COLS*(subROWS+2)*sizeof(double)); //printf("After send receive\n"); //printf_buffer(local_new,COLS,subROWS+2); //printf("Rank:%d over\n",rank); // count=count-1; } MPI_Send(local_new+1*COLS,(subROWS)*COLS,MPI_DOUBLE,0,(subROWS+2),MPI_COMM_WORLD); //receive relaxed data if (0==rank) for(int i=0;i<size;i++) { MPI_Probe(MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&status); //MPI_Recv(p_new+(status,MPI_SOURCE*subROWS+1)*COLS,(subROWS)*COLS,MPI_DOUBLE,status,MPI_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&status); MPI_Recv(p_new+(status.MPI_SOURCE*subROWS+1)*COLS,(subROWS)*COLS,MPI_DOUBLE,status.MPI_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&status); } if(0==rank) { printf("Final result:\n"); printf_buffer(p_new,COLS,ROWS+2); } free(local); free(local_new); free(p); free(p_new); free(firstbuf); free(lastbuf); MPI_Finalize(); return 0; }