/****************************************************************************** * 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: 06/30/05 ******************************************************************************/ /** * This program computes the dot product of two vectors. The parallel loop * construct is orphaned - it is contained in a subroutine outside the lexical * extent of the main program's parallel region. * Online source: * https://computing.llnl.gov/tutorials/openMP/samples/C/omp_orphan.c **/ #include #include #include #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); } } 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 dotprod(); printf("Sum = %f\n",sum); }