Hi Ralf,
I haven't seen a problem like this reported before. The OSG itself
does run multi-threaded and make use of multi-processors, but I have
never played with OpenMP so can't vouche that there isn't some
potential issue with mixing the two - it does surprise me though. The
affinity functions are there to just set the affinity of a particular
thread with a particular processor, it shouldn't affect threading
beyond this.
Robert.
On Mon, Oct 13, 2008 at 6:07 PM, Ralph R. Peters <[EMAIL PROTECTED]> wrote:
> Hello,
>
> I am trying to use OpenMP inside an application that uses OpenSceneGraph.
> I can get OpenMP to use multiple threads inside my examples, but NOT inside
> my my OpenSceneGraph app. I think that I may have tracked the problem down
> to the use of sched_setaffinity inside files in .../OpenThreads/pthreads.
> It seems that inside CMakelists.txt in that directory,
> pthread_setaffinity_np is not being found and sched_setaffinity calls are
> being made that kill multi-processor availability. From CMakeLists.txt:
>
> CHECK_FUNCTION_EXISTS(pthread_setaffinity_np HAVE_PTHREAD_SETAFFINITY_NP)
> IF(HAVE_PTHREAD_SETAFFINITY_NP)
> ADD_DEFINITIONS(-DHAVE_PTHREAD_SETAFFINITY_NP)
> ELSE(HAVE_PTHREAD_SETAFFINITY_NP)
> CHECK_CXX_SOURCE_COMPILES("
> #include <sched.h>
> int main() {
> cpu_set_t cpumask;
> sched_setaffinity( 0, sizeof(cpumask), &cpumask );
> return 0;
> }" HAVE_THREE_PARAM_SCHED_SETAFFINITY)
> IF(HAVE_THREE_PARAM_SCHED_SETAFFINITY)
> ADD_DEFINITIONS(-DHAVE_THREE_PARAM_SCHED_SETAFFINITY)
> ELSE(HAVE_THREE_PARAM_SCHED_SETAFFINITY)
> CHECK_CXX_SOURCE_COMPILES("
> #include <sched.h>
> int main() {
> cpu_set_t cpumask;
> sched_setaffinity( 0, &cpumask );
> return 0;
> }" HAVE_TWO_PARAM_SCHED_SETAFFINITY)
> IF(HAVE_TWO_PARAM_SCHED_SETAFFINITY)
> ADD_DEFINITIONS(-DHAVE_TWO_PARAM_SCHED_SETAFFINITY)
> ENDIF(HAVE_TWO_PARAM_SCHED_SETAFFINITY)
> ENDIF(HAVE_THREE_PARAM_SCHED_SETAFFINITY)
> ENDIF(HAVE_PTHREAD_SETAFFINITY_NP)
>
> so I see:
> [EMAIL PROTECTED] src]$ find . -exec grep -n -H sched_setaffinity {} \;
> ./OpenThreads/pthreads/CMakeLists.txt:73: sched_setaffinity( 0,
> sizeof(cpumask), &cpumask );
> ./OpenThreads/pthreads/CMakeLists.txt:83: sched_setaffinity( 0, &cpumask );
> ./OpenThreads/pthreads/PThread.c++:135: sched_setaffinity( 0,
> sizeof(cpumask), &cpumask );
> ./OpenThreads/pthreads/PThread.c++:137: sched_setaffinity( 0,
> &cpumask );
> ./OpenThreads/pthreads/PThread.c++:549: sched_setaffinity( 0,
> sizeof(cpumask), &cpumask );
> ./OpenThreads/pthreads/PThread.c++:551: sched_setaffinity( 0,
> &cpumask );
> ./OpenThreads/pthreads/PThread.c++:984: sched_setaffinity( 0,
> sizeof(cpumask), &cpumask );
> ./OpenThreads/pthreads/PThread.c++:986: sched_setaffinity( 0,
> &cpumask );
> ./OpenThreads/pthreads/GNUmakefile:43:ifeq
> ($(COMPILE_USING_TWO_PARAM_sched_setaffinity),yes)
> ./OpenThreads/pthreads/GNUmakefile:44:DEF +=
> -DCOMPILE_USING_TWO_PARAM_sched_setaffinity
>
> I am compiling this myself with GCC 4.3.2 (that I also compile myself), so I
> am not out-of-date with my compiler.
>
> What do I need to do to get this working? Must I run on only a single
> processor? I have an 8 processor PC and huge jobs to run on it.
> My app also must run in windows (sigh). Will the MS Visual Studio 2005
> compiler be a problem?
>
>
> Ralph
>
>
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org