next up previous contents index
Search Next: DRb: Distributed Ruby Up: Message Passing Interface (MPI) Previous: Grundlagen   Contents   Index

Pi und kein Ende

Die näherungsweise Berechnung von $\pi$ über die Identität

\begin{displaymath}\pi=4 \arctan(1) = \int_{0}^{1} \frac{4}{1+x^2}\end{displaymath}

verwendet NINTERVALS Rechtecke, um die Fläche zu approximieren. Wenn wir dafür drei Computer einsetzen, berechnet Nummer 0 den 1., 4., 7., ..., Rechner 1 den 2., 5., 8., ... und Rechner 2 den 3., 6., 9., ...Streifen. Nach Abschluss der Rechnung liefert Computer 0 das Ergebnis.

PI25DT = 3.141592653589793238462643
NINTERVALS = 10000

$rank = MPI::Comm::WORLD.rank
$size = MPI::Comm::WORLD.size

$startwtime = MPI.wtime
$h = 1.0 / NINTERVALS
$sum = 0.0
($rank + 1).step(NINTERVALS, $size) do |i|
  x = $h * (i - 0.5)
  $sum += (4.0 / (1.0 + x**2))
end
mypi = $h * $sum

$pi = MPI::Comm::WORLD.reduce(mypi,
  MPI::Op::SUM, 0)

if $rank == 0 then
  printf "pi is ~= %.16f, error = %.16f\n",
    $pi, ($pi - PI25DT).abs
  $endwtime = MPI.wtime
  puts "wallclock time = #{$endwtime-$startwtime}"
end



(C) 2002 by dpunkt.de, Armin Roehrl, Stefan Schmiedl, Clemens Wyss 2002-01-20