Program Listing for File gxf_execution_context.hpp
↰ Return to documentation for file (include/holoscan/core/gxf/gxf_execution_context.hpp
)
/*
* SPDX-FileCopyrightText: Copyright (c) 2022-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef HOLOSCAN_CORE_GXF_GXF_EXECUTION_CONTEXT_HPP
#define HOLOSCAN_CORE_GXF_GXF_EXECUTION_CONTEXT_HPP
#include <gxf/core/gxf.h>
#include <memory>
#include <string>
#include <unordered_map>
#include <vector>
#include "../execution_context.hpp"
#include "./gxf_cuda.hpp"
#include "./gxf_io_context.hpp"
namespace holoscan::gxf {
class GXFWrapper; // forward declaration
class GXFExecutionContext : public holoscan::ExecutionContext {
public:
GXFExecutionContext() = default;
GXFExecutionContext(gxf_context_t context, Operator* op);
GXFExecutionContext(gxf_context_t context, std::shared_ptr<GXFInputContext> gxf_input_context,
std::shared_ptr<GXFOutputContext> gxf_output_context);
~GXFExecutionContext() override = default;
std::shared_ptr<GXFInputContext> gxf_input() { return gxf_input_context_; }
std::shared_ptr<GXFOutputContext> gxf_output() { return gxf_output_context_; }
expected<cudaStream_t, RuntimeError> allocate_cuda_stream(
const std::string& stream_name) override;
// @brief synchronize all of the streams in cuda_streams with target_cuda_stream
void synchronize_streams(const std::vector<std::optional<cudaStream_t>>& cuda_streams,
cudaStream_t target_cuda_stream) override;
// @brief determine the CUDA device corresponding to the given stream
expected<int, RuntimeError> device_from_stream(cudaStream_t stream) override;
std::shared_ptr<Operator> find_operator(const std::string& op_name /* = "" */) override;
expected<holoscan::OperatorStatus, RuntimeError> get_operator_status(
const std::string& op_name /* = "" */) override;
expected<gxf::CudaStreamHandle, RuntimeError> stream_handle_from_stream(cudaStream_t stream);
std::shared_ptr<CudaObjectHandler> cuda_object_handler() { return cuda_object_handler_; }
void init_cuda_object_handler(Operator* op);
void release_internal_cuda_streams();
void clear_received_streams();
protected:
friend class holoscan::gxf::GXFWrapper;
friend class holoscan::gxf::GXFInputContext;
friend class holoscan::gxf::GXFOutputContext;
expected<CudaStreamHandle, RuntimeError> allocate_cuda_stream_handle(
const std::string& stream_name);
expected<gxf_uid_t, RuntimeError> get_operator_eid(const std::string& op_name);
Operator* op_ = nullptr;
gxf_uid_t eid_ = kNullUid;
std::shared_ptr<GXFInputContext> gxf_input_context_{};
std::shared_ptr<GXFOutputContext> gxf_output_context_{};
std::shared_ptr<CudaObjectHandler> cuda_object_handler_{};
std::unordered_map<std::string, gxf_uid_t> operator_eid_cache_{};
};
} // namespace holoscan::gxf
#endif/* HOLOSCAN_CORE_GXF_GXF_EXECUTION_CONTEXT_HPP */