  | 
  | 
 | 
  | 
 | 
  | 
 |   | 
 |   | 
 | 
  | 
 | 
  | 
 |   | 
 |   | 
 | 
  | 
Ray-tracing is trivially parallelisable. Keeping to a single thread even 
on multiple-CPU machines is kind of weird.
POV-ray should try to detect the number of CPUs, or if it can't, let the 
user enter the number of threads POV-ray should spawn.
POV-ray should then split the workload of rendering the image into that 
number of threads.
Suggested algorithm (pseudo-code):
Let n = number of CPUs (or configured number of threads).
Let h = height of the output bitmap.
Let lines = list of integers initialised to [0, 1, 2, ..., h-1].
Spawn n threads, where each thread does the following:
   Obtain a mutex on 'lines'.
   If 'lines' is empty, release the mutex and return.
   Remove an integer y from 'lines'.
   Release the mutex on 'lines'.
   Render the row of pixels at y co-ordinate 'y'.
   Go back to start.
Wait for all n threads to complete.
Done.
Timwi
 
 Post a reply to this message 
 | 
  | 
 |   | 
 |   | 
 | 
  | 
 | 
  | 
 |   | 
 |   | 
 | 
  | 
Timwi <tim### [at] gmx net> wrote:
> Suggested algorithm (pseudo-code):
  A much easier algorithm: Write the following in the address bar of your
web browser: http://povray.org/beta/
-- 
                                                          - Warp
 
 Post a reply to this message 
 | 
  | 
 |   | 
 |   | 
 | 
  | 
 | 
  | 
 |   | 
 |   | 
 | 
  | 
Timwi schrieb:
> Suggested algorithm (pseudo-code):
> 
> Let n = number of CPUs (or configured number of threads).
> Let h = height of the output bitmap.
> Let lines = list of integers initialised to [0, 1, 2, ..., h-1].
> 
> Spawn n threads, where each thread does the following:
>   Obtain a mutex on 'lines'.
>   If 'lines' is empty, release the mutex and return.
>   Remove an integer y from 'lines'.
>   Release the mutex on 'lines'.
>   Render the row of pixels at y co-ordinate 'y'.
>   Go back to start.
> 
> Wait for all n threads to complete.
> Done.
Congratulations - you just re-invented POV-Ray 3.7 (which is currently 
in public beta phase) :P.
Except that 3.7 schedules square blocks instead of lines (to allow for 
better efficiency of some caching mechanisms). And that things start 
getting more complicated than you expect when it comes to some more 
sophisticated features (like radiosity for instance).
 
 Post a reply to this message 
 | 
  | 
 |   | 
 |   | 
 | 
  | 
 | 
  | 
 |   | 
 |   | 
 | 
  | 
On 8/12/2009 7:14 PM, clipka wrote:
> Congratulations - you just re-invented POV-Ray 3.7 (which is currently
> in public beta phase) :P.
>
> Except that 3.7 schedules square blocks instead of lines (to allow for
> better efficiency of some caching mechanisms). And that things start
> getting more complicated than you expect when it comes to some more
> sophisticated features (like radiosity for instance).
Also, if you don't want to install the beta, simply render half the 
image (or animation) in one instance of POV-Ray; then open another 
instance and execute the other half. (Assuming you have two cores.)
Mike
 
 Post a reply to this message 
 | 
  | 
 |   | 
 |   | 
 | 
  | 
 | 
  | 
 |   | 
 |   | 
 | 
  | 
SharkD <mik### [at] gmail com> wrote:
> Also, if you don't want to install the beta, simply render half the 
> image (or animation) in one instance of POV-Ray; then open another 
> instance and execute the other half. (Assuming you have two cores.)
  And assuming that the single instance is taking less than half of your
RAM...
-- 
                                                          - Warp
 
 Post a reply to this message 
 | 
  | 
 |   | 
 |   | 
 | 
  | 
 | 
  | 
 |   |