Processo dove è presente clock_gettime
Main.ccodice:case 1: clock_gettime(CLOCK_REALTIME, &ts1); /* E' qui che si verifica l'errore! */ a=(short*)malloc(n_a*m_a*sizeof(short)); b=(short*)malloc(n_b*m_b*sizeof(short)); c=(short*)malloc(n_a*m_b*sizeof(short)); s_main(a,b,c,n_a,m_a,n_b,m_b); clock_gettime(CLOCK_REALTIME, &ts2); eTime0 = (double)(ts2.tv_sec - ts1.tv_sec); eTime1 = (double)(ts2.tv_nsec - ts1.tv_nsec); eTime = eTime0 + eTime1*1.0e-9; printf("\ngettime(): \t\t\tElapsed Time = %e sec", eTime); break;
s_main.ccodice:#include <stdio.h> #include <stdlib.h> #include <time.h> void main() { short *a,*b,*c,i,j,n_a,n_b,m_a,m_b,x; struct timespec ts1, ts2; double eTime, eTime0, eTime1; do { puts("Inserire numero di righe della matrice A:"); scanf("%hd",&n_a); __fpurge(stdin); puts("Inserire numero di colonne della matrice A:"); scanf("%hd",&m_a); __fpurge(stdin); puts("Inserire numero di righe della matrice B:"); scanf("%hd",&n_b); __fpurge(stdin); puts("Inserire numero di colonne della matrice B:"); printf("(Il numero di colonne della matrice B deve essere uguale al numero di righe della matrice A(%hd)):\n",n_a); scanf("%hd",&m_b); __fpurge(stdin);}while(n_a!=m_b); while(x!=3) { puts("1.Processo con malloc."); puts("2.Processo con calloc."); puts("3.Fine."); puts("Inserire scelta:"); scanf("%hd",&x); __fpurge(stdin); switch(x) { case 1: clock_gettime(CLOCK_REALTIME, &ts1); /* E' qui che si verifica l'errore! */ a=(short*)malloc(n_a*m_a*sizeof(short)); b=(short*)malloc(n_b*m_b*sizeof(short)); c=(short*)malloc(n_a*m_b*sizeof(short)); s_main(a,b,c,n_a,m_a,n_b,m_b); clock_gettime(CLOCK_REALTIME, &ts2); eTime0 = (double)(ts2.tv_sec - ts1.tv_sec); eTime1 = (double)(ts2.tv_nsec - ts1.tv_nsec); eTime = eTime0 + eTime1*1.0e-9; printf("\ngettime(): \t\t\tElapsed Time = %e sec", eTime); break; case 2: clock_gettime(CLOCK_REALTIME, &ts1); a=(short*)calloc(n_a*m_a,sizeof(short)); b=(short*)calloc(n_b*m_b,sizeof(short)); c=(short*)calloc(n_a*m_b,sizeof(short)); s_main(a,b,c,n_a,m_a,n_b,m_b); clock_gettime(CLOCK_REALTIME, &ts2); eTime0 = (double)(ts2.tv_sec - ts1.tv_sec); // sec eTime1 = (double)(ts2.tv_nsec - ts1.tv_nsec); // nano sec eTime = eTime0 + eTime1*1.0e-9; // sec printf("\ngettime(): \t\t\tElapsed Time = %e sec", eTime); break; case 3: puts("Uscita"); break; default: puts("Inserire un valore tra 1 e 3."); break; } } }
comp.ccodice:#include <stdio.h> #include <stdlib.h> #include <time.h> void s_main(short *a,short *b,short *c,short n_a,short m_a,short n_b,short m_b) { comp(n_a,m_a,a); comp(n_b,m_b,b); stamp(n_a,m_a,a,'A'); stamp(n_b,m_b,b,'B'); prod(n_a,m_a,n_b,m_b,a,b,c); stamp(n_a,m_b,c,'C'); }
stamp.ccodice:#include <stdio.h> #include <stdlib.h> #include <time.h> void comp(short n_x,short m_x, short *x) { srand(time (NULL)); short i,j; for(i=0;i<n_x;i++) for(j=0;j<m_x;j++) *(x+i*n_x+j)=rand()%10; }
prod.ccodice:#include <stdio.h> #include <stdlib.h> #include <time.h> void stamp(short n_x,short m_x,short *x,char y) { short i,j; printf("\n\nMatrice %c:\n",y); for(i=0;i<n_x;i++) { printf("\n"); for(j=0;j<m_x;j++) printf("%hd ",*(x+i*n_x+j)); } }
Grazie!codice:#include <stdio.h> #include <stdlib.h> #include <time.h> void prod(short n_x,short m_x,short n_y,short m_y,short *a,short *b,short *c) { short i,j,k,x,sum; for (i=0;i<n_x;i++) for (j=0;j<m_y;j++) { sum=0; for (k=0;k<m_x;k++) { x=(*(a+(i*n_x)+k))*(*(b+k*n_y+j)); sum=sum+x; } *(c+i*n_x+j)=sum; } }

Rispondi quotando