HP-UX Reference (11i v2 07/12) - 3 Library Functions N-Z (vol 7)

p
pthread_processor_bind_np(3T) pthread_processor_bind_np(3T)
(Pthread Library)
processor 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 processor. That
thread will wait until the wanted processor becomes available. The available processor 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 locality
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 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 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 policies.
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()
,
pthread_processor_bind_np(), pthread_pset_bind_np(), and
pthread_ldom_bind_np() functions return the corresponding error number:
[EINVAL] The request parameter contains an illegal value.
HP-UX 11i Version 2: December 2007 Update 4 Hewlett-Packard Company 253