Re: Does Mathematica 5 use multiple processors on SPARC?
- To: mathgroup at smc.vnet.net
- Subject: [mg55201] Re: Does Mathematica 5 use multiple processors on SPARC?
- From: Dave <nospam at nowhere.com>
- Date: Wed, 16 Mar 2005 05:36:42 -0500 (EST)
- References: <200503140843.DAA27103@smc.vnet.net> <d15rvl$9j9$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Igor Antonio wrote: > Dave wrote: > >>I assume this technical FAQ >> >>http://support.wolfram.com/mathematica/systems/allplatforms/multipleprocessors.html >> >>is out of date since it says "The current version of Mathematica does >>not take direct advantage of multiple processors on any platform" >> >>whereas >> >>http://www.wolfram.com/products/mathematica/newin5/performance/ >> >>says "Mathematica 5 also takes advantage of multiple processors for a >>range of numerical operations on those operating systems such as Linux, >>Windows, and HP-UX that support this multithreaded capability." >> >>Now my question is does Mathematica 5 support multiple processors on >>Solaris? Since the kernel code is very similar across platforms, I >>assume it does, although it is odd to mention HP-UX and not Solaris, >>when the latter is probably used much more. >> >> > > > Dave, > > Solaris, AIX, SGI, and Linux x86-64 don't use threaded libraries, so > numerical operations (the ones that use BLAS libraries for example) will > not take advantage of multiple processors. > > > Igor Antonio > Wolfram Research, Inc. > http://www.wolfram.com > > To email me personally, remove the dash. > What exactly to you mean by 'threaded libraries'? I just did a 'man -k thread' on a standard Solaris box, and see there are numerous thread related libraries - see output at the bottom of the message. Note, I have not installed anything like pthreads on this box - it is just a web server. Can't Mathematica make use of them? BLAS seems to work on Solaris http://www.cs.utexas.edu/users/kgoto/signup_first.html A quick web search shows several references to BLAS on Solaris, so why should Mathematica not use them, if it uses them on HP-UX? Just wondering what is so hard about making Mathematica use multiple processors on Solaris. I've been thinking for years Mathematica should support multiple processors. Given the sort of program it is, support for multiple processors would be useful. That said, I'm well aware finding problems in threaded programs can be a real pain, as they are not easily reproducible. I'd rather Mathematica took its time to get the right result, rather than give a wrong one in less time!! I've copied this to a Solaris newsgroup too, although the original question was only put on the Mathematica newsgroup. PS, you might want to change http://support.wolfram.com/mathematica/systems/allplatforms/multipleprocessors.html as it is clearly out of date now. David Kirkby. webserver2 # man -k thread biodone biodone (9f) - release buffer after buffer I/O transfer and notify blocked threads cancellation cancellation (3thr) - overview of concepts related to POSIX thread cancellation ddi_get_kt_did ddi_get_kt_did (9f) - get identifier of current thread ddi_mmap_get_model ddi_mmap_get_model (9f) - return data model type of current thread door_bind door_bind (3door) - bind or unbind the current thread with the door server pool door_server_create door_server_create (3door) - specify an alternative door server thread creation function door_unbind door_bind (3door) - bind or unbind the current thread with the door server pool libglib-2.0 libglib-2.0 () - general purpose utility library, GLib support for dynamic plug-ins, GLib support for thread abstraction libgmodule-2.0 libglib-2.0 () - general purpose utility library, GLib support for dynamic plug-ins, GLib support for thread abstraction libgthread-2.0 libglib-2.0 () - general purpose utility library, GLib support for dynamic plug-ins, GLib support for thread abstraction libmtmalloc libmtmalloc (3lib) - multi-threaded memory allocator library libpthread libpthread (3lib) - POSIX threads library libthread libthread (3lib) - threads library libthread_db libthread_db (3lib) - threads debugging library libthread_db libthread_db (3thr) - library of interfaces for monitoring and manipulating threads-related aspects of multithreaded programs mq_notify mq_notify (3rt) - notify process (or thread) that a message is available on a queue mt-streams mt-streams (9f) - STREAMS multithreading ps_kill ps_pstop (3proc) - process and LWP control in libthread_db ps_lcontinue ps_pstop (3proc) - process and LWP control in libthread_db ps_lgetfpregs ps_lgetregs (3proc) - routines that access the target process register in libthread_db ps_lgetregs ps_lgetregs (3proc) - routines that access the target process register in libthread_db ps_lgetxregs ps_lgetregs (3proc) - routines that access the target process register in libthread_db ps_lgetxregsize ps_lgetregs (3proc) - routines that access the target process register in libthread_db ps_lrolltoaddr ps_pstop (3proc) - process and LWP control in libthread_db ps_lsetfpregs ps_lgetregs (3proc) - routines that access the target process register in libthread_db ps_lsetregs ps_lgetregs (3proc) - routines that access the target process register in libthread_db ps_lsetxregs ps_lgetregs (3proc) - routines that access the target process register in libthread_db ps_lstop ps_pstop (3proc) - process and LWP control in libthread_db ps_pcontinue ps_pstop (3proc) - process and LWP control in libthread_db ps_pdread ps_pread (3proc) - interfaces in libthread_db that target process memory access ps_pdwrite ps_pread (3proc) - interfaces in libthread_db that target process memory access ps_pread ps_pread (3proc) - interfaces in libthread_db that target process memory access ps_pstop ps_pstop (3proc) - process and LWP control in libthread_db ps_ptread ps_pread (3proc) - interfaces in libthread_db that target process memory access ps_ptwrite ps_pread (3proc) - interfaces in libthread_db that target process memory access ps_pwrite ps_pread (3proc) - interfaces in libthread_db that target process memory access pthread_atfork pthread_atfork (3c) - register fork handlers pthread_attr_destroy pthread_attr_init (3thr) - initialize or destroy threads attribute object pthread_attr_getdetachstate pthread_attr_getdetachstate (3thr) - get or set detachstate attribute pthread_attr_getguardsize pthread_attr_getguardsize (3thr) - get or set the thread guardsize attribute pthread_attr_getinheritsched pthread_attr_getinheritsched (3thr) - get or set inheritsched attribute pthread_attr_getschedparam pthread_attr_getschedparam (3thr) - get or set schedparam attribute pthread_attr_getschedpolicy pthread_attr_getschedpolicy (3thr) - get or set schedpolicy attribute pthread_attr_getscope pthread_attr_getscope (3thr) - get or set contentionscope attribute pthread_attr_getstackaddr pthread_attr_getstackaddr (3thr) - get or set stackaddr attribute pthread_attr_getstacksize pthread_attr_getstacksize (3thr) - get or set stacksize attribute pthread_attr_init pthread_attr_init (3thr) - initialize or destroy threads attribute object pthread_attr_setdetachstate pthread_attr_getdetachstate (3thr) - get or set detachstate attribute pthread_attr_setguardsize pthread_attr_getguardsize (3thr) - get or set the thread guardsize attribute pthread_attr_setinheritsched pthread_attr_getinheritsched (3thr) - get or set inheritsched attribute pthread_attr_setschedparam pthread_attr_getschedparam (3thr) - get or set schedparam attribute pthread_attr_setschedpolicy pthread_attr_getschedpolicy (3thr) - get or set schedpolicy attribute pthread_attr_setscope pthread_attr_getscope (3thr) - get or set contentionscope attribute pthread_attr_setstackaddr pthread_attr_getstackaddr (3thr) - get or set stackaddr attribute pthread_attr_setstacksize pthread_attr_getstacksize (3thr) - get or set stacksize attribute pthread_cancel pthread_cancel (3thr) - cancel execution of a thread pthread_cleanup_pop pthread_cleanup_pop (3thr) - pop a thread cancellation cleanup handler pthread_cleanup_push pthread_cleanup_push (3thr) - push a thread cancellation cleanup handler pthread_cond_broadcast pthread_cond_signal (3thr) - signal or broadcast a condition pthread_cond_destroy pthread_cond_init (3thr) - initialize or destroy condition variables pthread_cond_init pthread_cond_init (3thr) - initialize or destroy condition variables pthread_cond_reltimedwait_np pthread_cond_wait (3thr) - wait on a condition pthread_cond_signal pthread_cond_signal (3thr) - signal or broadcast a condition pthread_cond_timedwait pthread_cond_wait (3thr) - wait on a condition pthread_cond_wait pthread_cond_wait (3thr) - wait on a condition pthread_condattr_destroy pthread_condattr_init (3thr) - initialize or destroy condition variable attributes object pthread_condattr_getpshared pthread_condattr_getpshared (3thr) - get or set the process-shared condition variable attributes pthread_condattr_init pthread_condattr_init (3thr) - initialize or destroy condition variable attributes object pthread_condattr_setpshared pthread_condattr_getpshared (3thr) - get or set the process-shared condition variable attributes pthread_create pthread_create (3thr) - create a thread pthread_detach pthread_detach (3thr) - detach a thread pthread_equal pthread_equal (3thr) - compare thread IDs pthread_exit pthread_exit (3thr) - terminate calling thread pthread_getconcurrency pthread_getconcurrency (3thr) - get or set level of concurrency pthread_getschedparam pthread_getschedparam (3thr) - access dynamic thread scheduling parameters pthread_getspecific pthread_getspecific (3thr) - manage thread-specific data pthread_join pthread_join (3thr) - wait for thread termination pthread_key_create pthread_key_create (3thr) - create thread-specific data key pthread_key_delete pthread_key_delete (3thr) - delete thread-specific data key pthread_kill pthread_kill (3thr) - send a signal to a thread pthread_mutex_consistent_np pthread_mutex_consistent_np (3thr) - make a mutex consistent after owner death pthread_mutex_destroy pthread_mutex_init (3thr) - initialize or destroy a mutex pthread_mutex_getprioceiling pthread_mutex_getprioceiling (3thr) - change the priority ceiling of a mutex pthread_mutex_init pthread_mutex_init (3thr) - initialize or destroy a mutex pthread_mutex_lock pthread_mutex_lock (3thr) - lock or unlock a mutex pthread_mutex_setprioceiling pthread_mutex_getprioceiling (3thr) - change the priority ceiling of a mutex pthread_mutex_trylock pthread_mutex_lock (3thr) - lock or unlock a mutex pthread_mutex_unlock pthread_mutex_lock (3thr) - lock or unlock a mutex pthread_mutexattr_destroy pthread_mutexattr_init (3thr) - initialize and destroy mutex attributes object pthread_mutexattr_getprioceiling pthread_mutexattr_getprioceiling (3thr) - get and set prioceiling attribute of mutex attribute object pthread_mutexattr_getprotocol pthread_mutexattr_getprotocol (3thr) - get and set protocol attribute of mutex attribute object pthread_mutexattr_getpshared pthread_mutexattr_getpshared (3thr) - get and set process-shared attribute pthread_mutexattr_getrobust_np pthread_mutexattr_getrobust_np (3thr) - get or set robustness attribute of mutex attribute object pthread_mutexattr_gettype pthread_mutexattr_gettype (3thr) - get or set a mutex type pthread_mutexattr_init pthread_mutexattr_init (3thr) - initialize and destroy mutex attributes object pthread_mutexattr_setprioceiling pthread_mutexattr_getprioceiling (3thr) - get and set prioceiling attribute of mutex attribute object pthread_mutexattr_setprotocol pthread_mutexattr_getprotocol (3thr) - get and set protocol attribute of mutex attribute object pthread_mutexattr_setpshared pthread_mutexattr_getpshared (3thr) - get and set process-shared attribute pthread_mutexattr_setrobust_np pthread_mutexattr_getrobust_np (3thr) - get or set robustness attribute of mutex attribute object pthread_mutexattr_settype pthread_mutexattr_gettype (3thr) - get or set a mutex type pthread_once pthread_once (3thr) - initialize dynamic package pthread_rwlock_destroy pthread_rwlock_init (3thr) - initialize or destroy a read-write lock object pthread_rwlock_init pthread_rwlock_init (3thr) - initialize or destroy a read-write lock object pthread_rwlock_rdlock pthread_rwlock_rdlock (3thr) - lock or attempt to lock a read-write lock object for reading pthread_rwlock_tryrdlock pthread_rwlock_rdlock (3thr) - lock or attempt to lock a read-write lock object for reading pthread_rwlock_trywrlock pthread_rwlock_wrlock (3thr) - lock or attempt to lock a read-write lock object for writing pthread_rwlock_unlock pthread_rwlock_unlock (3thr) - unlock a read-write lock object pthread_rwlock_wrlock pthread_rwlock_wrlock (3thr) - lock or attempt to lock a read-write lock object for writing pthread_rwlockattr_destroy pthread_rwlockattr_init (3thr) - initialize or destroy read-write lock attributes object pthread_rwlockattr_getpshared pthread_rwlockattr_getpshared (3thr) - get or set process-shared attribute of read-write lock attributes object pthread_rwlockattr_init pthread_rwlockattr_init (3thr) - initialize or destroy read-write lock attributes object pthread_rwlockattr_setpshared pthread_rwlockattr_getpshared (3thr) - get or set process-shared attribute of read-write lock attributes object pthread_self pthread_self (3thr) - get calling thread's ID pthread_setcancelstate pthread_setcancelstate (3thr) - enable or disable cancellation pthread_setcanceltype pthread_setcanceltype (3thr) - set the cancellation type of a thread pthread_setconcurrency pthread_getconcurrency (3thr) - get or set level of concurrency pthread_setschedparam pthread_getschedparam (3thr) - access dynamic thread scheduling parameters pthread_setspecific pthread_getspecific (3thr) - manage thread-specific data pthread_sigmask pthread_sigmask (3thr) - change or examine calling thread's signal mask pthread_testcancel pthread_testcancel (3thr) - create cancellation point in the calling thread pthreads threads (3thr) - concepts related to POSIX pthreads and Solaris threads and the libpthread and libthread libraries td_event_addset td_ta_event_addr (3thr) - thread events in libthread_db td_event_delset td_ta_event_addr (3thr) - thread events in libthread_db td_event_emptyset td_ta_event_addr (3thr) - thread events in libthread_db td_event_fillset td_ta_event_addr (3thr) - thread events in libthread_db td_eventisempty td_ta_event_addr (3thr) - thread events in libthread_db td_eventismember td_ta_event_addr (3thr) - thread events in libthread_db td_init td_init (3thr) - performs initialization for libthread_db library of interfaces td_sync_get_info td_sync_get_info (3thr) - operations on a synchronization object in libthread_db td_sync_get_stats td_sync_get_info (3thr) - operations on a synchronization object in libthread_db td_sync_setstate td_sync_get_info (3thr) - operations on a synchronization object in libthread_db td_sync_waiters td_sync_get_info (3thr) - operations on a synchronization object in libthread_db td_ta_clear_event td_ta_event_addr (3thr) - thread events in libthread_db td_ta_delete td_ta_new (3thr) - allocate and deallocate process handles for libthread_db td_ta_enable_stats td_ta_enable_stats (3thr) - collect target process statistics for libthread_db td_ta_event_addr td_ta_event_addr (3thr) - thread events in libthread_db td_ta_event_getmsg td_ta_event_addr (3thr) - thread events in libthread_db td_ta_get_nthreads td_ta_get_nthreads (3thr) - gets the total number of threads in a process for libthread_db td_ta_get_ph td_ta_new (3thr) - allocate and deallocate process handles for libthread_db td_ta_get_stats td_ta_enable_stats (3thr) - collect target process statistics for libthread_db td_ta_map_id2thr td_ta_map_id2thr (3thr) - convert a thread id or LWP id to a thread handle td_ta_map_lwp2thr td_ta_map_id2thr (3thr) - convert a thread id or LWP id to a thread handle td_ta_new td_ta_new (3thr) - allocate and deallocate process handles for libthread_db td_ta_reset_stats td_ta_enable_stats (3thr) - collect target process statistics for libthread_db td_ta_set_event td_ta_event_addr (3thr) - thread events in libthread_db td_ta_sync_iter td_ta_sync_iter (3thr) - iterator functions on process handles from libthread_db td_ta_sync_tracking_enable td_sync_get_info (3thr) - operations on a synchronization object in libthread_db td_ta_thr_iter td_ta_sync_iter (3thr) - iterator functions on process handles from libthread_db td_ta_tsd_iter td_ta_sync_iter (3thr) - iterator functions on process handles from libthread_db td_thr_clear_event td_ta_event_addr (3thr) - thread events in libthread_db td_thr_dbresume td_thr_dbsuspend (3thr) - suspend and resume threads in libthread_db td_thr_dbsuspend td_thr_dbsuspend (3thr) - suspend and resume threads in libthread_db td_thr_event_enable td_ta_event_addr (3thr) - thread events in libthread_db td_thr_event_getmsg td_ta_event_addr (3thr) - thread events in libthread_db td_thr_get_info td_thr_get_info (3thr) - get thread information in libthread_db library of interfaces td_thr_getfpregs td_thr_getgregs (3thr) - reading and writing thread registers in libthread_db td_thr_getgregs td_thr_getgregs (3thr) - reading and writing thread registers in libthread_db td_thr_getxregs td_thr_getgregs (3thr) - reading and writing thread registers in libthread_db td_thr_getxregsize td_thr_getgregs (3thr) - reading and writing thread registers in libthread_db td_thr_lockowner td_thr_lockowner (3thr) - iterate over the set of locks owned by a thread td_thr_set_event td_ta_event_addr (3thr) - thread events in libthread_db td_thr_setfpregs td_thr_getgregs (3thr) - reading and writing thread registers in libthread_db td_thr_setgregs td_thr_getgregs (3thr) - reading and writing thread registers in libthread_db td_thr_setprio td_thr_setprio (3thr) - set the priority of a thread td_thr_setsigpending td_thr_setsigpending (3thr) - manage thread signals for libthread_db td_thr_setxregs td_thr_getgregs (3thr) - reading and writing thread registers in libthread_db td_thr_sigsetmask td_thr_setsigpending (3thr) - manage thread signals for libthread_db td_thr_sleepinfo td_thr_sleepinfo (3thr) - return the synchronization handle for the object on which a thread is blocked td_thr_tsd td_thr_tsd (3thr) - get a thread's thread-specific data for libthread_db library of interfaces td_thr_validate td_thr_validate (3thr) - test a thread handle for validity thr_continue thr_suspend (3thr) - suspend or continue thread execution thr_create thr_create (3thr) - create a thread thr_exit thr_exit (3thr) - terminate the calling thread thr_getconcurrency thr_getconcurrency (3thr) - get or set thread concurrency level thr_getprio thr_getprio (3thr) - access dynamic thread scheduling thr_getspecific thr_keycreate (3thr) - thread-specific-data functions thr_join thr_join (3thr) - wait for thread termination thr_keycreate thr_keycreate (3thr) - thread-specific-data functions thr_kill thr_kill (3thr) - send a signal to a thread thr_main thr_main (3thr) - identify the main thread thr_min_stack thr_min_stack (3thr) - return the minimum-allowable size for a thread's stack thr_self thr_self (3thr) - get calling thread's ID thr_setconcurrency thr_getconcurrency (3thr) - get or set thread concurrency level thr_setprio thr_getprio (3thr) - access dynamic thread scheduling thr_setspecific thr_keycreate (3thr) - thread-specific-data functions thr_sigsetmask thr_sigsetmask (3thr) - change or examine calling thread's signal mask thr_stksegment thr_stksegment (3thr) - get thread stack address and size thr_suspend thr_suspend (3thr) - suspend or continue thread execution thr_yield thr_yield (3thr) - yield to another thread threads threads (3thr) - concepts related to POSIX pthreads and Solaris threads and the libpthread and libthread libraries tnf_thread_disable tnf_process_disable (3tnf) - probe control internal interface tnf_thread_enable tnf_process_disable (3tnf) - probe control internal interface webserver2 #
- References:
- Does Mathematica 5 use multiple processors on SPARC?
- From: Dave <nospam@nowhere.com>
- Does Mathematica 5 use multiple processors on SPARC?