DSP Emulation AVX Vectorization

C6000 DSP Support Libraries

Example of C66x assembly.

Effective and efficient development requires the right tools. When developing code close to the hardware for embedded targets, this can be challenging. In one project our customer faced such challenges, notably these three:

  1. Recomputing target-specific code on workstations.
  2. Doing so efficiently.
  3. Ensuring bit-identity results between recompute and target device.

To this end, we developed two libraries for them. The first one was a transparent replacement for compiler intrinsics on the C6000™ DSP. Instead of generating a C6000 instruction, it emulated the computation using AVX2 to obtain bulk speed. This was necessary because the C6000 DSP has very intricate instructions like 2×2 matrix-vector multiplication with complex numbers. With our help, the customer was able to recompute the C6000 DSP code in real time on an x86-64 workstation.

The second library was a collection of standard mathematical functions for floating point numbers like sine, exponent, etc. It produced the bit-identical results on both, the C6000 DSP and x86-64, for any input, and was faster than the built-in vendor math library while being more precise.

Quick facts

Hardware:

  • SoC: Texas Instruments™ TMS320C6000™
  • DSP: Texas Instruments C6000

Operating System:

  • Texas Instruments RTOS

Compiler:

  • Texas Instruments CGT C6000
  • GNU Compiler Collection for x86-64 workstations

Summary of our results:

  • Development of intrinsics emulator of the C6000 compiler intrinsics on x86-64 for real-time recompute
  • Development of math library for bit-identical results on C6000 DSP and x86-64
All referenced product or service names and trademarks are the property of their respective owners.