SPRUIG3C January 2018 – August 2019 TDA4VM , TDA4VM-Q1
VCOP kernels are written in a domain-specific language subset of C++ called VCOP Kernel-C. A migration tool accepts kernels written in Kernel-C and outputs code that will be functionally equivalent, within limits, for C7x. This document provides details about the VCOP Kernel-C migration tool: its scope, capability, and limitations.
VCOP Kernel-C, compiled for native execution on EVE, is translated to EVE code by a tool called vcc-arp32. (VCC stands for VCOP C Compiler.) The vcc-arp32 tool generates kernel code for VCOP, as well as C code for ARP32 that sets up the execution environment for the kernel such that the kernel can be called as a C function. This code is then compiled by the ARP32 compiler for native execution on EVE.
For C7x the VCOP Kernel-C migration tool is called vcc7x. It translates a kernel written in VCOP Kernel-C into a C function that can be compiled for C7x and called in the same way as on ARP32.
Typically the kernel is called by dispatch code running on the ARP32 that manages buffers, transfers data, and synchronizes execution between VCOP and ARP32. The APIs that provide this functionality, which are part of the ARP32 RTS, are re-implemented for C7x so that dispatch code can be migrated with little or no modification.
The migration tool is supported by a library that implements specific VCOP operations on C7x. The library is called the VCOP Virtual Machine (VVM, or simply virtual machine) since it layers a VCOP-like interface onto the underlying C7x. VCC translates Kernel-C statements into calls to the virtual machine’s APIs. The VVM is implemented as a C++ library that uses template classes and inline functions to achieve abstraction and efficiency.
On the surface VCOP and C7x have many similarities in that both have SIMD capability in the form of vector-oriented datapaths. In addition, both are designed for iterative (rather than thread-level) operation using pipelined execution.
However, there are also many differences.
All these differences must be accounted for when translating code written for VCOP to C7x.