Even low-end x86 processors have multiple cores today, but writing multi-threaded software that takes advantage of them is labor-intensive and error-prone. Threading your code can take months to complete, and even if you manage to get it working right, your implementation might not reach the required performance.
vfThreaded-x86 changes all that. It is the only tool that gives you the precise information you need to make sure that your parallelized software will work correctly and have the highest performance on your multicore x86 machine.
Profiling and coverage
vfThreaded-x86 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 strategy.
Program visualization
vfThreaded-x86 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.
Data analysis
vfThreaded-x86 keeps track of all data movements internal to your code. Since performance 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. vfThreaded-x86 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? vfThreaded-x86 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 analyses these dependencies and parallelizes code for you, correctly handling the dependencies.
