|
|
Up |
|
|
  |
Author: Prime MoverPrime Mover Date: May 13, 2008 07:20
Hello all,
I have got the pseudo-code 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
|
| Show full article (1.58Kb) |
|
| | 26 Comments |
|
  |
Author: Prime MoverPrime Mover Date: May 13, 2008 07:28
Let me just be a bit more specific:
My (understading) problem starts in the line 5 of the pseudo-code:
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.
Again, thank you all.
|
| |
|
| | no comments |
|
  |
Author: Spiros BousbourasSpiros Bousbouras Date: May 13, 2008 07:55
On 13 May, 15:20, Prime Mover hotmail.com> wrote:
> Hello all,
>
> I have got the pseudo-code 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 ...
|
| Show full article (2.93Kb) |
| no comments |
|
  |
Author: Spiros BousbourasSpiros Bousbouras Date: May 13, 2008 07:57
> On 13 May, 15:28, Prime Mover hotmail.com> wrote:
>
>> Let me just be a bit more specific:
>
>> My (understading) problem starts in the line 5 of the pseudo-code:
>> 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 built-in support for parallel processing so an
> answer ...
|
| Show full article (1.19Kb) |
| no comments |
|
  |
Date: May 13, 2008 08:02
Prime Mover wrote:
> %% 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
How can you determine it without knowing PI a priori?
Pietro Cerutti
|
| |
| no comments |
|
  |
Author: BartBart Date: May 13, 2008 08:15
On May 13, 3:55Â pm, Spiros Bousbouras gmail.com> wrote:
> On 13 May, 15:20, Prime Mover hotmail.com> wrote:
>> I have got the pseudo-code below that I would like to convert to c
>> language. The algorithm calculates Pi value. I am somewhat familiar
> 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.- Hide quoted text -
I got 3.1415 using a billion points. Looks like it will converge very
slowly.
Also the granularity of the x,y points may affect the maximum accuracy
(because it introduces errors near the circular edge). Tried a sphere
too but not any better.
--
Bartc
|
| |
| no comments |
|
  |
Author: Richard HeathfieldRichard Heathfield Date: May 13, 2008 08:28
Pietro Cerutti said:
> Prime Mover wrote:
>> %% 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
>
> How can you determine it without knowing PI a priori?
There's nothing in the above description that requires a knowledge of pi.
For example, you can draw a circle of radius r easily enough just by
applying the equation x^2 + y^2 = r^2 (no, that is not C code!) for all y
in the range -r to +r, taking the positive result and its negative
analogue for your x points. (Actually, it's even easier than that, because
there are other symmetries to exploit.)
Determining whether you're in the circle can be done either by tedious
inspection (a process not unlike floodfill) or (much faster) by
determining whether x^2 + y^2 <= r^2.
|
| Show full article (1.05Kb) |
| no comments |
|
  |
Author: Spiros BousbourasSpiros Bousbouras Date: May 13, 2008 08:31
On 13 May, 16:02, Pietro Cerutti wrote:
> Prime Mover wrote:
>> %% 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
>
> How can you determine it without knowing PI a priori?
Imagine a circle with radius is 1 and its center has coordinates
(0 , 0).
A random point with coordinates (x,y) will be inside the square
if -1 <= x <= 1 and -1 <= y <= 1
if ( x*x + y*y < 1) /* inside the circle */
|
| |
| no comments |
|
  |
Author: Spiros BousbourasSpiros Bousbouras Date: May 13, 2008 08:32
On 13 May, 16:15, Bart freeuk.com> wrote:
> On May 13, 3:55 pm, Spiros Bousbouras gmail.com> wrote:
>
>> On 13 May, 15:20, Prime Mover hotmail.com> wrote:
>>> I have got the pseudo-code below that I would like to convert to c
>>> language. The algorithm calculates Pi value. I am somewhat familiar
>> 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.- Hide quoted text -
>
> I got 3.1415 using a billion points. Looks like it will converge very
> slowly.
>
> Also the granularity of the x,y points may affect the maximum accuracy
> (because it introduces errors near the circular edge). Tried a sphere
> too but not any better.
And of course you must know that your random numbers
will be uniformly distributed within the square.
|
| |
| no comments |
|
  |
|
|
  |
Author: CBFalconerCBFalconer Date: May 13, 2008 08:27
Pietro Cerutti wrote:
> Prime Mover wrote:
>
>> %% 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
>
> How can you determine it without knowing PI a priori?
Write the expression for the area of a circle. Do the same for the
area of the superscribed square. Take the ratio of areas. It
contains PI.
|
| |
| no comments |
|
RELATED THREADS |
  |
|
|
|
|
|