On 13 May, 15:20, Prime Mover <(EMail Removed)> wrote:
> Hello all,
>
> I have got the pseudocode below that I would like to convert to c
> language. The algorithm calculates Pi value. I am somewhat familiar
> with C language, but I am just starting to learn parallel programming.
> In this specific example, the idea seems to be simple: one must
> subdivide the main loop into pieces that can be executed by
> independent "tasks" (computers??).
>
> Then, each "worker task" executes a part of the loop a certain number
> of times, independently of the other worker tasks. One specific task
> plays the role of "master task", which will collect and sum the
> results of the worker tasks:
>
> % descriptive algorithm:
> 1. Inscribe a circle inside a square
> 2. Generate random points inside the square
> 3. Determine the number of points that fell inside the circle
> 4. Let r be the number of points inside the circle divided by the
> total number of points
> 5. Pi is approximately equal to 4*r
> 6. The more points are generated, the more is the precision in P value
>
> % pseudocode (parallel):
> 1. npoints = 10000
> 2. circle_count = 0
> 3. p = number of tasks
> 4. num = npoints/p
> 5. find out if I am MASTER or WORKER
> 6. do j = 1,num
> 7. generate 2 random numbers between 0 and 1
> 8. xcoordinate = random1
> 9. ycoordinate = random2
> 10. if (xcoordinate, ycoordinate) inside circle then
> circle_count = circle_count + 1
> 11. end do
> 12. if I am MASTER
> 13. receive from WORKERS their circle_counts
> 14. compute PI (use MASTER and WORKER calculations)
> 15. else if I am WORKER
> 16. send to MASTER circle_count
> 17. endif
On 13 May, 15:28, Prime Mover <(EMail Removed)> wrote:
> Let me just be a bit more specific:
>
> My (understading) problem starts in the line 5 of the pseudocode:
> 5. find out if I am MASTER or WORKER
>
> How would I specificy a "worker"? Would that be another computer?
> If yes, how can I access this remote computer in the calculations, in
> C language?
> If yes, it means that I have to have a LAN or something to perform
> tests?
>
> I have found that there are some libraries such as OMP or MPI that
> could be
> used, but I'd like to know if there is a more "raw" way of doing this
> first.
Standard C has no builtin support for parallel processing so an
answer
to the question "find out if I am MASTER or WORKER" falls outside
standard C which is what's topical here. I have no idea what kind of
hardware setup and extensions to C can be used to tackle numerically
intensive parallel algorithms. Perhaps others here have the relevant
experience. Searching Google groups for *parallel* I found
comp.parallel.mpi and comp.parallel.pvm where I'm guessing you might
get more useful advice than here.
Out of curiosity for what value of npoints are you aiming for ? In
your example it's only 100000 and you can get that on a modern desktop
in a few seconds.
