2016 · 12 citations · 27 references
ComputingComputer EngineeringComputer ScienceCompilersParallel ComputingProgramming LanguagesControl-flow AnalysisData ParallelismData-flow AnalysisKernel DesignKernel ProgrammingAbstractionControl Flow ControlDivergence AnalysisEvaluation BenchmarksKernel OptimizationOpencl ProgrammingSimd ExecutionVectorization
The performance of OpenCL programs suffers from memory and control flow divergence. Therefore, OpenCL compilers employ static analyses to identify non-divergent control flow and memory accesses in order to produce faster code. However, divergence is often input-dependent, hence can be observed for some, but not all inputs. In these cases, vectorizing compilers have to generate slow code because divergence can occur at run time. In this paper, we use a polyhedral abstraction to partition the input space of an OpenCL kernel. For each partition, divergence analysis produces more precise results i.e., it can classify more code parts as non-divergent. Consequently, specializing the kernel for the input space partitions allows for generating better SIMD code because of less divergence. We implemented our technique in an OpenCL driver for the AVX instruction set and evaluate it on a range of OpenCL benchmarks. We observe speed ups of up to 9x for irregular kernels over a state-of-the-art vectorizing OpenCL driver.
27
Rodinia: A benchmark suite for heterogeneous computing
Shuai Che, Michael Boyer, Jiayuan Meng et al. · 2009 · 3K citations
A practical automatic polyhedral parallelizer and locality optimizer
Uday Bondhugula, Albert Hartono, J. Ramanujam et al. · 2008 · 883 citations
Jason Ansel, Cy Chan, Yee Lok Wong et al. · 2009 · 360 citations