holoscan::ThreadPool
holoscan::ThreadPool
Thread pool resource.
This is a thread pool for use with the EventBasedScheduler or MultiThreadScheduler. This resource should be created via the Fragment::make_thread_pool method instead of the usual Fragment::make_resource method as it requires additional configuration of an associated GXF EntityGroup.
User-defined thread pools create additional worker threads beyond the default thread pool that is automatically created by the scheduler (based on the scheduler’s worker_thread_number parameter). Operators not assigned to a user-defined pool will use the default pool.
pool1 = make_thread_pool(“pool1”, Arg(“initial_size”, static_cast<int64_t>(2)));
The operators can be added via the add method. For strict thread pinning, the pin_operator argument should be true and the initial_size of the thread pool should be at least as large as the number of operators that will be pinned to threads. The optional pin_cores parameter allows restricting the thread to specific CPU cores (supported by EventBasedScheduler only).
pool1.add(op1, true); pool1.add(op2, true, {0, 1}); // Pin to cores 0 and 1
This add method takes care of adding any needed holoscan::CPUThread resource to the operator.
The MultiThreadScheduler’s strict_job_thread_pinning argument can be set true to disallow execution of any other entities on the pinned thread. The EventBasedScheduler always uses strict thread pinning.
Inherits from: holoscan::gxf::GXFSystemResourceBase (public)
Constructors
ThreadPool
Move
Default
Copy
Methods
gxf_typename
The underlying GXF component’s name.
setup
Define the resource specification.
Parameters
The reference to the component specification.
size
The number of threads currently in the thread pool.
add
Add an operator to the thread pool
Add multiple operators to the thread pool
Add an operator to the thread pool.
Parameters
The operator to add.
Whether the operator should be pinned to a specific thread in the pool.
CPU core IDs to pin the worker threads to (empty means no core pinning).
add_realtime
Add an operator to the thread pool with real-time scheduling capabilities.
Parameters
The operator to add.
Real-time scheduling policy (kFirstInFirstOut, kRoundRobin, kDeadline).
Whether the operator should be pinned to a specific thread in the pool.
CPU core IDs to pin the worker thread to (empty means no core pinning).
Thread priority for FirstInFirstOut and RoundRobin policies.
Expected worst case execution time in nanoseconds for Deadline policy.
Relative deadline in nanoseconds for Deadline policy.
Period in nanoseconds for Deadline policy.
entity_group
Mutable
Const
Set the entity group for this thread pool.
operators
The operators associated with this thread pool.
to_yaml_node
Get a YAML representation of the thread pool.
Returns: YAML node including properties of the base resource and the operators in the pool.
initialize
Initialize the component.
This method is called only once when the component is created for the first time, and use of light-weight initialization.
resource_type
Get the resource type.
Returns: The resource type.
name
Set the name of the resource (1)
Set the name of the resource (2)
Const
Set the name of the resource.
Returns: The reference to the resource.
Parameters
The name of the resource.
fragment
Set the fragment of the resource.
Returns: The reference to the resource.
Parameters
The pointer to the fragment of the resource.
spec
Set the component specification to the resource
Get the component specification of the resource
Set the component specification to the resource.
Returns: The reference to the resource.
Parameters
The component specification.
spec_shared
Get the shared pointer to the component spec.
Returns: The shared pointer to the component spec.
id
Get the identifier of the component.
By default, the identifier is set to -1. It is set to a valid value when the component is initialized.
With the default executor (GXFExecutor), the identifier is set to the GXF component ID.
Returns: The identifier of the component.
add_arg
Add an argument to the component (1)
Add an argument to the component (2)
Add a list of arguments to the component (1)
Add a list of arguments to the component (2)
Add an argument to the component.
Parameters
The argument to add.
args
Get the list of arguments.
Returns: The vector of arguments.
description
Get a description of the component.
Returns: YAML string.
See also: to_yaml_node()
service
Retrieve a registered fragment service or resource.
Retrieves a previously registered fragment service or resource by its type and optional identifier. Returns nullptr if no service/resource is found with the specified type and identifier.
Note that any changes to the service retrieval logic in this method should be synchronized with the implementation in Fragment::service() method to maintain consistency.
Returns: The shared pointer to the service/resource, or nullptr if not found or if type casting fails.
Template parameters
The type of the service/resource to retrieve. Must inherit from either Resource or FragmentService. Defaults to DefaultFragmentService if not specified.
Parameters
The identifier of the service/resource. If empty, retrieves by type only.
get_service_by_type_info
Retrieve a registered fragment service or resource for Python bindings.
This is a helper method for Python bindings to retrieve a service by its C++ type info.
Returns: The shared pointer to the base service, or nullptr if not found.
Parameters
The type info of the service/resource to retrieve.
The identifier of the service/resource. If empty, retrieves by type only.
gxf_context
Mutable
Const
gxf_eid
Mutable
Const
gxf_tid
Mutable
Const
gxf_cid
Mutable
Const
gxf_cname
Overload 1
Overload 2
gxf_graph_entity
Overload 1
Overload 2
gxf_entity_group_name
The name of the entity group this component belongs to.
gxf_entity_group_id
The group id of the entity group this component belongs to.
gxf_cptr
gxf_component
gxf_initialize
set_gxf_parameter
Set a given parameter on the underlying GXF component.
reset_gxf_graph_entity
add_to_graph_entity
Overload 1
Overload 2
set_parameters
This method is invoked by GXFResource::initialize().
By overriding this method, we can modify how GXF Codelet’s parameters are set from the arguments.
handle_dev_id
reset_backend_objects
Reset any backend-specific state.
update_params_from_args
Update parameters based on the specified arguments
Update parameters based on the specified arguments (with params)
Update parameters based on the specified arguments.
service_provider
Set the service provider that owns this component.
Static methods
register_converter
Register the argument setter for the given type.
If an operator or resource has an argument with a custom type, the argument setter must be registered using this method.
The argument setter is used to set the value of the argument from the YAML configuration.
This method can be called in the initialization phase of the operator/resource (e.g., initialize()). The example below shows how to register the argument setter for the custom type (Vec3):
It is assumed that YAML::convert<T>::encode and YAML::convert<T>::decode are implemented for the given type. You need to specialize the YAML::convert<> template class.
For example, suppose that you had a Vec3 class with the following members:
You can define the YAML::convert<Vec3> as follows in a ‘.cpp’ file:
Please refer to the yaml-cpp documentation for more details.
Template parameters
The type of the argument to register.
Example
Example
Example
register_argument_setter
Register the argument setter for the given type.
Please refer to the documentation of register_converter() for more details.
Template parameters
The type of the argument to register.
Types
ResourceType
Resource type used for the initialization of the resource.