#include <stdio.h>
#include <sys/timeb.h>
#include <stdlib.h>
const int SIZE=512;
unsigned char M1[SIZE][SIZE];
unsigned char M2[SIZE][SIZE];
unsigned char M3[SIZE][SIZE];
void randomize(int s) {
timeb h;
srand(s);
for(int i=0;i<s;i++) {
for(int j=0;j<s;j++) {
M1[i][j]=rand()%128;
M2[i][j]=M1[i][j]%127;
}
}
}
void transponeM1(int s) {
for(int i=0;i<s;i++) {
for(int j=0;j<s;j++) {
int k = M1[i][j];
M1[i][j]=M1[j][i];
M1[j][i]=k;
}
}
}
void transponeM2(int s) {
for(int i=0;i<s;i++) {
for(int j=0;j<s;j++) {
int k = M1[i][j];
M1[i][j]=M1[j][i];
M1[j][i]=k;
}
}
}
void main() {
FILE * out = fopen("matrix.csv","wt");
int s,i,j,r;
long measured=0;
timeb start, end;
for(s=0;s<=SIZE;s+=4) {
randomize(s);
ftime(&start);
for(i=0;i<s;i++) {
for(j=0;j<s;j++) {
M3[i][j]=0;
for(r=0;r<s;r++) {
M3[i][j]+=M1[i][r]*M2[r][j];
}
}
}
ftime(&end);
measured = (end.time*1000+end.millitm)-(start.time*1000+start.millitm);
fprintf(out,"%i;%i;",s,measured);
printf("%i - %i - ",s,measured);
transponeM1(s);
ftime(&start);
for(i=0;i<s;i++) {
for(j=0;j<s;j++) {
M3[i][j]=0;
for(r=0;r<s;r++) {
M3[i][j]+=M1[r][i]*M2[r][j];
}
}
}
ftime(&end);
measured = (end.time*1000+end.millitm)-(start.time*1000+start.millitm);
fprintf(out,"%i;",measured);
printf("%i - ",measured);
transponeM1(s);
transponeM2(s);
ftime(&start);
for(i=0;i<s;i++) {
for(j=0;j<s;j++) {
M3[i][j]=0;
for(r=0;r<s;r++) {
M3[i][j]+=M1[i][r]*M2[j][r];
}
}
}
ftime(&end);
measured = (end.time*1000+end.millitm)-(start.time*1000+start.millitm);
fprintf(out,"%i\n",measured);
printf("%i\n",measured);
}
fclose(out);
}
Конец листинга 3
График 5. Время умножения матриц (0-80КВ)
График 6. Время умножения матриц(0-256КВ)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.