Port Your Application to Special/New Hardware

Porting an application to different hardware.

We adapt your software to work efficiently on a new compute device. Whether you need to migrate a single component or your entire software from one architecture to another, from a CPU to a dedicated accelerator, GPU or DSP, we are here to help.

Where we can Help

Porting Software to Different Hardware

When making the effort of deploying your software to a new hardware, efficient usage of its capabilities is a key to success. This may require as small a modification as making use of certain instructions in core loops, or as extensive as a complete re-design and re-implementation of some or all your algorithms.

Together we identify the cost/benefit sweet-spot for each part of your software: push your new hardware to its limits in one algorithm, focus on future flexibility and adding appropriate abstraction layers to encapsulate differences in another.

Some specific ways in which we can help you are:

  • Determine which of your algorithms and data structures map well to the new hardware.
  • Rewrite or improve the existing implementations where necessary.
  • Devise guidelines for your developers on how to utilize the device most effectively.
  • Deal with intricate hardware details like vectorization, hardware-supported software pipelining, compiler oddities and much more.

Are you in the evaluation or design phase? Then check out our consulting services.

Tooling

Software development depends not only on building the target binary, but also on running it for unit tests, smoke tests, continuous integration, recompute or similar. If you build embedded software and want to run your tests on an x86 workstation, you need to support target-specific features (such as intrinsics) that only the embedded compiler supports.

Our experience covers the related tooling tasks in safety-critical automotive applications. Examples include the design, development, testing and deployment of:

  • Emulation libraries for target-specific features on x86, so your developers’ build-and-test cycle gets significantly more efficient.
  • Standard functions (like math library) that guarantee the same precision on x86 and your embedded target for bit-identical recompute.
  • Static analysis tooling that catches inefficient C/C++ constructs before they make it into your code base.