Zealint, честно говоря, не понимаю вашего стремления не использовать сторонние библиотеки.
Приведу "собранный на коленке" пример перемножения матриц 5000x5000:
Код:
#include <stdio.h>
#include <gsl/gsl_matrix.h>
main(){
int i, j;
gsl_matrix *m1 = gsl_matrix_alloc(5000,5000);
gsl_matrix *m2 = gsl_matrix_alloc(5000,5000);
for(i=0; i<5000; i++)
for(j=0; j<5000; j++){
gsl_matrix_set(m1, i, j, i*5000.+j);
gsl_matrix_set(m2, i, j, i*1000.+j);
}
gsl_matrix_mul_elements(m1, m2);
FILE *f = fopen("matrix_mult", "w");
for(i=0; i<5000; i++){
for(j=0; j<5000; j++)
fprintf(f, "%.0f\t", gsl_matrix_get(m1, i, j));
fprintf(f, "\n");
}
fclose(f);
gsl_matrix_free(m1);
gsl_matrix_free(m2);
}
Выполняем:
Код:
gcc 1.c -lgsl -lgslcblas -lm && time ./a.out
48.41user 1.94system 0:58.87elapsed 85%CPU (0avgtext+0avgdata 0maxresident)k
1064inputs+0outputs (14major+97916minor)pagefaults 0swaps
Причем львиную долю времени, естественно, занимает запись в файл. Без нее:
Код:
gcc 1.c -lgsl -lgslcblas -lm && time ./a.out
2.09user 0.40system 0:02.50elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+97868minor)pagefaults 0swaps
Как видите, очень быстро.
Правда, кушает оно 387МБ оперативки, а файл с результатами занял 358МБ!