PAS D'ERREURS SUR >100 EXEC. ÉCONOMIE MAX (VERTEX, LIGNES). À TESTER ET OPTIMISER.
This commit is contained in:
parent
89c593ad38
commit
e58d86a58f
|
@ -43,6 +43,7 @@ void print_user_action(struct arrow_t *arrows, int arrows_nb, int address, int r
|
||||||
void print_user_choices(struct arrow_t *arrows, int arrows_nb,
|
void print_user_choices(struct arrow_t *arrows, int arrows_nb,
|
||||||
int space_size_x, int space_size_y, int space_size_z,
|
int space_size_x, int space_size_y, int space_size_z,
|
||||||
int show_array, int show_space_design);
|
int show_array, int show_space_design);
|
||||||
|
void print_evolution (struct arrow_t *arrows, int arrows_nb, int modified, int deleted, int show_array);
|
||||||
/*
|
/*
|
||||||
* Prints the initial user choices :
|
* Prints the initial user choices :
|
||||||
* - space dimension size and appearance (grids)
|
* - space dimension size and appearance (grids)
|
||||||
|
|
|
@ -58,15 +58,30 @@ void print_user_choices(struct arrow_t *arrows, int arrows_nb,
|
||||||
int space_size_x, int space_size_y, int space_size_z,
|
int space_size_x, int space_size_y, int space_size_z,
|
||||||
int show_array, int show_space_design)
|
int show_array, int show_space_design)
|
||||||
{
|
{
|
||||||
printf("model + user constraints :\tspace size x,y,z = %d,%d,%d\tarrows nb = %d\t",\
|
printf("model + user constraints :\tspace size x,y,z (%3d,%3d,%3d)\tarrows nb : %6d\t",\
|
||||||
space_size_x, space_size_y, space_size_z, arrows_nb);
|
space_size_x, space_size_y, space_size_z, arrows_nb);
|
||||||
|
|
||||||
if (show_space_design) printf("orientations grilles alternées");
|
if (show_space_design) printf(" (grilles alternées)");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
if (show_array) print_arrows_array (arrows, arrows_nb);
|
if (show_array) print_arrows_array (arrows, arrows_nb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Prints the evolution after adding / removing arrows :
|
||||||
|
* - arrows[] array
|
||||||
|
* NB The space may be empty or saturated with arrows or any value in between
|
||||||
|
* Only one arrow per possible coordinates with a load max equal to ? TODO
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* print_evolution (arrows, added, mem, deleted, print_arrows_data);
|
||||||
|
*/
|
||||||
|
void print_evolution (struct arrow_t *arrows, int arrows_nb, int modified, int deleted, int show_array)
|
||||||
|
{
|
||||||
|
printf("evolution\t\t\t\t\t\t\tarrows nb > %6d\t (%d added / %d deleted) (modified : %d)\n",\
|
||||||
|
arrows_nb + modified - deleted * 2, modified - deleted, deleted, modified);
|
||||||
|
if (show_array) print_arrows_array (arrows, arrows_nb);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Prints the arrows[] array
|
* Prints the arrows[] array
|
||||||
*
|
*
|
||||||
|
|
|
@ -627,6 +627,8 @@ static inline int set_arrow (struct arrow_t *arrows, int arrows_nb, int requeste
|
||||||
{
|
{
|
||||||
int address = -1, current_weight = -1;
|
int address = -1, current_weight = -1;
|
||||||
|
|
||||||
|
#pragma omp parallel schedule(static, 12)
|
||||||
|
{
|
||||||
for (int i = 0; i < arrows_nb; i++) {
|
for (int i = 0; i < arrows_nb; i++) {
|
||||||
if ((site == arrows[i].site)
|
if ((site == arrows[i].site)
|
||||||
&& (x == arrows[i].x)
|
&& (x == arrows[i].x)
|
||||||
|
@ -638,7 +640,7 @@ static inline int set_arrow (struct arrow_t *arrows, int arrows_nb, int requeste
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
//printf("\n[%d]set_arrow() invoked with requested weight = %2d + ", arrows_nb, requested_weight);
|
//printf("\n[%d]set_arrow() invoked with requested weight = %2d + ", arrows_nb, requested_weight);
|
||||||
|
|
||||||
if (TEST) show_user_action(arrows, arrows_nb, address, requested_weight, current_weight, site, x, y, z);
|
if (TEST) show_user_action(arrows, arrows_nb, address, requested_weight, current_weight, site, x, y, z);
|
||||||
|
@ -673,11 +675,12 @@ void __attribute__((optimize("no-unroll-loops"))) main_test_graphics (void)
|
||||||
// assert : no more than one arrow per address
|
// assert : no more than one arrow per address
|
||||||
// notify : weights are replaced, NOT added (could be !)
|
// notify : weights are replaced, NOT added (could be !)
|
||||||
|
|
||||||
|
struct timespec ts;
|
||||||
srand(time(NULL)); // Initialisation du générateur pseudo-aléatoire
|
srand(time(NULL)); // Initialisation du générateur pseudo-aléatoire
|
||||||
int rand(void);
|
int rand(void);
|
||||||
void srand(unsigned int seed); // printf ("Valeur max : %d\n", RAND_MAX); min + rand() % (max+1 - min);
|
void srand(unsigned int seed); // printf ("Valeur max : %d\n", RAND_MAX); min + rand() % (max+1 - min);
|
||||||
|
|
||||||
int arbitrary = 0;
|
int arbitrary = 200;
|
||||||
int space_X = 1 + rand() % arbitrary,
|
int space_X = 1 + rand() % arbitrary,
|
||||||
space_Y = 1 + rand() % arbitrary,
|
space_Y = 1 + rand() % arbitrary,
|
||||||
space_Z = 1 + rand() % arbitrary;
|
space_Z = 1 + rand() % arbitrary;
|
||||||
|
@ -687,37 +690,48 @@ void __attribute__((optimize("no-unroll-loops"))) main_test_graphics (void)
|
||||||
int show_space_design = 1, print_arrows_data = 0;
|
int show_space_design = 1, print_arrows_data = 0;
|
||||||
|
|
||||||
int load = 0, site = 0, x = 0, y = 0, z = 0;
|
int load = 0, site = 0, x = 0, y = 0, z = 0;
|
||||||
int specif_arrows_nb = rand() % density_max / 3;
|
int specif_arrows_nb = rand() % density_max;
|
||||||
int arrows_nb = 0;
|
int arrows_nb = 0, cpt = 0, t_initial = 0;
|
||||||
|
|
||||||
/* while (arrows_nb < specif_arrows_nb){ */
|
clock_gettime(CLOCK_REALTIME, &ts); t_initial = ts.tv_sec;
|
||||||
/* arrows_nb = set_arrow (arrows, arrows_nb, */
|
printf("%10d | ", specif_arrows_nb / 1000);
|
||||||
/* rand() % arbitrary + 1, // load / weight */
|
#pragma omp parallel
|
||||||
/* rand() % 6, // site, */
|
{
|
||||||
/* rand() % space_X, // x */
|
while (arrows_nb < specif_arrows_nb){
|
||||||
/* rand() % space_Y, // y */
|
arrows_nb = set_arrow (arrows, arrows_nb,
|
||||||
/* rand() % space_Z); // z */
|
rand() % arbitrary + 1, // load / weight
|
||||||
/* } */
|
rand() % 6, // site,
|
||||||
|
rand() % space_X, // x
|
||||||
|
rand() % space_Y, // y
|
||||||
|
rand() % space_Z); // z
|
||||||
|
|
||||||
|
/* clock_gettime(CLOCK_REALTIME, &ts); < Je n'arrive pas à afficher les temps en cours d'exécutuion */
|
||||||
|
/* if (arrows_nb % 1000 == 0) {cpt++; printf("%8d", arrows_nb / 1000); if (cpt % 22 == 0) printf(" %f\n%10d | ", specif_arrows_nb / 1000, ts.tv_sec - t_initial);} */
|
||||||
|
if (arrows_nb % 1000 == 0) {cpt++; printf("%8d", arrows_nb / 1000); if (cpt % 24 == 0) printf("\n%10d | ", specif_arrows_nb / 1000);}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
// clock_t start, end;
|
// clock_t start, end;
|
||||||
|
|
||||||
/* Recording the starting clock tick.*/
|
/* Recording the starting clock tick.*/
|
||||||
// start = clock();
|
// start = clock();
|
||||||
|
|
||||||
arbitrary = 24;
|
/* arbitrary = 26; */
|
||||||
space_X = arbitrary; space_Y = arbitrary; space_Z = arbitrary;
|
/* space_X = arbitrary; space_Y = arbitrary; space_Z = arbitrary; */
|
||||||
density_max = space_X * space_Y * space_Z;
|
/* density_max = space_X * space_Y * space_Z;
|
||||||
for (int i =0; i < space_X; i++)
|
* C E T T E T R I P L E B O U C L E
|
||||||
for (int j =0; j < space_Y; j++)
|
* S A T U R E L ' E S P A C E S Y S T É M A T I Q U E M E N T */
|
||||||
for (int k =0; k < space_Z; k++)
|
/* for (int i =0; i < space_X; i++) */
|
||||||
for (int u =0; u < 6; u++)
|
/* for (int j =0; j < space_Y; j++) */
|
||||||
arrows_nb = set_arrow (arrows, arrows_nb,
|
/* for (int k =0; k < space_Z; k++) */
|
||||||
1, // load / weight
|
/* for (int u =0; u < 6; u++) */
|
||||||
u,//i % 6, // site,
|
/* arrows_nb = set_arrow (arrows, arrows_nb, */
|
||||||
i,//i % space_X, // x
|
/* 1, // load / weight */
|
||||||
j,//i % space_Y, // y
|
/* u,//i % 6, // site, */
|
||||||
k//i % space_Z);
|
/* i,//i % space_X, // x */
|
||||||
);
|
/* j,//i % space_Y, // y */
|
||||||
|
/* k//i % space_Z); */
|
||||||
|
/* ); */
|
||||||
// end = clock(); printf("Elapsed time %ld\n", end - start);
|
// end = clock(); printf("Elapsed time %ld\n", end - start);
|
||||||
|
|
||||||
print_user_choices(arrows, arrows_nb, space_X, space_Y, space_Z, print_arrows_data, show_space_design);
|
print_user_choices(arrows, arrows_nb, space_X, space_Y, space_Z, print_arrows_data, show_space_design);
|
||||||
|
@ -737,13 +751,13 @@ void __attribute__((optimize("no-unroll-loops"))) main_test_graphics (void)
|
||||||
offset_vertex += write_space_ridges_vertex (offset_vertex, offset_colors, offset_lines, space_X, space_Y, space_Z);
|
offset_vertex += write_space_ridges_vertex (offset_vertex, offset_colors, offset_lines, space_X, space_Y, space_Z);
|
||||||
offset_colors = offset_vertex;
|
offset_colors = offset_vertex;
|
||||||
|
|
||||||
if (1) printf("offset_vertex after writing_space_ridges_vertex : %d (x 3 = %d)\n\n", offset_vertex, offset_vertex * 3);
|
if (0) printf("offset_vertex after writing_space_ridges_vertex : %d (x 3 = %d)\n\n", offset_vertex, offset_vertex * 3);
|
||||||
|
|
||||||
offset_vertex += write_grids_on_space_faces_vertex (offset_vertex, offset_colors, offset_lines, space_X, space_Y, space_Z, show_space_design);
|
offset_vertex += write_grids_on_space_faces_vertex (offset_vertex, offset_colors, offset_lines, space_X, space_Y, space_Z, show_space_design);
|
||||||
offset_colors = offset_vertex;
|
offset_colors = offset_vertex;
|
||||||
|
|
||||||
if (1) printf("offset_vertex after writing_space_faces_vertex = %4d - 8 = %3d (x 3 = %4d)\n", offset_vertex, offset_vertex - 8, (offset_vertex - 8) * 3);
|
if (0) printf("offset_vertex after writing_space_faces_vertex = %4d - 8 = %3d (x 3 = %4d)\n", offset_vertex, offset_vertex - 8, (offset_vertex - 8) * 3);
|
||||||
if (1) printf("(space_X - 1) * 4 + (space_Y - 1) * 4 + (space_Z - 1) * 4 = %3d (x 3 = %4d)\n\n",\
|
if (0) printf("(space_X - 1) * 4 + (space_Y - 1) * 4 + (space_Z - 1) * 4 = %3d (x 3 = %4d)\n\n",\
|
||||||
(space_X - 1) * 4 + (space_Y - 1) * 4 + (space_Z - 1) * 4, ((space_X - 1) * 4 + (space_Y - 1) * 4 + (space_Z - 1) * 4) * 3);
|
(space_X - 1) * 4 + (space_Y - 1) * 4 + (space_Z - 1) * 4, ((space_X - 1) * 4 + (space_Y - 1) * 4 + (space_Z - 1) * 4) * 3);
|
||||||
|
|
||||||
|
|
||||||
|
@ -762,7 +776,7 @@ void __attribute__((optimize("no-unroll-loops"))) main_test_graphics (void)
|
||||||
offset_colors = offset_vertex;
|
offset_colors = offset_vertex;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (1) printf("offset_vertex after writing_arrows_vertex : %d (x 3 = %d) (arrows_nb = %d)\n", offset_vertex, offset_vertex * 3, arrows_nb);
|
if (0) printf("offset_vertex after writing_arrows_vertex : %d (x 3 = %d) (arrows_nb = %d)\n", offset_vertex, offset_vertex * 3, arrows_nb);
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------*/
|
/*---------------------------------------------------------------*/
|
||||||
|
@ -790,10 +804,29 @@ void __attribute__((optimize("no-unroll-loops"))) main_test_graphics (void)
|
||||||
load, site, x, y, z);
|
load, site, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert : arrows_nb > arbitrary;
|
||||||
|
int random_choice, modified = 0, deleted = 0;
|
||||||
|
|
||||||
|
#pragma omp parallel
|
||||||
|
{
|
||||||
|
while (modified < arbitrary) {
|
||||||
|
|
||||||
|
random_choice = rand() % 6;
|
||||||
|
if (random_choice == 0) deleted++;
|
||||||
|
|
||||||
|
modified = set_arrow (arrows, modified,
|
||||||
|
random_choice, // load / weight
|
||||||
|
rand() % 6, // site,
|
||||||
|
rand() % space_X, // x
|
||||||
|
rand() % space_Y, // y
|
||||||
|
rand() % space_Z); // z
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print_evolution (arrows, arrows_nb, arbitrary, deleted, print_arrows_data);
|
||||||
|
|
||||||
|
|
||||||
// ? free (space) TODO
|
// ? free (space) TODO
|
||||||
free(arrows);
|
free(arrows);
|
||||||
arrows = NULL;
|
arrows = NULL;
|
||||||
arrows_nb = 0;
|
arrows_nb = 0;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue