OpenMP on FreeBSD
Anton Shterenlikht
mexas at bristol.ac.uk
Thu Feb 2 09:55:20 UTC 2012
On Wed, Feb 01, 2012 at 04:29:59PM -0800, Dennis Glatting wrote:
> On Thu, 2012-02-02 at 00:09 +0000, Anton Shterenlikht wrote:
> > I'm new to OpenMP. I wonder
> > if there are any special considerations
> > when running OpenMP on FreeBSD?
> >
>
> I run OpenMP. No special consideration. Here's a chunk from my Makefile:
>
> TARG=ecc.enc ecc.dec
>
> $TARG: *.cc *.h Makefile
> g++ -Wall -fopenmp -g -O ${INCL} ${LIBS} -o ecc.enc *.cc
> g++ -Wall -fopenmp -g -O ${INCL} ${LIBS} -o ecc.dec *.cc
>
>
> > For example, I have this OMP parallelised
> > fortran program, nested do loops, compiled
> > with gfortran46. When I run it with 2 threads
> > on a 2-cpu box, I see in top(1):
> >
> > PID UID PRI NICE SIZE RES STATE C TIME CPU COMMAND
> > 63995 1001 89 0 57048K 34272K CPU1 1 1:06 55.08% dummy.sx{dummy.sx}
> > 63995 1001 87 0 57048K 34272K RUN 1 1:02 52.39% dummy.sx{dummy.sx}
> > 11 0 155 ki31 0K 32K RUN 0 376:58 51.46% idle{idle: cpu0}
> > 11 0 155 ki31 0K 32K RUN 1 368:18 45.36% idle{idle: cpu1}
> >
> > I wonder why, even after a minute of run time,
> > I still have nearly a whole cpu idle?
> >
>
> What is the program doing? I/O can significantly limit OMP value. Also,
> you need to make sure you code your loops properly or else you have a
> single-threaded application, without warning.
Here's my parallel bit:
!$OMP PARALLEL DEFAULT(NONE) &
!$OMP SHARED(AEND,SPACE1,SPACE2,SIZE1,SIZE2,SIZE3) &
!$OMP PRIVATE(STEP,RANDN,X1,X2,X3)
!$OMP DO SCHEDULE(RUNTIME)
DO X3 = 1,SIZE3
DO X2 = 1,SIZE2
DO X1 = 1,SIZE1
IF(SPACE1(X1,X2,X3).EQ.0) THEN
AEND = .FALSE. ! UPDATE AT LEAST ONE CELL
CALL RANDOM_NUMBER(RANDN) ! 0 <= RANDN < 1
STEP = NINT(RANDN*2-1) ! STEP = [-1 0 1]
SPACE2(X1,X2,X3) = SPACE1(X1+STEP(1),X2+STEP(2),X3+STEP(3))
END IF
END DO
END DO
END DO
!$OMP END DO
!$OMP END PARALLEL
There's no I/O at all. Not sure what you mean
by proper looping. The threads are definitely
created. I use "setenv OMP_NUM_THREADS" to set
the number of threads. Then I monitor thread
creation with top -H. The number of threads
shown there matches what I set. So I'm pretty
sure the executable is multi-threaded.
Perhaps I should explore various SCHEDULE options?
By the way, what sort of speed-up do you
see with your loop? And what ratio threads/cores
is optimal for you?
Many thanks
--
Anton Shterenlikht
Room 2.6, Queen's Building
Mech Eng Dept
Bristol University
University Walk, Bristol BS8 1TR, UK
Tel: +44 (0)117 331 5944
Fax: +44 (0)117 929 4423
More information about the freebsd-questions
mailing list