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