Date: Thu, 2 Feb 2012 09:55:15 +0000 From: Anton Shterenlikht <mexas@bristol.ac.uk> To: Dennis Glatting <freebsd@pki2.com> Cc: Anton Shterenlikht <mexas@bristol.ac.uk>, freebsd-questions@freebsd.org Subject: Re: OpenMP on FreeBSD Message-ID: <20120202095515.GA78375@mech-cluster241.men.bris.ac.uk> In-Reply-To: <1328142599.53835.6.camel@btw.pki2.com> References: <20120202000947.GA71405@mech-cluster241.men.bris.ac.uk> <1328142599.53835.6.camel@btw.pki2.com>
index | next in thread | previous in thread | raw e-mail
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
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120202095515.GA78375>
