# include # include # include # include # include using namespace std; int main ( int argc, char *argv[] ); //****************************************************************************80 int main ( int argc, char *argv[] ) //****************************************************************************80 // // Purpose: // // MAIN is the main program for L1_NORM. // { int i; int j; int num_threads; int n = 1000; double wtime; double wtime1; double wtime2; float *x; float *x_l1_norm; # pragma omp parallel { num_threads = omp_get_num_threads ( ); } cout << "\n"; cout << "L1_NORM:\n"; cout << " C++ version\n"; cout << " Number of threads is " << num_threads << "\n"; x = new float[n*n]; // // Set X to random values. // for ( j = 0; j < n; j++ ) { for ( i = 0; i < n; i++ ) { x[i+j*n] = ( float ) rand ( ) / ( float ) RAND_MAX; } } x_l1_norm = new float[n]; // // Compute the l1 norm sequentially. // wtime1 = omp_get_wtime ( ); for ( j = 0; j < n; j++ ) { x_l1_norm[j] = 0.0; for ( i = 0; i < n; i++ ) { x_l1_norm[j] = x_l1_norm[j] + fabs ( x[i+j*n] ); } } wtime2 = omp_get_wtime ( ); wtime = wtime2 - wtime1; cout << "\n"; cout << "Sequential calculation:\n"; cout << " L1_NORM (first 4 ) = " << " " << x_l1_norm[0] << " " << x_l1_norm[1] << " " << x_l1_norm[2] << " " << x_l1_norm[3] << "\n"; cout << " Time = " << wtime << "\n"; // // Compute the l1 norm in parallel. // wtime1 = omp_get_wtime ( ); # pragma omp parallel private ( i, j ) shared ( n, x, x_l1_norm ) # pragma omp for for ( j = 0; j < n; j++ ) { x_l1_norm[j] = 0.0; for ( i = 0; i < n; i++ ) { x_l1_norm[j] = x_l1_norm[j] + fabs ( x[i+j*n] ); } } wtime2 = omp_get_wtime ( ); wtime = wtime2 - wtime1; cout << "\n"; cout << "Parallel calculation:\n"; cout << " L1_NORM (first 4 ) = " << " " << x_l1_norm[0] << " " << x_l1_norm[1] << " " << x_l1_norm[2] << " " << x_l1_norm[3] << "\n"; cout << " Time = " << wtime << "\n"; delete [] x; delete [] x_l1_norm; return 0; }