holoscan::Scheduler

Beta
View as Markdown

Base class for all schedulers.

This class is the base class for all schedulers including holoscan::MultiThreadScheduler, holoscan::GreedyScheduler and holoscan::EventBasedScheduler. It is used to define the common interface for all schedulers.

#include <holoscan/scheduler.hpp>

Inherits from: holoscan::Component (public)


Constructors

Scheduler

holoscan::Scheduler::Scheduler() = defaultholoscan::Scheduler::Scheduler() = default

Destructor

~Scheduler

holoscan::Scheduler::~Scheduler() override = defaultholoscan::Scheduler::~Scheduler() override = default

Methods

id

Scheduler & holoscan::Scheduler::id(Scheduler & holoscan::Scheduler::id(
int64_t id
)

Set the Scheduler ID.

Returns: The reference to this scheduler.

Parameters

id
int64_t

The ID of the scheduler.

name

Scheduler & holoscan::Scheduler::name(Scheduler & holoscan::Scheduler::name(
const std::string &name
) &

Set the name of the scheduler.

Returns: The reference to the scheduler.

Parameters

name
const std::string &

The name of the scheduler.

fragment

Scheduler & holoscan::Scheduler::fragment(Scheduler & holoscan::Scheduler::fragment(
Fragment *fragment
)

Set the fragment of the scheduler.

Returns: The reference to the scheduler.

Parameters

fragment
Fragment *

The pointer to the fragment of the scheduler.

spec

Scheduler & holoscan::Scheduler::spec(Scheduler & holoscan::Scheduler::spec(
const std::shared_ptr<ComponentSpec> &spec
)

Set the component specification to the scheduler.

Returns: The reference to the scheduler.

Parameters

spec
const std::shared_ptr<ComponentSpec> &

The component specification.

spec_shared

std::shared_ptr<ComponentSpec> holoscan::Scheduler::spec_shared()std::shared_ptr<ComponentSpec> holoscan::Scheduler::spec_shared()

Get the shared pointer to the component spec.

Returns: The shared pointer to the component spec.

add_arg

void holoscan::Scheduler::add_arg(
const std::shared_ptr<Resource> &arg
)

Add a resource to the scheduler.

Parameters

arg
const std::shared_ptr<Resource> &

The resource to add.

resources

std::unordered_map<std::string, std::shared_ptr<Resource>> & holoscan::Scheduler::resources()std::unordered_map<std::string, std::shared_ptr<Resource>> & holoscan::Scheduler::resources()

Get the resources of the scheduler.

Returns: The resources of the scheduler.

clock

virtual std::shared_ptr<Clock> holoscan::Scheduler::clock()virtual std::shared_ptr<Clock> holoscan::Scheduler::clock()

Get the Clock used by the scheduler.

Returns: The Clock used by the scheduler.

setup

virtual void holoscan::Scheduler::setup(
ComponentSpec &spec
)

Define the scheduler specification.

Parameters

spec
ComponentSpec &

The reference to the component specification.

initialize

void holoscan::Scheduler::initialize() override

Initialize the scheduler.

This function is called after the scheduler is created by holoscan::Fragment::make_scheduler().

to_yaml_node

YAML::Node holoscan::Scheduler::to_yaml_node() const override

Get a YAML representation of the scheduler.

Returns: YAML node including the base component properties, component spec and resources.

reset_backend_objects

void holoscan::Scheduler::reset_backend_objects() override

Reset any backend-specific objects.

set_parameters

virtual void holoscan::Scheduler::set_parameters()

Set the parameters based on defaults (sets GXF parameters for GXF operators).

args

std::vector<Arg> & holoscan::ComponentBase::args()std::vector<Arg> & holoscan::ComponentBase::args()

Get the list of arguments.

Returns: The vector of arguments.

description

std::string holoscan::ComponentBase::description() const

Get a description of the component.

Returns: YAML string.

See also: to_yaml_node()

service

template <typename ServiceT = DefaultFragmentService>
std::shared_ptr<ServiceT> holoscan::ComponentBase::service(
std::string_view id = ""
) const

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

ServiceT
typename

The type of the service/resource to retrieve. Must inherit from either Resource or FragmentService. Defaults to DefaultFragmentService if not specified.

Parameters

id
std::string_viewDefaults to ""

The identifier of the service/resource. If empty, retrieves by type only.

get_service_by_type_info

std::shared_ptr<FragmentService> holoscan::ComponentBase::get_service_by_type_info(std::shared_ptr<FragmentService> holoscan::ComponentBase::get_service_by_type_info(
const std::type_info &service_type,
std::string_view id = ""
) const

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

service_type
const std::type_info &

The type info of the service/resource to retrieve.

id
std::string_viewDefaults to ""

The identifier of the service/resource. If empty, retrieves by type only.

update_params_from_args

void holoscan::Scheduler::update_params_from_args()

Update parameters based on the specified arguments.

service_provider

void holoscan::ComponentBase::service_provider(
FragmentServiceProvider *provider
)

Set the service provider that owns this component.


Static methods

register_converter

template <typename typeT>
static void holoscan::ComponentBase::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

typeT
typename

The type of the argument to register.

Example

void MyOp::initialize() {
register_converter<Vec3>();
}

Example

struct Vec3 {
// make sure you have overloaded operator==() for the comparison
double x, y, z;
};

Example

namespace YAML {
template<>
struct convert<Vec3> {
static Node encode(const Vec3& rhs) {
Node node;
node.push_back(rhs.x);
node.push_back(rhs.y);
node.push_back(rhs.z);
return node;
}
static bool decode(const Node& node, Vec3& rhs) {
if(!node.IsSequence() || node.size() != 3) {
return false;
}
rhs.x = node[0].as<double>();
rhs.y = node[1].as<double>();
rhs.z = node[2].as<double>();
return true;
}
};
}

register_argument_setter

template <typename typeT>
void holoscan::ComponentBase::register_argument_setter()

Register the argument setter for the given type.

Please refer to the documentation of register_converter() for more details.

Template parameters

typeT
typename

The type of the argument to register.


Member variables

NameTypeDescription
resources_std::unordered_map< std::string, std::shared_ptr< Resource > >The resources used by the scheduler.
spec_std::shared_ptr< ComponentSpec >The component specification.
id_int64_tThe ID of the component.
name_std::stringName of the component.
fragment_Fragment *Pointer to the fragment that owns this component.
args_std::vector< Arg >List of arguments.
service_provider_FragmentServiceProvider *Pointer to the service provider.