SPRUIG3C January   2018  – August 2019 TDA4VM , TDA4VM-Q1

 

  1.   Read This First
    1.     About This Manual
    2.     Related Documentation
    3.     Trademarks
  2. 1Overview and Scope
    1. 1.1 Comparing VCOP and C7000
    2. 1.2 About this Document
      1. 1.2.1 Documentation Conventions
    3. 1.3 Output Format
    4. 1.4 Data Types
      1. 1.4.1 40-bit Incompatibilities
      2. 1.4.2 40-Bit Detection in Host Emulation Mode
    5. 1.5 SIMD Width
    6. 1.6 VCOP Virtual Machine
  3. 2Kernel API
    1. 2.1 Overview
    2. 2.2 Parameter Block
      1. 2.2.1 Tvals Structure
      2. 2.2.2 Pblock Manipulation
  4. 3Loop Control
    1. 3.1 Overview
    2. 3.2 Loop Control and Nested Loops
    3. 3.3 Repeat Loops
    4. 3.4 Compound Conditions
    5. 3.5 Early Exit
  5. 4Addressing
    1. 4.1 Overview
    2. 4.2 Streaming Engines
    3. 4.3 Streaming Address Generators
    4. 4.4 Indexed Addressing
    5. 4.5 Circular Addressing
  6. 5Operations
    1. 5.1 Load Operations
    2. 5.2 Store Operations
      1. 5.2.1 Predicated Stores
      2. 5.2.2 Scatter and Transposing Stores
      3. 5.2.3 Optimization of OFFSET_NP1-Based Transpose
      4. 5.2.4 Rounding Stores
      5. 5.2.5 Saturating Stores
    3. 5.3 Arithmetic Operations
      1. 5.3.1 Vector Compares
      2. 5.3.2 Multiplication with Rounding, Truncation, or Left Shift
    4. 5.4 Lookup and Histogram Table Operations
      1. 5.4.1 Determination of Table Size
      2. 5.4.2 Table Configuration
      3. 5.4.3 Copy-in Operation
      4. 5.4.4 Copy-out Operation
      5. 5.4.5 Index Adjustment from Non-zero Agen
      6. 5.4.6 Lookup Operation
      7. 5.4.7 Histogram Update Operation
      8. 5.4.8 16-Way Lookup and Histogram
  7. 6Performance
    1. 6.1 Overview
    2. 6.2 Compiler Requirements
    3. 6.3 Automatic Performance Profiling
    4. 6.4 Performance Options
  8.   A Warnings and Notes
    1.     A.1 Compatibility Warnings
    2.     A.2 Efficiency Warnings

Overview

A VCOP kernel written in VCOP Kernel-C is specified as C-callable function with arguments. The function body consists of one or more VCOP loop commands, table lookup commands, or histogram commands, collectively known as vloop commands.

On EVE, the kernel is invoked via a C-callable API consisting of five functions, which are generated by VCC. For a kernel named kernel written in VCOP Kernel-C, the API is:

  • unsigned int kernel_init (<args>, unsigned short pblock[])
    Evaluate kernel-invariant expressions, including kernel arguments, into pblock[]
  • unsigned int kernel_param_count (void)
    Return the size of the parameter block
  • void kernel_vloops (unsigned short pblock[])
    Execute the kernel loops using parameters from pblock[]. This function contains the actual VCOP code.
  • void kernel (<args>)
    Call kernel_init() and kernel_vloops() using a statically allocated parameter block
  • void kernel_custom ()
    Call kernel_init() and kernel_vloops() using a passed-in parameter block

The API gives the application varying levels of control over the kernel execution. A naive application can simply call the kernel as kernel(<args>). A more sophisticated application that wants to control parameter buffer allocation and leverage double-buffering would call the lower level functions directly.

The migration tool generates these same five functions, as C++ functions for C7x. Therefore the functional interface to the kernel remains the same.

Figure 2-1 illustrates the kernel API in its original form for EVE and as translated for C7x.

GUID-DDAF479A-A169-450D-B8E4-FB4AE5343AC9-low.pngFigure 2-1 Kernel API