OpenVX 源码分析-- 图的执行(TI / Sample)

TI openVX

Graph的执行

Created with Raphaël 2.3.0 开始 ownGraphScheduleGraphWrapper()vx_graph.c ownGraphScheduleGraph()vx_graph_pipeline.c 循环放叶子任务:ownNodeKernelSchedule()->tivxObjDescSend() ->tivxTargetQueueObjDesc() 循环取任务:tivxTargetTaskMain->tivxTargetDequeueObjDesc->tivxQueueGet() vx_target.c 执行任务:tivxTargetTaskMain->tivxTargetNodeDescNodeExecute() 结束

关键源代码:
vx_graph_pipeline.c

ownGraphScheduleGraph()

            /* trigger graph execution by scheduling the head nodes
             * Head nodes will trigger further nodes execution after
             * their completion
             * This will continue until leaf nodes executes
             * After a leaf node executes, it will send a completion
             * event.
             * After all completion events are received, a graph is
             * considered to have
             * executed
             */
            for(node_id=0; node_id<graph->num_head_nodes; node_id++)
            {
                ownNodeKernelSchedule(graph->head_nodes[node_id], graph_obj_desc->pipeline_id);
            }

vx_target.c

    while(target->targetExitRequest == (vx_bool)vx_false_e)
   {
           status = tivxTargetDequeueObjDesc(target,
                   &obj_desc_id, TIVX_EVENT_TIMEOUT_WAIT_FOREVER);
               switch(obj_desc->type)
               {
                   case (vx_enum)TIVX_OBJ_DESC_CMD:
                       if( tivxObjDescIsValidType( obj_desc, TIVX_OBJ_DESC_CMD) != 0)
                       {
                           tivxTargetCmdDescHandler((tivx_obj_desc_cmd_t*)obj_desc);
                       }
                       break;
                   case (vx_enum)TIVX_OBJ_DESC_NODE:
                       if( tivxObjDescIsValidType( obj_desc, TIVX_OBJ_DESC_NODE) != 0)
                       {
                           tivxTargetNodeDescNodeExecute(target, (tivx_obj_desc_node_t*)obj_desc);
                       }
                       break;
                   default:
                       /* unsupported obj_desc received at target */
                       break;
               }
   }

Node 的执行 ownNodeUserKernelExecute

Created with Raphaël 2.3.0 开始 tivxTargetTaskMain tivxTargetNodeDescNodeExecute tivxTargetNodeDescNodeExecuteUserKernel ownNodeUserKernelExecute node->kernel->function 结束

Node Exe源代码

ownNodeUserKernelExecute()

vx_reference params[TIVX_KERNEL_MAX_PARAMS];	//TIVX_KERNEL_MAX_PARAMS:64
vx_reference parent_ref[TIVX_KERNEL_MAX_PARAMS];
status = node->kernel->function(node, prm_ref, num_params);

解读:
Node 的执行参数是 最大64个,必须是固定格式的(vx_type_e中的一个)。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值