Revision: 41154
          http://brlcad.svn.sourceforge.net/brlcad/?rev=41154&view=rev
Author:   erikgreenwald
Date:     2010-10-28 21:05:17 +0000 (Thu, 28 Oct 2010)

Log Message:
-----------
switch from using direct pthreads to the bu_parallel wrapper

Modified Paths:
--------------
    brlcad/trunk/src/adrt/librender/camera.c
    brlcad/trunk/src/adrt/librender/camera.h
    brlcad/trunk/src/adrt/slave/slave.c

Modified: brlcad/trunk/src/adrt/librender/camera.c
===================================================================
--- brlcad/trunk/src/adrt/librender/camera.c    2010-10-28 19:12:29 UTC (rev 
41153)
+++ brlcad/trunk/src/adrt/librender/camera.c    2010-10-28 21:05:17 UTC (rev 
41154)
@@ -25,11 +25,6 @@
 
 #include "common.h"
 
-#ifdef HAVE_PTHREAD_H
-# include <pthread.h>
-pthread_t *render_tlist;
-#endif
-
 #ifdef HAVE_DLFCN_H
 # include <dlfcn.h>
 #endif
@@ -44,6 +39,9 @@
 
 #include "camera.h"
 
+#define TIE_SEM_WORKER (BU_SEM_LAST)
+#define TIE_SEM_LAST (TIE_SEM_WORKER+1)
+
 struct render_shader_s {
        char *name;
        void (*init)(render_t *, char *);
@@ -71,30 +69,14 @@
     camera->tilt = 0;
 
     /* The camera will use a thread for every cpu the machine has. */
-    camera->thread_num =
-#ifdef HAVE_PTHREAD_H
-       threads ? threads : bu_avail_cpus();
-#else
-    1;
-#endif
-    /* printf("threads: %d\n", camera->thread_num); */
+    camera->thread_num = threads ? threads : bu_avail_cpus();
 
+    bu_semaphore_init(TIE_SEM_LAST);
+
     /* Initialize camera to rendering surface normals */
     render_normal_init(&camera->render, NULL);
     camera->rm = RENDER_METHOD_PHONG;
 
-#ifdef HAVE_PTHREAD_H
-    render_tlist = NULL;
-    if (camera->thread_num > 1) {
-       bu_log("Allocating thread memory\n");
-       render_tlist = (pthread_t *)bu_malloc(sizeof(pthread_t) * 
camera->thread_num, "render_tlist");
-       if(render_tlist == NULL) {
-           bu_log("Failed to allocate threads. Running single threaded\n");
-           camera->thread_num = 1;
-       }
-    }
-#endif
-
     if(shaders == NULL) {
 #define REGISTER(x) render_shader_register(#x, render_##x##_init);
        REGISTER(component);
@@ -116,10 +98,6 @@
 void
 render_camera_free(render_camera_t *camera)
 {
-#ifdef HAVE_PTHREAD_H
-    if (camera->thread_num > 1)
-       bu_free(render_tlist, "render_tlist");
-#endif
 }
 
 
@@ -453,14 +431,10 @@
     while (1)
     {
        /* Determine if this scanline should be computed by this thread */
-#ifdef HAVE_PTHREAD_H
-       pthread_mutex_lock(&td->mut);
-#endif
+       bu_semaphore_acquire(TIE_SEM_WORKER);
        if (*td->scanline == td->tile->size_y)
        {
-#ifdef HAVE_PTHREAD_H
-           pthread_mutex_unlock(&td->mut);
-#endif
+           bu_semaphore_release(TIE_SEM_WORKER);
            return 0;
        }
        else
@@ -468,9 +442,7 @@
            scanline = *td->scanline;
            (*td->scanline)++;
        }
-#ifdef HAVE_PTHREAD_H
-       pthread_mutex_unlock(&td->mut);
-#endif
+       bu_semaphore_release(TIE_SEM_WORKER);
 
        v_scanline = scanline + td->tile->orig_y;
        if (td->tile->format == RENDER_CAMERA_BIT_DEPTH_24)
@@ -616,24 +588,9 @@
     scanline = 0;
     td.scanline = &scanline;
 
-#ifdef HAVE_PTHREAD_H
-    pthread_mutex_init(&td.mut, 0);
+    bu_parallel(render_camera_render_thread, camera->thread_num, &td);
 
-    /* Launch Render threads */
-    if (camera->thread_num > 1 && render_tlist)
-    {
-       for (i = 0; i < camera->thread_num; i++)
-           pthread_create(&render_tlist[i], NULL, render_camera_render_thread, 
&td);
-       for (i = 0; i < camera->thread_num; i++)
-           pthread_join(render_tlist[i], NULL);
-    } else
-#endif
-       render_camera_render_thread(&td);
-
     result->ind = ind;
-#ifdef HAVE_PTHREAD_H
-    pthread_mutex_destroy(&td.mut);
-#endif
 
     return;
 }

Modified: brlcad/trunk/src/adrt/librender/camera.h
===================================================================
--- brlcad/trunk/src/adrt/librender/camera.h    2010-10-28 19:12:29 UTC (rev 
41153)
+++ brlcad/trunk/src/adrt/librender/camera.h    2010-10-28 21:05:17 UTC (rev 
41154)
@@ -86,9 +86,6 @@
     camera_tile_t *tile;
     void *res_buf;
     unsigned int *scanline;
-#ifdef HAVE_PTHREAD_H
-    pthread_mutex_t mut;
-#endif
 } render_camera_thread_data_t;
 
 

Modified: brlcad/trunk/src/adrt/slave/slave.c
===================================================================
--- brlcad/trunk/src/adrt/slave/slave.c 2010-10-28 19:12:29 UTC (rev 41153)
+++ brlcad/trunk/src/adrt/slave/slave.c 2010-10-28 21:05:17 UTC (rev 41154)
@@ -31,7 +31,6 @@
 #include <stdlib.h>
 #include <signal.h>
 #include <string.h>
-#include <pthread.h>
 
 #ifdef HAVE_SYS_TIME_H
 #  include <sys/time.h>


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in  U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store 
http://p.sf.net/sfu/nokia-dev2dev
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to