source: trunk/Softwares/Basic_test/src/c/func_mm.c@ 98

Last change on this file since 98 was 81, checked in by rosiere, 18 years ago
  • Finish Environment (and test)
  • Continue predictor_unit
  • Add external tools
  • svn keyword "Id" set
  • Property svn:keywords set to Id
File size: 2.4 KB
Line 
1#include "func_mm.h"
2
3void mm_algo1 ( unsigned int size_matrix
4 ,unsigned int ** matrix_a
5 ,unsigned int ** matrix_b
6 ,unsigned int ** matrix_d)
7{
8 unsigned int index_i, index_j, index_k;
9
10 for (index_i = 0; index_i < size_matrix; index_i ++)
11 for (index_j = 0; index_j < size_matrix; index_j ++)
12 {
13 matrix_d [index_i][index_j] = 0;
14
15 for (index_k = 0; index_k < size_matrix; index_k ++)
16 matrix_d [index_i][index_j] += matrix_a[index_i][index_k] * matrix_b[index_k][index_j];
17 }
18}
19
20int mm(unsigned int size_matrix, unsigned int algo)
21{
22 unsigned int matrix_a [size_matrix][size_matrix];
23 unsigned int matrix_b [size_matrix][size_matrix];
24 unsigned int matrix_d [size_matrix][size_matrix];
25 unsigned int sum , sum_ok;
26 unsigned int index_i, index_j;
27
28 /*
29 * PHASE 1 : Initialisation
30 */
31
32 /* Flush matrix_d */
33 for (index_i = 0; index_i < size_matrix; index_i ++)
34 for (index_j = 0; index_j < size_matrix; index_j ++)
35 {
36 matrix_a [index_i][index_j] = index_i+1;
37 matrix_b [index_i][index_j] = index_i+1;
38 matrix_d [index_i][index_j] = 0;
39 }
40
41 sum = (size_matrix*(size_matrix+1))>>1;
42 /*
43 sum = (N*(N+1))/2;
44 ici sum = (4*5)/2 = 10
45
46 ( 1 1 1 1 )
47 ( 2 2 2 2 )
48 ( 3 3 3 3 )
49 ( 4 4 4 4 )
50 ( 1 1 1 1 ) 10 10 10 10 -> 1*sum
51 ( 2 2 2 2 ) 20 20 20 20 -> 2*sum
52 ( 3 3 3 3 ) 30 30 30 30 -> 3*sum
53 ( 4 4 4 4 ) 40 40 40 40 -> 4*sum
54 */
55
56 /*
57 * PHASE 2 : Execution
58 */
59
60 switch (algo)
61 {
62 case 1 :
63 {
64 /* méthode classique */
65
66 unsigned int index_i, index_j, index_k;
67
68 for (index_i=0;index_i<size_matrix;index_i++)
69 for (index_j=0;index_j<size_matrix;index_j++)
70 {
71 matrix_d [index_i][index_j] = 0;
72
73 for (index_k=0;index_k<size_matrix;index_k++)
74 matrix_d [index_i][index_j] += matrix_a[index_i][index_k] * matrix_b[index_k][index_j];
75 }
76
77 //mm_algo1(size_matrix, matrix_a, matrix_b, matrix_d);
78 break;
79 }
80 default :break;
81 }/* end switch algo */
82
83 /*
84 * PHASE 3 : Test
85 */
86
87 sum_ok = 0;
88
89 for (index_i=0;index_i<size_matrix;index_i++)
90 {
91 unsigned int row_sum = (index_i+1)*sum;
92
93 for (index_j=0;index_j<size_matrix;index_j++)
94 if ((matrix_a[index_i][index_j] == index_i+1) &&
95 (matrix_b[index_i][index_j] == index_i+1) &&
96 (matrix_d[index_i][index_j] == row_sum)
97 )
98 sum_ok ++;
99 }
100
101 return (sum_ok == (size_matrix * size_matrix) );
102}
Note: See TracBrowser for help on using the repository browser.