/******************************************************************************
|
/******************************************************************************
|
* FILE: omp_reduction.c
|
* FILE: omp_reduction.c
|
* DESCRIPTION:
|
* DESCRIPTION:
|
* OpenMP Example - Combined Parallel Loop Reduction - C/C++ Version
|
* OpenMP Example - Combined Parallel Loop Reduction - C/C++ Version
|
* This example demonstrates a sum reduction within a combined parallel loop
|
* This example demonstrates a sum reduction within a combined parallel loop
|
* construct. Notice that default data element scoping is assumed - there
|
* construct. Notice that default data element scoping is assumed - there
|
* are no clauses specifying shared or private variables. OpenMP will
|
* are no clauses specifying shared or private variables. OpenMP will
|
* automatically make loop index variables private within team threads, and
|
* automatically make loop index variables private within team threads, and
|
* global variables shared.
|
* global variables shared.
|
* AUTHOR: Blaise Barney 5/99
|
* AUTHOR: Blaise Barney 5/99
|
* LAST REVISED: 04/06/05
|
* LAST REVISED: 04/06/05
|
******************************************************************************/
|
******************************************************************************/
|
#include <omp.h>
|
#include <omp.h>
|
#include <stdio.h>
|
#include <stdio.h>
|
#include <stdlib.h>
|
#include <stdlib.h>
|
|
|
int main (int argc, char *argv[]) {
|
int main (int argc, char *argv[]) {
|
|
|
int i, n;
|
int i, n;
|
float a[100], b[100], sum;
|
float a[100], b[100], sum;
|
|
|
/* Some initializations */
|
/* Some initializations */
|
n = 100;
|
n = 100;
|
for (i=0; i < n; i++)
|
for (i=0; i < n; i++)
|
a[i] = b[i] = i * 1.0;
|
a[i] = b[i] = i * 1.0;
|
sum = 0.0;
|
sum = 0.0;
|
|
|
#pragma omp parallel for reduction(+:sum)
|
#pragma omp parallel for reduction(+:sum)
|
for (i=0; i < n; i++)
|
for (i=0; i < n; i++)
|
sum = sum + (a[i] * b[i]);
|
sum = sum + (a[i] * b[i]);
|
|
|
printf(" Sum = %f\n",sum);
|
printf(" Sum = %f\n",sum);
|
|
|
return 0;
|
return 0;
|
}
|
}
|
|
|