TDA4VM: Load factor of C61 after adding node vxColorConvertNode

Part Number: TDA4VM

Tool/software:

Hello,

I need to pass the output of srv to the pre-processing node, I transform the output of srv to NV12 format through vxColorConvertNode, the data flow is as follows.

capture(yuv422) -> ldc(NV12) -> srv(RGBX) -> color_convert_node(NV12) -> DisplayNode.

Is it normal for the screen to show that the C61 is loaded up to 93%?

I added the following code. SDK: 08_04

 if(status == VX_SUCCESS)
    {
        status = app_create_graph_color_convert(obj, obj->srvObj.output_img);
        APP_PRINTF("color convert graph done!\n");
    }

vx_status app_create_graph_color_convert(AppObj *obj, vx_image conv_in_image)
{
    vx_status status = VX_SUCCESS;
    obj->convert_out = vxCreateImage(obj->context, DISPLAY_WIDTH, DISPLAY_HEIGHT, VX_DF_IMAGE_NV12);
    status = vxGetStatus((vx_reference)obj->convert_out);
    if ((vx_true_e == tivxIsTargetEnabled(TIVX_TARGET_DSP1)) && status == VX_SUCCESS)
    {
        obj->color_convert_node = vxColorConvertNode(obj->graph, conv_in_image, obj->convert_out);    
        if (vxGetStatus((vx_reference)obj->color_convert_node) == VX_SUCCESS)
        {
            vxSetNodeTarget(obj->color_convert_node, VX_TARGET_STRING, TIVX_TARGET_DSP1);
            vxSetReferenceName((vx_reference)obj->color_convert_node, "color_convert_node");

            // vx_bool replicate[] = { vx_true_e, vx_true_e };

            // vxReplicateNode(obj->graph, obj->color_convert_node, replicate, 2);
        }     
    }
    return status;
}

