论文部分内容阅读
OpenCL is an open heterogeneous programming framework. Although OpenCL programs are func-tionally portable, they do not provide performance portability, so code transformation often plays an irreplaceable role. When adapting GPU-specifi c OpenCL keels to run on multi-core/many-core CPUs, coarsening the thread granularity is necessary and thus has been extensively used. However, locality conces exposed in GPU-specifi c OpenCL code are usually inherited without analysis, which may give side-effects on the CPU performance. Typi-cally, the use of OpenCL’s local memory on multi-core/many-core CPUs may lead to an opposite performance effect, because local-memory arrays no longer match well with the hardware and the associated synchronizations are costly. To solve this dilemma, we actively analyze the memory access pattes using array-access descriptors derived from GPU-specifi c keels, which can thus be adapted for CPUs by (1) removing all the unwanted local-memory arrays together with the obsolete barrier statements and (2) optimizing the coalesced keel code with vectorization and locality re-exploitation. Moreover, we have developed an automated tool chain that makes this transformation of GPU-specifi c OpenCL keels into a CPU-friendly form, which is accompanied with a scheduler that forms a new OpenCL runtime. Experiments show that the automated transformation can improve OpenCL keel performance on a multi-core CPU by an average factor of 3.24. Satisfactory performance improvements are also achieved on Intel’s many-integrated-core coprocessor. The resultant performance on both architectures is better than or comparable with the corresponding OpenMP performance.