NVIDIA Holoscan SDK v2.9.0

Ping Simple

大多数应用程序将需要多个操作器。在本例中,我们将创建两个操作器,其中一个操作器将生成和发送数据,而另一个操作器将接收和打印数据。本例中的代码使用了内置的 PingTxOpPingRxOp 操作器,它们在 holoscan::ops 命名空间中定义。

在本例中,我们将介绍

  • 如何使用内置操作器。

  • 如何使用 add_flow() 将操作器连接在一起。

注意

示例源代码和运行说明可以在 GitHub 上的 examples 目录中找到,或者在 NGC 容器和 Debian 包中的 /opt/nvidia/holoscan/examples 下找到,以及它们的可执行文件。

这是一个涉及两个线性连接的操作器的工作流程示例。

graphviz-4fc83740e86798119308ed396795304aee6d324b.png

图 5 线性工作流程

在本例中,源操作器 PingTxOp 生成从 1 到 10 的整数,并将其传递给接收器操作器 PingRxOp,后者将整数打印到标准输出。

我们可以通过在应用程序的 compose() 方法中调用 add_flow() (C++/Python) 来连接两个操作器。

add_flow() 方法 (C++/Python) 接受源操作器、目标操作器和可选的端口名称对。端口名称对用于将源操作器的输出端口连接到目标操作器的输入端口。该对的第一个元素是上游操作器的输出端口名称,第二个元素是下游操作器的输入端口名称。如果操作器只有一个输入/输出端口,则可以使用空端口名称(“”)来指定端口名称。如果上游操作器中只有一个输出端口,而下游操作器中只有一个输入端口,则可以省略端口对。

以下代码显示了如何在我们的示例的 compose() 方法中定义线性工作流程。请注意,当操作器出现在 add_flow() 语句中时,不需要使用 add_operator() 单独添加到工作流程中。

复制
已复制!
            

#include <holoscan/holoscan.hpp> #include <holoscan/operators/ping_tx/ping_tx.hpp> #include <holoscan/operators/ping_rx/ping_rx.hpp> class MyPingApp : public holoscan::Application { public: void compose() override { using namespace holoscan; // Create the tx and rx operators auto tx = make_operator<ops::PingTxOp>("tx", make_condition<CountCondition>(10)); auto rx = make_operator<ops::PingRxOp>("rx"); // Connect the operators into the workflow: tx -> rx add_flow(tx, rx); } }; int main(int argc, char** argv) { auto app = holoscan::make_application<MyPingApp>(); app->run(); return 0; }

  • 定义 PingTxOpPingRxOp 的头文件分别包含在第 2 行和第 3 行。

  • 我们使用 make_operator() 函数(第 10 行)创建一个 PingTxOp 的实例,名称为 “tx”,并约束其 compute() 方法执行 10 次。

  • 我们使用 make_operator() 函数(第 11 行)创建一个 PingRxOp 的实例,名称为 “rx”。

  • tx 和 rx 操作器使用 add_flow()(第 14 行)连接。

复制
已复制!
            

from holoscan.conditions import CountCondition from holoscan.core import Application from holoscan.operators import PingRxOp, PingTxOp class MyPingApp(Application): def compose(self): # Create the tx and rx operators tx = PingTxOp(self, CountCondition(self, 10), name="tx") rx = PingRxOp(self, name="rx") # Connect the operators into the workflow: tx -> rx self.add_flow(tx, rx) def main(): app = MyPingApp() app.run() if __name__ == "__main__": main()

  • 内置的 holoscan 操作器 PingRxOpPingTxOp 在第 3 行导入。

  • 我们创建一个名为 “tx” 的 PingTxOp 操作器实例,并约束其 compute() 方法执行 10 次(第 8 行)。

  • 我们创建一个名为 “rx” 的 PingRxOp 操作器实例(第 9 行)。

  • tx 和 rx 操作器使用 add_flow() 连接,这定义了应用程序的工作流程(第 12 行)。

运行应用程序应该在您的终端中给出以下输出

复制
已复制!
            

Rx message value: 1 Rx message value: 2 Rx message value: 3 Rx message value: 4 Rx message value: 5 Rx message value: 6 Rx message value: 7 Rx message value: 8 Rx message value: 9 Rx message value: 10

上一个 Hello World
下一个 Ping Custom Op
© 版权所有 2022-2024,NVIDIA。 上次更新于 2025 年 1 月 27 日。