[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