TDA4VEN-Q1: TIOVX node example for using GPU with OpenCL kernels

Part Number: TDA4VEN-Q1

Hi TI Team,

  1. Are there any sample apps to use GPU as a TIOVX node with OpenCL kernels ?
  2. I see some Srv related nodes at https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/07_01_00_11/exports/docs/vision_apps/docs/user_guide/group__group__vision__apps__kernels__srv.html
  3. Are these srv nodes specific to TI's surround view implementation ? or theya re generic kernels that we can use if needed ?
  4. Are these srv nodes based on OpenGL or OpenCL ? 
  5. Where can I find the source code for these nodes, I can't find in ti-processor-sdk-rtos-j722s-evm-11_02_00_10/tiovx/ directory

Regards

Mahipal

  • Kindly answer each question separately and provide your responses in a numbered format corresponding to each question. This will make it easier to track and understand your answers. Thank you.

  • Hi Mahipal, 

    Apologies for the delay, I was checking the vision-apps sdk and srv source to confirm.

    1. No. There is no standalone TIOVX node example demonstrating generic GPU compute via OpenCL kernels.

    2. Correct, those are the SRV (Surround View) kernels confirmed at  vision_apps/kernels/srv/ .

    3. SRV-specific, not generic. Source shows specific surround-view logic: LDC (lens distortion correction), bowl-mesh/LUT generation, calibration matrix math ( srv_lut.cpp ,  calmat.cxx ,  ldc_lut.cxx ,  srv_bowl_lut_gen_applib ).  The node's I/O configuration, internals, and shaders are all hardwired to surround-view: fixed input shape ( vx_object_array  of camera images + LUT arrays), a fixed 3D bowl-mesh + car-model geometry ( car.cpp/h ,  box.cpp ,  textures.cpp  load specific  .bmp /raw car/bowl textures), and blend LUTs computed only for that camera layout. There's no generic buffer-in/buffer-out or compute-shader abstraction to repurpose it for generic usage.

    4. OpenGL ES (OGLES2), not OpenCL. The GPU target folder is kernels/srv/gpu/3dsrv/Tools/OGLES2/  with files like  PVRTgles2Ext.cpp ,  PVRTShader.cpp , and  vx_gl_srv_target.c  /  tivx_kernel_gl_srv.h . No OpenCL API usage exists anywhere in the SRV node. OpenCL and OpenGL ES 3.2 is supported.

    5. It's not under tiovx/. That directory holds only the core OpenVX framework. The SRV node source is under  vision_apps/kernels/srv/.

    Thank you,
    Sarabesh S.

  • Hi Sarabesh,

    We use OpenCL for surround vew applicaton implementaton, so we call clEnqueueNDRangeKernel() functon for many OpenCL kernels sequencially every 33 ms. So does this code now becomes part of a new node which we may call GPU node ? But the actual execution of those calls happens on the GPU, isn't this node basically getting executed on A53 though the OpenCL calls get executed on GPU?, is my understanding correct, if so why do we call a GPU node ? 


    In TI's surround view GPU kernel also, in tivxGlSrvProcess() functon, basically it is calling all the OpenGL APIs from Applicatioon core, so what advantage do we really have by including it as part of the TOVX Graph ?
     

    Regards

    Mahipal

  • And another question regarding the shared memory, the input buffer pointer to the tiovx gpu node, can be used by OpenCL kernels inside GPU without the need to copy the data to opencl buffer , is that correct understanding?