Making software work on modern complex multicore platforms can be an incredibly complicated task. vfEmbedded makes programming such a multicore SOC easy. The intuitive user interface lets you optimize your software for your target platform without changing a single line of code. Evaluate performance, memory bandwidth, and cache behavior for different parallelization strategies. Partition your code for multicore ARM or Intel processors. Perform hardware/software co-design of your next generation SOC or FPGA implementation in hours, not weeks.
Profiling and coverage
vfEmbedded performs an elaborate profiling step, keeping track of where the compute cycles go, counting cache hits/misses in each code section, memory bottlenecks and many program internals. Coverage analysis is performed to ensure your test set is complete. All this data collection provides the basis to explore and find your best parallelization and implementation strategy.
Program visualization
vfEmbedded provides an easy-to-navigate hierarchical visualization of your code execution. Simply double-click on the code sections that take up the most execution cycles to zoom in and parallelize. ARM or x86 architectures performance models are included and presents accurate results.
Architecture editing
vfEmbedded supports a wide variety of system-on-a-chip architectures and includes native support for ARM or x86 instruction set architectures. You can quickly model your target hardware architecture of choice. Simply drag-and-drop processor and accelerator building blocks into your design, and add connections between them and to memory.
Data analysis
vfEmbedded keeps track of all data movements internal to your code. Since performance of embedded systems is often highly I/O dependent, you can zoom in and examine I/O behavior. Profile your cache hit/miss rates and see their effects on performance. Find memory bottlenecks and remove them. When isolating a section of code, it’s important to know what data goes in, and what data goes out. vfEmbedded gives you all the data you need in an easy-to-understand manner.
Data dependencies
Data dependencies make parallelization hard. When two code sections are reading and updating the same data structure, how can you ensure the program is still correct after these sections have been placed into separate threads? vfEmbedded shows you such dependencies in a graphical way, cross-linking them to your code. Even streaming data communication patterns are automatically detected. The “Parallelize” function analyzes these dependencies and parallelizes code for you, correctly handling the dependencies.
