[CSC 435] OpenMP Programs

Andrew J. Pounds pounds_aj at mercer.edu
Mon Feb 26 15:19:44 EST 2007


Hey guys,
  Here are a couple of examples of OpenMP programs (one C, one 
Fortran).  Look at the class webpage for a nice link to Lawrence 
Livermore national lab's webpage OpenMP tutorial....

The C version...

compile with "gcc -fopenmp progname.c -lgomp"

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 10000


int main(){

   float *f, *u;
   float alpha;
   int n, m;
   float dx, dy, xx, yy;
   int i,j;

   f = (float *) malloc(MAX*MAX*sizeof(float));
   u = (float *) malloc(MAX*MAX*sizeof(float));

   n = MAX;
   m = MAX;

   alpha = 1.0;

   dx = 2.0/(float) MAX;
   dy = 2.0/(float) MAX;

#pragma omp parallel for \
   shared(xx,yy) private(i,j) \
   schedule(static)

      for (j=0;j<m;j++){
         for (i=0;i<n;i++) {
            xx = -1.0 + dx * (float) i;
            yy = -1.0 + dy * (float) j;
            *(u+MAX*j+i) = 0.0;
            *(f+MAX*j+i) = -alpha *(1.0-xx*xx)*(1.0-yy*yy)
                     - 2.0*(1.0-xx*xx)-2.0*(1.0-yy*yy);
            }
       }

      printf("\nLast Element of F Matrix = %f\n", *(f+MAX*MAX-1));

}



The fortran version...

compile with "gfortran -fopenmp program.f -lgomp"

      program testmp

      parameter (max=10000)
      real f(max,max), u(max,max)
      n = max
      m = max

      alpha = 1.0

      dx = 2.0/max
      dy = 2.0/max

!$omp parallel do private(xx,yy)

      do j = 1,m
         do i = 1,n
            xx = -1.0 + dx * real(i-1) ! -1 < x < 1
            yy = -1.0 + dy * real(j-1) ! -1 < y < 1
            u(i,j) = 0.0
            f(i,j) = -alpha *(1.0-xx*xx)*(1.0-yy*yy)
     & - 2.0*(1.0-xx*xx)-2.0*(1.0-yy*yy)
         enddo
      enddo
!$omp end parallel do

      print *, f(max,max)


      end




-- 
Andrew J. Pounds, Ph.D.  (pounds at theochem.mercer.edu)
Associate Professor of Chemistry and Computer Science
Mercer University,  Macon, GA 31207   (478) 301-5627



More information about the csc435 mailing list