SMT-Based Context-Bounded Model Checking for ...

1 downloads 0 Views 181KB Size Report
We present ESBMC-GPU tool, an extension to the Efficient SMT-Based Context-Bounded Model Checker. (ESBMC), which is aimed at verifying Graphics ...
CONCURRENCY AND COMPUTATION: PRACTICE AND EXPERIENCE Concurrency Computat.: Pract. Exper. 2016; 00:1–25 Published online in Wiley InterScience (www.interscience.wiley.com). DOI: 10.1002/cpe

SMT-Based Context-Bounded Model Checking for CUDA Programs P. A. Pereira1 , H. F. Albuquerque1 , I. S. da Silva1 , H. M. Marques1 , F. R. Monteiro1 , R. dos S. Ferreira2 , and L. C. Cordeiro1⇤ 1 Faculty

of Technology, Federal University of Amazonas, Amazonas, Brazil of Informatics, Federal University of Vic¸osa, Minas Gerais, Brazil

2 Department

SUMMARY We present ESBMC-GPU tool, an extension to the Efficient SMT-Based Context-Bounded Model Checker (ESBMC), which is aimed at verifying Graphics Processing Unit (GPU) programs written for the Compute Unified Device Architecture (CUDA) platform. ESBMC-GPU uses an operational model, i.e., an abstract representation of the standard CUDA libraries, which conservatively approximates their semantics, in order to verify CUDA-based programs. It then explicitly explores the possible interleavings (up to the given context bound), while treats each interleaving itself symbolically. Additionally, ESBMC-GPU employs the monotonic partial order reduction and the two-thread analysis to prune the state space exploration. Experimental results show that ESBMC-GPU can successfully verify 82% of all benchmarks, while keeping lower rates of false results. Going further than previous attempts, ESBMC-GPU is able to detect more properties violations than other existing GPU verifiers due to its ability to verify errors of the program execution flow and to detect array out-of-bounds and data race violations. Copyright c 2016 John Wiley & Sons, Ltd. Received . . .

KEY WORDS: model checking; GPU; CUDA programs; formal verification;

1. INTRODUCTION Compute Unified Device Architecture (CUDA) is a parallel computing platform and Application Programming Interface (API) model created by NVIDIA [1], which extends C/C++ and Fortran, in order to create a computational model that aims to harness the computational power of Graphical Processing Units (GPUs) [2]. As in other programming languages, errors in CUDA programs eventually occur, in particular, due to array out-of-bounds, arithmetic overflow, and division by zero violations. Additionally, since CUDA is a platform that deals with parallel programming, specific concurrency errors related to data race and barrier divergence can be exposed due to the non-deterministic behaviour of the threads interleavings [3]. ⇤ Correspondence

to: 3000 Av. Rodrigo Ot´avio, 69077–000, Electronic and Information Research Center at Federal University of Amazonas, Manaus, Amazonas, Brazil. E-mail: [email protected] Copyright c 2016 John Wiley & Sons, Ltd. Prepared using cpeauth.cls [Version: 2010/05/13 v3.00]