Thanks.

  • Hi,

    I believe you have too many nodes on C66x_1. You can also run this node on C66x_2 as well to balance the load.

    Apart from the load, are you seeing a hang in your usecase?

    Regards,

    Nikhil

  • I believe you have too many nodes on C66x_1. You can also run this node on C66x_2 as well to balance the load.

    Actually only color_convert_node is running on c66_1, when I delete the node, CPU load is as shown in the first picture. And when I set the  node on c66_2, the same problem occurs, shown in the second picture, and the performance statistics log is as follows

    fig.2.

    /*run on dsp2*/
    Summary of CPU load,
    ====================
    
    CPU: mpu1_0: TOTAL LOAD =   7.12 % ( HWI =   0.18 %, SWI =   0.14 % )
    CPU: mcu2_0: TOTAL LOAD =  16. 0 % ( HWI =   0. 0 %, SWI =   0. 0 % )
    CPU: mcu2_1: TOTAL LOAD =   1. 0 % ( HWI =   0. 0 %, SWI =   0. 0 % )
    CPU:  c6x_1: TOTAL LOAD =   1. 0 % ( HWI =   0. 0 %, SWI =   0. 0 % )
    CPU:  c6x_2: TOTAL LOAD =  92. 0 % ( HWI =   0. 0 %, SWI =   0. 0 % )
    CPU:  c7x_1: TOTAL LOAD =   1. 0 % ( HWI =   0. 0 %, SWI =   0. 0 % )
    
    
    HWA performance statistics,
    ===========================
    
    HWA:   LDC : LOAD =  41. 4 % ( 248 MP/s )
    HWA:   GPU : LOAD =  28.73 % ( 62 MP/s )
    
    
    DDR performance statistics,
    ===========================
    
    DDR: READ  BW: AVG =   2430 MB/s, PEAK =   6801 MB/s
    DDR: WRITE BW: AVG =   1671 MB/s, PEAK =   4157 MB/s
    DDR: TOTAL BW: AVG =   4101 MB/s, PEAK =  10958 MB/s
    
    
    Detailed CPU performance/memory statistics,
    ===========================================
    
    DDR_SHARED_MEM: Alloc's: 74 alloc's of 168391060 bytes 
    DDR_SHARED_MEM: Free's : 1 free's  of 36 bytes 
    DDR_SHARED_MEM: Open's : 73 allocs  of 168391024 bytes 
    DDR_SHARED_MEM: Total size: 536870912 bytes 
    
    CPU: mcu2_0: TASK:           IPC_RX:   0.39 %
    CPU: mcu2_0: TASK:       REMOTE_SRV:   0.12 %
    CPU: mcu2_0: TASK:        LOAD_TEST:   0. 0 %
    CPU: mcu2_0: TASK:       TIVX_CPU_0:   0. 0 %
    CPU: mcu2_0: TASK:      TIVX_VPAC_N:   0. 0 %
    CPU: mcu2_0: TASK:      TIVX_VPAC_L:   3.51 %
    CPU: mcu2_0: TASK:      TIVX_VPAC_M:   0. 0 %
    CPU: mcu2_0: TASK:      TIVX_VPAC_M:   0. 0 %
    CPU: mcu2_0: TASK:      TIVX_VPAC_V:   0. 0 %
    CPU: mcu2_0: TASK:       TIVX_CAPT1:   1.91 %
    CPU: mcu2_0: TASK:       TIVX_CAPT2:   0. 0 %
    CPU: mcu2_0: TASK:       TIVX_DISP1:   0.90 %
    CPU: mcu2_0: TASK:       TIVX_DISP2:   0. 0 %
    CPU: mcu2_0: TASK:       TIVX_CSITX:   0. 0 %
    CPU: mcu2_0: TASK:       TIVX_CAPT3:   0. 0 %
    CPU: mcu2_0: TASK:       TIVX_CAPT4:   0. 0 %
    CPU: mcu2_0: TASK:       TIVX_CAPT5:   0. 0 %
    CPU: mcu2_0: TASK:       TIVX_CAPT6:   0. 0 %
    CPU: mcu2_0: TASK:       TIVX_CAPT7:   0. 0 %
    CPU: mcu2_0: TASK:       TIVX_CAPT8:   0. 0 %
    CPU: mcu2_0: TASK:      TIVX_DISP_M:   0. 0 %
    CPU: mcu2_0: TASK:      TIVX_DISP_M:   0. 0 %
    CPU: mcu2_0: TASK:      TIVX_DISP_M:   0. 0 %
    CPU: mcu2_0: TASK:      TIVX_DISP_M:   0. 0 %
    
    CPU: mcu2_0: HEAP:    DDR_LOCAL_MEM: size =   16777216 B, free =   16698368 B ( 99 % unused)
    CPU: mcu2_0: HEAP:           L3_MEM: size =     262144 B, free =     261888 B ( 99 % unused)
    
    CPU: mcu2_1: TASK:           IPC_RX:   0. 0 %
    CPU: mcu2_1: TASK:       REMOTE_SRV:   0.10 %
    CPU: mcu2_1: TASK:        LOAD_TEST:   0. 0 %
    CPU: mcu2_1: TASK:         TIVX_SDE:   0. 0 %
    CPU: mcu2_1: TASK:         TIVX_DOF:   0. 0 %
    CPU: mcu2_1: TASK:       TIVX_CPU_1:   0. 0 %
    CPU: mcu2_1: TASK:      IPC_TEST_RX:   0. 0 %
    CPU: mcu2_1: TASK:      IPC_TEST_TX:   0. 0 %
    CPU: mcu2_1: TASK:      IPC_TEST_TX:   0. 0 %
    CPU: mcu2_1: TASK:      IPC_TEST_TX:   0. 0 %
    CPU: mcu2_1: TASK:      IPC_TEST_TX:   0. 0 %
    CPU: mcu2_1: TASK:      IPC_TEST_TX:   0. 0 %
    
    CPU: mcu2_1: HEAP:    DDR_LOCAL_MEM: size =   16777216 B, free =   16773376 B ( 99 % unused)
    CPU: mcu2_1: HEAP:           L3_MEM: size =     262144 B, free =     262144 B (100 % unused)
    
    CPU:  c6x_1: TASK:           IPC_RX:   0. 0 %
    CPU:  c6x_1: TASK:       REMOTE_SRV:   0. 0 %
    CPU:  c6x_1: TASK:        LOAD_TEST:   0. 0 %
    CPU:  c6x_1: TASK:         TIVX_CPU:   0. 0 %
    CPU:  c6x_1: TASK:      IPC_TEST_RX:   0. 0 %
    CPU:  c6x_1: TASK:      IPC_TEST_TX:   0. 0 %
    CPU:  c6x_1: TASK:      IPC_TEST_TX:   0. 0 %
    CPU:  c6x_1: TASK:      IPC_TEST_TX:   0. 0 %
    CPU:  c6x_1: TASK:      IPC_TEST_TX:   0. 0 %
    CPU:  c6x_1: TASK:      IPC_TEST_TX:   0. 0 %
    
    CPU:  c6x_1: HEAP:    DDR_LOCAL_MEM: size =   16777216 B, free =   16770304 B ( 99 % unused)
    CPU:  c6x_1: HEAP:           L2_MEM: size =     229376 B, free =     229376 B (100 % unused)
    CPU:  c6x_1: HEAP:  DDR_SCRATCH_MEM: size =   50331648 B, free =   50331648 B (100 % unused)
    
    CPU:  c6x_2: TASK:           IPC_RX:   0. 7 %
    CPU:  c6x_2: TASK:       REMOTE_SRV:   0. 2 %
    CPU:  c6x_2: TASK:        LOAD_TEST:   0. 0 %
    CPU:  c6x_2: TASK:         TIVX_CPU:  91.87 %
    CPU:  c6x_2: TASK:      IPC_TEST_RX:   0. 0 %
    CPU:  c6x_2: TASK:      IPC_TEST_TX:   0. 0 %
    CPU:  c6x_2: TASK:      IPC_TEST_TX:   0. 0 %
    CPU:  c6x_2: TASK:      IPC_TEST_TX:   0. 0 %
    CPU:  c6x_2: TASK:      IPC_TEST_TX:   0. 0 %
    CPU:  c6x_2: TASK:      IPC_TEST_TX:   0. 0 %
    
    CPU:  c6x_2: HEAP:    DDR_LOCAL_MEM: size =   16777216 B, free =   16765440 B ( 99 % unused)
    CPU:  c6x_2: HEAP:           L2_MEM: size =     229376 B, free =     229376 B (100 % unused)
    CPU:  c6x_2: HEAP:  DDR_SCRATCH_MEM: size =   50331648 B, free =   50331648 B (100 % unused)
    
    CPU:  c7x_1: TASK:           IPC_RX:   0. 0 %
    CPU:  c7x_1: TASK:       REMOTE_SRV:   0. 0 %
    CPU:  c7x_1: TASK:        LOAD_TEST:   0. 0 %
    CPU:  c7x_1: TASK:      TIVX_C7_1_P:   0. 0 %
    CPU:  c7x_1: TASK:      TIVX_C7_1_P:   0. 0 %
    CPU:  c7x_1: TASK:      TIVX_C7_1_P:   0. 0 %
    CPU:  c7x_1: TASK:      TIVX_C7_1_P:   0. 0 %
    CPU:  c7x_1: TASK:      TIVX_C7_1_P:   0. 0 %
    CPU:  c7x_1: TASK:      TIVX_C7_1_P:   0. 0 %
    CPU:  c7x_1: TASK:      TIVX_C7_1_P:   0. 0 %
    CPU:  c7x_1: TASK:      TIVX_C7_1_P:   0. 0 %
    CPU:  c7x_1: TASK:      IPC_TEST_RX:   0. 0 %
    CPU:  c7x_1: TASK:      IPC_TEST_TX:   0. 0 %
    CPU:  c7x_1: TASK:      IPC_TEST_TX:   0. 0 %
    CPU:  c7x_1: TASK:      IPC_TEST_TX:   0. 0 %
    CPU:  c7x_1: TASK:      IPC_TEST_TX:   0. 0 %
    CPU:  c7x_1: TASK:      IPC_TEST_TX:   0. 0 %
    
    CPU:  c7x_1: HEAP:    DDR_LOCAL_MEM: size =  268435456 B, free =  268435200 B ( 99 % unused)
    CPU:  c7x_1: HEAP:           L3_MEM: size =    8159232 B, free =    8159232 B (100 % unused)
    CPU:  c7x_1: HEAP:           L2_MEM: size =     458752 B, free =     458752 B (100 % unused)
    CPU:  c7x_1: HEAP:           L1_MEM: size =      16384 B, free =      16384 B (100 % unused)
    CPU:  c7x_1: HEAP:  DDR_SCRATCH_MEM: size =  385875968 B, free =  385875968 B (100 % unused)
    
    
    GRAPH: app_multi_cam_graph (#nodes =   6, #executions =   7604)
     NODE:       CAPTURE1:             capture_node: avg =  33260 usecs, min/max =  32117 /  63007 usecs, #executions =       7604
     NODE:      VPAC_LDC1:                 ldc_node: avg =  13917 usecs, min/max =  13718 /  14786 usecs, #executions =       7604
     NODE:          A72-0:          OpenGL_SRV_Node: avg =   9636 usecs, min/max =   8556 /  32215 usecs, #executions =       7604
     NODE:          DSP-2:       color_convert_node: avg =  30505 usecs, min/max =  29247 /  36622 usecs, #executions =       7604
     NODE:       DISPLAY1:              DisplayNode: avg =  11659 usecs, min/max =    100 /  30591 usecs, #executions =       7604
     NODE:          A72-0:           srv_write_node: avg =      8 usecs, min/max =      7 /     38 usecs, #executions =       7604
    
     PERF:           FILEIO: avg =      0 usecs, min/max = 4294967295 /      0 usecs, #executions =          0
     PERF:            TOTAL: avg =  33331 usecs, min/max =  30042 /  36466 usecs, #executions =        952
    
     PERF:            TOTAL:   30. 0 FPS
    
    
    
     =========================
     Demo : Camera Demo
     =========================
    
     s: Save CSIx, VISS and LDC outputs
    
     p: Print performance statistics
    
     x: Exit
    
     Enter Choice: 
    
    
     =========================
     Demo : Camera Demo
     =========================
    
     s: Save CSIx, VISS and LDC outputs
    
     p: Print performance statistics
    
     x: Exit
    
     Enter Choice: [MCU2_0]    572.939591 s: ==========================================================
    [MCU2_0]    572.939691 s:  Capture Status: Instance|0
    [MCU2_0]    572.939731 s: ==========================================================
    [MCU2_0]    572.939852 s:  overflowCount: 0
    [MCU2_0]    572.939894 s:  spuriousUdmaIntrCount: 0
    [MCU2_0]    572.939933 s:  frontFIFOOvflCount: 0
    [MCU2_0]    572.939970 s:  crcCount: 0
    [MCU2_0]    572.940005 s:  eccCount: 0
    [MCU2_0]    572.940039 s:  correctedEccCount: 0
    [MCU2_0]    572.940076 s:  dataIdErrorCount: 0
    [MCU2_0]    572.940111 s:  invalidAccessCount: 0
    [MCU2_0]    572.940147 s:  invalidSpCount: 0
    [MCU2_0]    572.940185 s:  strmFIFOOvflCount[0]: 0
    [MCU2_0]    572.940218 s:  Channel Num | Frame Queue Count | Frame De-queue Count | Frame Drop Count | Error Frame Count |
    [MCU2_0]    572.940298 s:            0 |              7610 |                 7608 |                0 |                 0 |
    [MCU2_0]    572.940375 s:            1 |              7610 |                 7608 |                0 |                 0 |
    [MCU2_0]    572.940454 s:            2 |              7610 |                 7608 |                0 |                 0 |
    [MCU2_0]    572.940532 s:            3 |              7610 |                 7608 |                0 |                 0 |
    

    Apart from the load, are you seeing a hang in your usecase?

    The program is running normally.