'배열 곱셈'에 해당되는 글 1건

  1. 2007/09/21 캐쉬를 고려한 배열 곱셈(upgrade)

#include  <stdio.h>
#include  <time.h>
#define  N 2048

main(){
      int  **a,  **b,  **c;
      register int  s,  e,  i,  j,  k, sum,  sum_col1 = 0, sum_col2 = 0;

 a = (int **)calloc(N, sizeof(int));
 b = (int **)calloc(N, sizeof(int));
 c = (int **)calloc(N, sizeof(int));

 for ( i = 0; i < N; i++ )
 {
  a[i] = (int *)calloc(N, sizeof(int));
  b[i] = (int *)calloc(N, sizeof(int));
  c[i] = (int *)calloc(N, sizeof(int));
 }

      printf("Program  Starting....\n");

      for  (i  =  0;  i  <  N;  i++){
            for  (j  =  0;  j  <  N;  j++){
                  a[i][j]  =  1;
                  b[i][j]  =  2;
                  c[i][j]  =  0;
            }
      }

    s  =  clock();
 sum = 0;
   for ( j = 0; j < N; j++ )
      {
            for ( k = j; k < N; k++ )
     {
    if ( j != k)
    {
       sum = b[j][k];
       b[j][k] = b[k][i];
       b[k][i] = sum;
    }
     }
      }
 
      for  (i  =  0;  i  <  N/2;  i++)
   {
            for  (j  =  0;  j  <  N;  j++)
   {
    sum_col1 = 0;
    sum_col2 = 0;

                  for  (k  =  0;  k  <  N/2;  k++)
      {
                       sum_col1 += (a[i*2][k*2]*b[j][k*2]) + (a[i*2][k*2+1]*b[j][k*2+1]);
        sum_col2 += (a[i*2+1][k*2]*b[j][k*2]) + (a[i*2+1][k*2+1]*b[j][k*2+1]);
      }
      c[i*2][j] = sum_col1;
      c[i*2+1][j] = sum_col2;
   }
 }
 
      e  =  clock();
      printf("time  :  %d  clocks \n",  (e-s));
      printf("time  :  %d  seconds \n",  (e-s)/CLOCKS_PER_SEC);
      printf("c[1][1]  :  %d\n",  c[1][1]);
      printf("Program  End....\n");

   for(i = 0; i < N; i++)
  {
   free(a[i]);
   free(b[i]);
   free(c[i]);
     }

     free(a);
     free(b);
     free(c);

}

[보고서 다운로드]