void avx512f_test (void) { int i, sign; union128 res1, res2, res3, src1, src2; MASK_TYPE mask = MASK_VALUE; float res_ref[SIZE]; sign = -1; for (i = 0; i < SIZE; i++) { src1.a[i] = 1.5 + 34.67 * i * sign; src2.a[i] = -22.17 * i * sign + 1.0; sign = sign * -1; } for (i = 0; i < SIZE; i++) res2.a[i] = DEFAULT_VALUE; res1.x = _mm_min_round_ss (src1.x, src2.x, _MM_FROUND_NO_EXC); res2.x = _mm_mask_min_round_ss (res2.x, mask, src1.x, src2.x, _MM_FROUND_NO_EXC); res3.x = _mm_maskz_min_round_ss (mask, src1.x, src2.x, _MM_FROUND_NO_EXC); calc_min (res_ref, src1.a, src2.a); if (check_union128 (res1, res_ref)) abort(); MASK_MERGE () (res_ref, mask, 1); if (check_union128 (res2, res_ref)) abort (); MASK_ZERO () (res_ref, mask, 1); if (check_union128 (res3, res_ref)) abort (); }
/* Riempie la matrice dei tempi delle collisioni per j>i */ void collision_table (){ int i,j; for (i = 0; i < number_of_particles ; i++){ for ( j= i+1 ; j < number_of_particles; j++){ collTable[i*number_of_particles + j] = calc_min ( i, j ); } } }
void calc(int bit,char s[]) { printf("%s\n",s); printf("signed\t"); calc_smax(bit); calc_min(bit); printf("\nunsigned\t"); calc_umax(bit); printf("\n"); }
void calc_min_global(void *data_local, void *result, size_t n_data_local, SID_Datatype type, int mode, SID_Comm *comm){ calc_min(data_local,result,n_data_local,type,mode); if(check_mode_for_flag(mode,CALC_MODE_RETURN_DOUBLE)) SID_Allreduce(SID_IN_PLACE,result,1,SID_DOUBLE,SID_MIN,comm); else SID_Allreduce(SID_IN_PLACE,result,1,type, SID_MIN,comm); }
/* Aggiorna i tempi di collisioni per le righe e le colonne della matrice della particelle che hanno colliso: * * * NOTA BENE : * Modifica le righe associate ad una particella -> LA MATRICE é simmetrica * * * */ void update_coll_table(){ int i,j; int a,b,c; for (i = 0; i < 2 ; i++){ /* a,b indici di riga e colonna -> Matrice simmetrica: tengo solo b>a, ossia j> index_collision[i] */ for ( j= 0 ; j < number_of_particles; j++){ a=index_collision[i]; b=j; if( a != b){ /*considero sempre solo la parte in alto a dx della matrice*/ if( a>b){ c=a; a=b; b=c; } collTable[a*number_of_particles+b]= calc_min(a,b); } } } }