Most modern processes, ranging from high performance desktop processors to power efficient mobile processors comes equipped with a SIMD vector unit. Further, with upcoming processors and GPUs the length of the vector registers continue to widen. Exploiting the vector units is no longer an option for programs aiming for high performance and efficiency. A lot of existing code bases are not written to exploit vectorization. Although modern compilers have good auto-vectorizers, static analysis is inherently limiting and does not uncover full vectorization potential of programs. Therefore a tool which identifies vectorization potential of existing programs is very useful.
In this thesis, we describe an approach to identify vectorization potential of programs by analyzing the dynamic data dependency graph built using the execution trace of the program. By observing the runtime dependencies of the program and allowing any dependency preserving reordering, we uncover vectorization opportunities missed by compile time analyses. The description of the implementation details of the vectorization analysis tool is provided and then, vectorization metrics for a few benchmarks are measured and presented.