by Richard Gerber, Aart J.C. Bik, Kevin B. Smith, and Xinmin Tian, Intel Corporation
Automatic vectorization of code can fail for many reasons. Due to the fact that the compiler often assumes worst case scenarios, a simple fix is often all that is necessary to ensure that vectorization can be completed. By using diagnostics tools integrated into many compilers, such as the Microsoft Visual C++ environment, finding the offending blocks of code and implementing a solution is simplified.
Vectorization diagnostics are useful to determine where automatic vectorization has been successful and where it has failed. Combined with information obtained with a performance analyzer, you can use these diagnostics to do either of the following:
• Apply code restructuring or insert compiler hints to make important hot spots that remain sequential more amenable to vectorization
• Disable the vectorization of code fragments where the automatic conversion into SIMD instructions adversely affects performance.
Full Story [pdf]