In this paper, we explain the steps we have taken to port a large, industry-grade computational fluid dynamics application to the Intel® Xeon Phi™coprocessor using the C/C++ Array Notation extensions of Intel® Cilk™Plus. An essential part of the performance refactoring process for the Xeon Phi coprocessor is to achieve high-quality SIMD-vectorization. Even though there are other ways to vectorize code, the Array Notation extensions has proven to work best for our application. We have encapsulated the Array Notation extension syntax in a C++ wrapper class to drastically reduce the refactoring effort. In addition the architecture independency of Array Notation extensions minimizes porting and tuning efforts further. In this paper, we study how our approach helps the compiler to generate vectorized code. Derived from that study, we summarize our key learnings and findings as well as current limitations. Finally, we present a performance evaluation of the ported computational fluid dynamics application by using the introduced C++ wrapper class and differentiate our solution to other related solutions.
['Olaf Krzikalla', 'Georg Zitzlsberger']
Code vectorization using Intel Array Notation