We are excited to announce a new public release of Parallelware Analyzer, the first static code analyzer specializing in performance. This version 0.18 features a new user experience designed to help you boost the performance of your code.
We have redesigned the entry point of Parallelware Analyzer so that you get, right from the first invocation, the most relevant information to enhance the performance of your code using vectorization, multi-threaded execution and offloading to accelerators, and detect any issues in it. Now, following software performance optimization common practices, it is suggested that you start by narrowing the analysis to your hotspots. However, you can still opt to perform the analysis over a whole code base if you would like to.
You will obtain actionable insights through optimization reports that help ensure best practices to speedup the code through parallel computing in vector, multicore and accelerator processors. A structured report displays the actionable items (defects, recommendations, remarks, opportunities for parallelization, …) detected at the function level and at the loop level, followed by a code coverage summary and a performance metrics summary. You can control the amount of detail to be displayed and you will get clear suggestions on what your next actions should be, no matter whether they correspond to code changes or further invocations of Parallelware Analyzer to dig into more information.
As in every release, we have improved our underlying Parallelware technology (more about how it works internally). Note that static code analysis is hard and sometimes we fail to analyze parts of your code. To address this, we have worked hard to improve the information available when this happens, detailing what the problem is and helping you get around it.
Last but not least, we have added 8 new recommendations mostly focused on vectorization, to extend the capabilities introduced in our previous release:
- PWR018: Avoid recursive function calls within a loop.
- PWR019: Consider interchanging loops to favor vectorization by maximizing inner loop’s trip count.
- PWR020: Consider loop fission to enable vectorization.
- PWR021: Temporary computation can be extracted to a vectorizable loop.
- PWR022: Move invariant conditional out of the loop to facilitate vectorization.
- PWR023: Add restrict for pointer function parameters.
- PWR024: Loop can be rewritten in OpenMP canonical form.
- PWR025: Annotate pure function for OpenMP SIMD.
Building performance into the code from day one with Codee