HP-UX Reference (11i v2 03/08) - 3 Library Functions N-Z (vol 7)
p
pthread_processor_bind_np(3T) pthread_processor_bind_np(3T)
(Pthread Library)
PTHREAD_BIND_FORCED_NP
This request is identical to PTHREAD_BIND_ADVISORY_NP
except that this thread to proces-
sor binding will over rule the scheduling policy. For example, when a processor is ready to
choose another thread to execute, if the highest priority
SCHED_FIFO thread on the run
queue is bound to a different processor, that thread will not be chosen by the available proces-
sor. That thread will wait until the wanted processor becomes available. The available proces-
sor will choose a lower priority thread to execute instead of completely honoring the scheduling
policies.
Note: binding a thread to a specific processor essentially changes the scheduling allocation domain size
for that thread to be one. Having a thread float and be scheduled on whatever processor the system
chooses sets a thread’s scheduling allocation domain size to a value greater than one (it will generally be
equal to the number of processors on the system).
Locality Domain Binding
Locality domain binding is expected to be used to increase performance in certain applications to prevent
cache thrashing or to cause threads to execute in parallel on different processors. It should not be used to
ensure correctness of an application. Specifically, cooperating threads should not rely on locality domain
assignment in lieu of a synchronization mechanism (such as mutexes).
Processor binding and locality domain binding is mutually exclusive - only one can be in effect at any
time. If locality domain binding is in effect, the target is allowed to execute on any processor within that
locality domain.
Due to the capability of online addition and deletion of processors on some platforms, locality domains
may go away. If the last processor in a locality domain is removed, any threads bound to a departing
locality domain will be rebound to a different locality domain.
The
pthread_ldom_bind_np()
function binds a thread to a specific locality domain. The new local-
ity domain binding is returned in answer.
The thread specified by tid is the target thread whose binding is changed. The value
PTHREAD_SELFTID_NP
can be used to refer to the calling thread.
The ldom parameter specifies the new locality domain binding for tid. The value
PTHREAD_LDOMNOCHANGE_NP
may be passed to only read the current assignment. The value
PTHREAD_LDOMFLOAT_NP
may be passed to break any specific locality domain assignment and allow
the implementation to choose which locality domain the thread should execute in. This allows the thread
to run on any processor the implementation chooses. Otherwise, ldom specifies the ID of the locality
domain to which tid should be bound to.
The locality domain binding will take precedence over the scheduling policy. For example, when a proces-
sor is ready to choose another thread to execute, if the highest priority
SCHED_FIFO thread on the run
queue is bound to a different locality domain, that thread will not be chosen by the available processor.
That thread will wait until a processor in the wanted locality domain becomes available. The available
processor will choose a lower priority thread to execute instead of completely honoring the scheduling pol-
icies.
RETURN VALUE
pthread_num_processors_np() always returns the number of processors on the system. It never
fails.
pthread_num_ldoms_np() always returns the number of locality domains on the system. It never
fails.
Upon successful completion,
pthread_processor_id_np(), pthread_ldom_id_np()
,
pthread_spu_to_ldom_np(), pthread_num_ldomprocs_np()
,
pthread_processor_bind_np(), pthread_pset_bind_np()
, and
pthread_ldom_bind_np() return zero. Otherwise, an error number is returned to indicate the error
(the errno variable is not set).
Note: In some cases,
pthread_processor_bind_np() and pthread_ldom_bind_np() may
return a negative value, other than -1, in the answer field which still indicates a successful return.
Refer to mpctl(2) for the definition of the returned value.
ERRORS
If any of the following occur, the
pthread_processor_id_np(), pthread_ldom_id_np(),
pthread_spu_to_ldom_np(), pthread_num_ldomprocs_np(),
Section 3−−802 Hewlett-Packard Company − 4 − HP-UX 11i Version 2: August 2003