ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/raypcalls.c
(Generate patch)

Comparing ray/src/rt/raypcalls.c (file contents):
Revision 2.29 by greg, Fri Mar 4 02:48:14 2016 UTC vs.
Revision 2.33 by greg, Mon Jun 15 15:44:03 2020 UTC

# Line 147 | Line 147 | static const char      RCSid[] = "$Id$";
147   #include  "selcall.h"
148  
149   #ifndef RAYQLEN
150 < #define RAYQLEN         12              /* # rays to send at once */
150 > #define RAYQLEN         24              /* # rays to send at once */
151   #endif
152  
153   #ifndef MAX_RPROCS
# Line 162 | Line 162 | extern char    *shm_boundary;          /* boundary of shared memo
162  
163   int             ray_pnprocs = 0;        /* number of child processes */
164   int             ray_pnidle = 0;         /* number of idle children */
165 + int             ray_pnbatch = 0;        /* throughput over responsiveness? */
166  
167   static struct child_proc {
168          RT_PID  pid;                            /* child process id */
# Line 212 | Line 213 | ray_pflush(void)                       /* send queued rays to idle childre
213          for (i = ray_pnprocs; nc && i--; ) {
214                  if (r_proc[i].npending > 0)
215                          continue;       /* child looks busy */
216 <                n = (r_send_next - sfirst)/nc--;
216 >                n = r_send_next - sfirst;
217 >                if (ray_pnbatch)
218 >                        nc--;           /* maximize bundling for batch calc */
219 >                else
220 >                        n /= nc--;      /* distribute work for interactivity */
221                  if (!n)
222                          continue;
223                                          /* smuggle set size in crtype */
# Line 290 | Line 295 | ray_presult(           /* check for a completed ray */
295          static struct timeval   tpoll;  /* zero timeval struct */
296          static fd_set   readset, errset;
297          int     n, ok;
298 <        register int    pn;
298 >        int     pn;
299  
300          if (r == NULL)
301                  return(0);
# Line 368 | Line 373 | getready:                              /* any children waiting for us? */
373          }
374                                          /* preen returned rays */
375          for (n = r_recv_next - r_recv_first; n--; ) {
376 <                register RAY    *rp = &r_queue[r_recv_first + n];
376 >                RAY     *rp = &r_queue[r_recv_first + n];
377                  rp->rno = r_proc[pn].rno[n];
378                  rp->parent = NULL;
379                  rp->newcset = rp->clipset = NULL;
# Line 404 | Line 409 | ray_pchild(    /* process rays (never returns) */
409   )
410   {
411          int     n;
412 <        register int    i;
412 >        int     i;
413                                          /* flag child process for quit() */
414          ray_pnprocs = -1;
415                                          /* read each ray request set */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines