1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- /******************************************************************************
- * FILE: omp_orphan.c
- * DESCRIPTION:
- * OpenMP Example - Parallel region with an orphaned directive - C/C++ Version
- * This example demonstrates a dot product being performed by an orphaned
- * loop reduction construct. Scoping of the reduction variable is critical.
- * AUTHOR: Blaise Barney 5/99
- * LAST REVISED: 04/06/05
- ******************************************************************************/
- #include <omp.h>
- #include <stdio.h>
- #include <stdlib.h>
- #define VECLEN 100
- float a[VECLEN], b[VECLEN], sum;
- float dotprod ()
- {
- int i,tid;
- tid = omp_get_thread_num();
- #pragma omp for reduction(+:sum)
- for (i=0; i < VECLEN; i++)
- {
- sum = sum + (a[i]*b[i]);
- printf(" tid= %d i=%d\n",tid,i);
- }
- return(sum);
- }
- int main (int argc, char *argv[])
- {
- int i;
- for (i=0; i < VECLEN; i++)
- a[i] = b[i] = 1.0 * i;
- sum = 0.0;
- #pragma omp parallel
- sum = dotprod();
- printf("Sum = %f\n",sum);
- return 0;
- }
|