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

VCOP Virtual Machine

The VCOP virtual machine (VVM, or simply virtual machine) is a C++ library that implements VCOP operations on C7x. The C7x source code generated by the migration tool contains calls to the virtual machine. The virtual machine is intended to be an implementation mechanism; the programmer does not need to know anything about it or even be aware of its existence. However, it is also not intended to be a “black box.” Programmers may find it useful to understand at least the API to the virtual machine so they can understand the code from the migration tool. Further, programmers may wish to consult the virtual machine to see specifically how VCOP operations are implemented for C7x.

The virtual machine consists entirely of inline functions and C++ classes. None of the classes are actually instantiated into objects; all the member functions are static inline, and the variables static. There is no object component of the virtual machine to include at link time; it consists entirely of header files.

The classes and functions use C++ templates to abstract low-level details between similar constructs. Template parameters specify things like data type, distribution mode, addressing mode, and SIMD factor; these items are determined by the migration tool and therefore known at compile time. The library uses template specialization to customize the implementation of a given operation for specific combinations of the template parameters.

The implementation uses the C7x low-level programming model, consisting of native vector (extended OpenCL) types and C7x intrinsics from <c7x.h>. That header file cross-references the intrinsic names with the actual C7x mnemonics; in this way the programmer can see what instructions are actually being generated.

A detailed description of the virtual machine is beyond the scope of this document. However, the core components of the VVM are as follows:

  • vcop_arith.h – Defines the VCOP arithmetic operations.
  • vcop.h – Contains core definitions for the VVM. (VCOP types, macros, etc.)
  • vcop_lht.h – Defines operations that use the C7x lookup table. ( _LOOKUP, _HIST, and some forms of OFFSET_NP1 and PDDA.)
  • vcop_load.h – Defines VCOP load operations, with the exception of forms in vcop_lht.h.
  • vcop_store.h – Defines VCOP store operations, with the exception of forms in vcop_lht.h.
  • vcop_vm.h – Central header. Contains shared templates used by other headers. Includes other core headers.