// -*- C++ -*- #define N 10 #define N_PV 2 #define R (N/N_PV) #define matrice_ris "/tmp/matrice_ris" generic main() { /* N e' la dimensione della matrice N_PV e' il numero dei PV utlizzati R e' il numero di righe assegnate ad ogni PV matrice_A e matrice_B sono i file che contengono le due matrici (A, B) da moltiplicare matrice_ris e' il file che contiene la matrice risultato della moltiplicazione (C) */ stream ref_t A_rif; stream ref_t[2] B_C_rif; stream ref_t C2_rif; genera_A (output_stream A_rif); genera_B_alloca_C (output_stream B_C_rif); moltiplicazione (input_stream A_rif, B_C_rif output_stream C2_rif); end (input_stream C2_rif); } genera_A(output_stream ref_t A_rif) { proc_genera_A(output_stream A_rif); } proc proc_genera_A(output_stream ref_t A_rif) inc<"fstream","iostream"> $c++{ int displ; int dim_matrice = N*N*sizeof(long); int dim_riga = N*sizeof(long); long riga_A[N]; ref_t ref_matrice; // messaggio di partenza x il regression test std::cerr << "STARTING generaA" << std::endl; /* allocazione della matrice A in memoria condivisa */ REF_New (&ref_matrice, dim_matrice, REF_Default, 0); for (int i=0; i $c++{ int displ; int dim_matrice = N*N*sizeof(long); int dim_col = N*sizeof(long); long B[N][N]; long col_B[N]; ref_t ref_matrici[2]; //std::ifstream f; // messaggio di partenza x il regression test std::cerr << "STARTING generaB" << std::endl; /* allocazione della matrice B e della matrice C in memoria condivisa */ REF_New (&(ref_matrici[0]), dim_matrice, REF_Default, 0); REF_New (&(ref_matrici[1]), dim_matrice, REF_Default, 0); /* lettura da file della matrice B */ //f.open (matrice_B); for (int i=0; i; } } proc proc_molt(in ref_t A_rif, ref_t B_C_rif[2], long i out ref_t C_rif) inc<"iostream"> $c++{ int displ; int dim_matrice_PV = (N*N*sizeof(long))/N_PV; int dim_riga = N*sizeof(long); int base = i*R*N*sizeof(long); long righe_PV_i[R][N]; long col[N]; long ris[R][N]; /* lettura della riga i-esima della matrice A */ displ = base; cerr << "LETTURA i= "<< i << " displ = " << displ << " size = " << dim_matrice_PV << endl; REF_D_Read (&(A_rif), righe_PV_i, displ, dim_matrice_PV); for (int k=0; k $c++{ int displ; int size = N*sizeof(long); long riga_C[N]; std::ofstream f; // verifica del risultato tramite esecuzione sequenziale della moltiplicazione static long A[N][N]; static long B[N][N]; static long C[N][N]; int ok = 0; // lettura da file della matrice A for (int i=0; i