# An Evaluation of Directive-Based Parallelization on the GPU Using a Parboil Benchmark
## 4 Parboil Benchmark Suite  
The Parboil benchmark suite consists of eleven throughput-oriented mini-applications useful for studying GPUs and similar computing architectures [14]. Benchmarks are selected from several key scientific and commercial fields in high-performance computing, such as fluid dynamics, molecular simulation, image processing and medical imaging, linear algebra, graph processing, etc. Table 1 provides the overview of benchmark suite mini-apps in the Parboil suite with short descriptions based on [14].  
Parboil provides versions of the code with varying levels of optimizations. The baseline, OpenMP, OpenCL, and CUDA implementations are available for all mini-apps, while for some of them, even more optimized versions for particular architectures are given. This benchmark architecture enables the programmers and compiler developers to evaluate source and compiler optimizations on different architectures. Those are followed by a comprehensive testing framework written in Python, which eases the evaluation of parallelized code and their comparison both for correctness and performance. Each mini-app is accompanied by datasets used for testing which consists of inputs and expected (golden) outputs. Our choice of the Parboil benchmark was mostly based on the fact that it represents a comprehensive framework for developing, testing, and comparing the results of parallel applications using different programming models.  
Breadth-First Search (BFS) is a commonly used graph traversal algorithm used in many graph-related problems. It is interesting because of the irregular data access patterns. CUTCP computes a short-range component of the electrostatic potential field produced by charged atoms distributed throughout a volume [42]. The histogram application represents a classic operation in which the number of occurrences of output values are calculated based on the input data set. LBM is a widely used method of solving the systems of partial differential equations [6]. MRI-Gridding implements one of the preprocessing steps in magnetic resonance imaging. Each input sample is interpolated onto the grid points using Kaiser-Bessel function. MRI-Q represents one of the phases in MRI image reconstruction. The Sum of Absolute Differences (SAD) is a method used in a full-search motion estimation algorithm in the H.264/AVC encoder.  
SGEMM is a frequently used operation in numerical linear algebra codes and a very-well studied example in the HPC domain. It is part of the BLAS (Basic Linear Algebra Subprograms) library [43] and its numerous descendants. Sparse matrix-vector multiplication (SpMV) is used in many iterative solvers. It shows off both regular and irregular data access patterns. The Stencil mini-app represents a partial differential equations solver based on an iterative Jacobi solver on a 3D-structured grid. The Two-Point Angular Correlation Function (TPACF) is a measure of the distribution of massive bodies in space. Essentially, it represents a version of the histogram application, as it calculates the histogram of angular distances between all pairs of given bodies.