{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T04:27:24Z","timestamp":1750220844615,"version":"3.41.0"},"reference-count":65,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA","license":[{"start":{"date-parts":[[2019,10,10]],"date-time":"2019-10-10T00:00:00Z","timestamp":1570665600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"funder":[{"DOI":"10.13039\/100000001","name":"National Science Foundation","doi-asserted-by":"publisher","award":["CCF-1652517, CCF-1704790, and CNS-1846169"],"award-info":[{"award-number":["CCF-1652517, CCF-1704790, and CNS-1846169"]}],"id":[{"id":"10.13039\/100000001","id-type":"DOI","asserted-by":"publisher"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2019,10,10]]},"abstract":"<jats:p>We present the design and implementation of GVM, the first system for executing Java bytecode entirely on GPUs. GVM is ideal for applications that execute a large number of short-living tasks, which share a significant fraction of their codebase and have similar execution time. GVM uses novel algorithms, scheduling, and data layout techniques to adapt to the massively parallel programming and execution model of GPUs. We apply GVM to generate and execute tests for Java projects. First, we implement a sequence-based test generation on top of GVM and design novel algorithms to avoid redundant test sequences. Second, we use GVM to execute randomly generated test cases. We evaluate GVM by comparing it with two existing Java bytecode interpreters (Oracle JVM and Java Pathfinder), as well as with the Oracle JVM with just-in-time (JIT) compiler, which has been engineered and optimized for over twenty years. Our evaluation shows that sequence-based test generation on GVM outperforms both Java Pathfinder and Oracle JVM interpreter. Additionally, our results show that GVM performs as well as running our parallel sequence-based test generation algorithm using JVM with JIT with many CPU threads. Furthermore, our evaluation on several classes from open-source projects shows that executing randomly generated tests on GVM outperforms sequential execution on JVM interpreter and JVM with JIT.<\/jats:p>","DOI":"10.1145\/3360603","type":"journal-article","created":{"date-parts":[[2019,10,11]],"date-time":"2019-10-11T14:53:33Z","timestamp":1570805613000},"page":"1-28","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":2,"title":["Design, implementation, and application of GPU-based Java bytecode interpreters"],"prefix":"10.1145","volume":"3","author":[{"given":"Ahmet","family":"Celik","sequence":"first","affiliation":[{"name":"University of Texas at Austin, USA"}]},{"given":"Pengyu","family":"Nie","sequence":"additional","affiliation":[{"name":"University of Texas at Austin, USA"}]},{"given":"Christopher J.","family":"Rossbach","sequence":"additional","affiliation":[{"name":"University of Texas at Austin, USA \/ VMware, USA"}]},{"given":"Milos","family":"Gligoric","sequence":"additional","affiliation":[{"name":"University of Texas at Austin, USA"}]}],"member":"320","published-online":{"date-parts":[[2019,10,10]]},"reference":[{"key":"e_1_2_1_1_1","first-page":"4","article-title":"Boosting the Priority of Garbage: Scheduling Collection on Heterogeneous Multicore Processors","volume":"13","author":"Akram Shoaib","year":"2016","journal-title":"Transactions on Architecture and Code Optimization"},{"key":"e_1_2_1_2_1","unstructured":"Amazon. 2018. Amazon EC2 Elastic GPUs. https:\/\/aws.amazon.com\/ec2\/elastic-gpus\/ .  Amazon. 2018. Amazon EC2 Elastic GPUs. https:\/\/aws.amazon.com\/ec2\/elastic-gpus\/ ."},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-71209-1_12"},{"volume-title":"Mosaic: A GPU Memory Manager with Application-transparent Support for Multiple Page Sizes. In International Symposium on Microarchitecture . 136\u2013150","year":"2017","author":"Ausavarungnirun Rachata","key":"e_1_2_1_4_1"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/3173162.3173169"},{"key":"e_1_2_1_6_1","unstructured":"Azure. 2018. Azure Windows VM sizes - GPU. https:\/\/docs.microsoft.com\/en-us\/azure\/virtual-machines\/windows\/sizes-gpu .  Azure. 2018. Azure Windows VM sizes - GPU. https:\/\/docs.microsoft.com\/en-us\/azure\/virtual-machines\/windows\/sizes-gpu ."},{"volume-title":"Pencil: A Platform-Neutral Compute Intermediate Language for Accelerator Programming. In International Conference on Parallel Architecture and Compilation. 138\u2013149","year":"2015","author":"Baghdadi Riyadh","key":"e_1_2_1_7_1"},{"key":"e_1_2_1_8_1","first-page":"1","article-title":"Legion: Expressing Locality and Independence with Logical Regions. In International Conference on High Performance Computing","volume":"66","author":"Bauer Michael","year":"2012","journal-title":"Networking, Storage and Analysis."},{"volume-title":"Symposium on Applied Computing . 1315\u20131320","author":"Bispo Jo\u00e3o","key":"e_1_2_1_9_1"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/1141911.1141947"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1145\/2676726.2676982"},{"volume-title":"International Conference on Parallel Architectures and Compilation Techniques. 89\u2013100","author":"Brown K.J.","key":"e_1_2_1_12_1"},{"volume-title":"Copperhead: Compiling an Embedded Data Parallel Language. Technical Report UCB\/EECS-2010-124. EECS Department","year":"2010","author":"Catanzaro Bryan","key":"e_1_2_1_13_1"},{"key":"e_1_2_1_14_1","first-page":"1","article-title":"Bounded Exhaustive Test-Input Generation on GPUs. In Conference on Object-Oriented Programming","volume":"94","author":"Celik Ahmet","year":"2017","journal-title":"Systems, Languages, and Applications."},{"volume-title":"Accelerating Haskell Array Codes with Multicore GPUs. In Workshop on Declarative Aspects of Multicore Programming. 3\u201314","year":"2011","author":"Chakravarty Manuel MT","key":"e_1_2_1_15_1"},{"key":"e_1_2_1_16_1","first-page":"1","article-title":"Liszt: A Domain Specific Language for Building Portable Mesh-based PDE Solvers. In International Conference for High Performance Computing","volume":"9","author":"DeVito Zachary","year":"2011","journal-title":"Networking, Storage and Analysis ."},{"volume-title":"Conference on Programming Language Design and Implementation . 1\u201312","author":"Dubach Christophe","key":"e_1_2_1_17_1"},{"volume-title":"An Executable Formal Semantics of C with Applications. In Symposium on Principles of Programming Languages . 533\u2013544","year":"2012","author":"Ellison Chucky","key":"e_1_2_1_18_1"},{"volume-title":"Leo: A Profile-Driven Dynamic Optimization Framework for GPU Applications. In International Conference on Timely Results in Operating Systems. 5\u20135.","year":"2014","author":"Farooqui Naila","key":"e_1_2_1_19_1"},{"volume-title":"Model Checking for Programming Languages Using VeriSoft. In Symposium on Principles of Programming Languages . 174\u2013186","year":"1997","author":"Godefroid Patrice","key":"e_1_2_1_20_1"},{"key":"e_1_2_1_21_1","unstructured":"Google. 2018. Graphics Processing Unit (GPU): Leverage GPUs on Google Cloud for Machine Learning and Scientific Computing. https:\/\/cloud.google.com\/gpu\/ .  Google. 2018. Graphics Processing Unit (GPU): Leverage GPUs on Google Cloud for Machine Learning and Scientific Computing. https:\/\/cloud.google.com\/gpu\/ ."},{"key":"e_1_2_1_22_1","unstructured":"Java GPU. 2019. Java GPU Code Archive. https:\/\/code.google.com\/archive\/p\/java-gpu .  Java GPU. 2019. Java GPU Code Archive. https:\/\/code.google.com\/archive\/p\/java-gpu ."},{"volume-title":"Accelerated Massive Parallelism with Microsoft Visual C++","author":"Gregory Kate","key":"e_1_2_1_23_1"},{"key":"e_1_2_1_24_1","doi-asserted-by":"crossref","unstructured":"Akihiro Hayashi Max Grossman Jisheng Zhao Jun Shirako and Vivek Sarkar. 2013. Accelerating Habanero-Java Programs with OpenCL Generation. In International Conference on Principles and Practices of Programming on the Java Platform: Virtual Machines Languages and Tools . 124\u2013134.  Akihiro Hayashi Max Grossman Jisheng Zhao Jun Shirako and Vivek Sarkar. 2013. Accelerating Habanero-Java Programs with OpenCL Generation. In International Conference on Principles and Practices of Programming on the Java Platform: Virtual Machines Languages and Tools . 124\u2013134.","DOI":"10.1145\/2500828.2500840"},{"volume-title":"Flextream: Adaptive Compilation of Streaming Applications for Heterogeneous Architectures. In International Conference on Parallel Architectures and Compilation Techniques . 214\u2013223","author":"Hormati Amir","key":"e_1_2_1_25_1"},{"key":"e_1_2_1_26_1","unstructured":"Java Pathfinder. 2019. Java Pathfinder Home Page. https:\/\/github.com\/javapathfinder\/jpf-core .  Java Pathfinder. 2019. Java Pathfinder Home Page. https:\/\/github.com\/javapathfinder\/jpf-core ."},{"key":"e_1_2_1_27_1","unstructured":"JCuda. 2018. Java Bindings for CUDA. https:\/\/www.jcuda.org\/jcuda\/JCuda.html .  JCuda. 2018. Java Bindings for CUDA. https:\/\/www.jcuda.org\/jcuda\/JCuda.html ."},{"key":"e_1_2_1_28_1","unstructured":"Jikes RVM. 2019. Jikes RVM Home Page. https:\/\/www.jikesrvm.org .  Jikes RVM. 2019. Jikes RVM Home Page. https:\/\/www.jikesrvm.org ."},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1109\/IISWC.2009.5306801"},{"key":"e_1_2_1_30_1","unstructured":"Khronos. 2019. OpenCL Overview. https:\/\/www.khronos.org\/opencl .  Khronos. 2019. OpenCL Overview. https:\/\/www.khronos.org\/opencl ."},{"key":"e_1_2_1_31_1","unstructured":"Chang Hwan Peter Kim Darko Marinov Sarfraz Khurshid Don Batory Sabrina Souto Paulo Barros and Marcelo d\u2019Amorim. 2013. SPLat: Lightweight Dynamic Analysis for Reducing Combinatorics in Testing Configurable Systems. 257\u2013267.  Chang Hwan Peter Kim Darko Marinov Sarfraz Khurshid Don Batory Sabrina Souto Paulo Barros and Marcelo d\u2019Amorim. 2013. SPLat: Lightweight Dynamic Analysis for Reducing Combinatorics in Testing Configurable Systems. 257\u2013267."},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/360248.360252"},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.parco.2011.09.001"},{"volume-title":"Programming with Enumerable Sets of Structures. In Conference on Object-Oriented Programming, Systems, Languages, and Applications . 37\u201356","year":"2015","author":"Kuraj Ivan","key":"e_1_2_1_34_1"},{"volume-title":"CPU Myth: An Evaluation of Throughput Computing on CPU and GPU. In International Symposium on Computer Architecuture . 451\u2013460","year":"2010","author":"Lee Victor W.","key":"e_1_2_1_35_1"},{"key":"e_1_2_1_36_1","doi-asserted-by":"publisher","DOI":"10.1145\/2258996.2259002"},{"volume-title":"Iterative Context Bounding for Systematic Testing of Multithreaded Programs. In Conference on Programming Language Design and Implementation. 446\u2013455","year":"2007","author":"Musuvathi Madanlal","key":"e_1_2_1_37_1"},{"volume-title":"Exploring Variability-aware Execution for Testing Plugin-based Web Applications. In International Conference on Software Engineering. 907\u2013918","author":"Nguyen Hung Viet","key":"e_1_2_1_38_1"},{"key":"e_1_2_1_39_1","unstructured":"NVIDIA. 2019. CUDA Zone. https:\/\/developer.nvidia.com\/cuda-zone .  NVIDIA. 2019. CUDA Zone. https:\/\/developer.nvidia.com\/cuda-zone ."},{"key":"e_1_2_1_40_1","unstructured":"Oracle. 2019a. Java SE at a Glance. https:\/\/www.oracle.com\/technetwork\/java\/javase\/overview\/index.html .  Oracle. 2019a. Java SE at a Glance. https:\/\/www.oracle.com\/technetwork\/java\/javase\/overview\/index.html ."},{"key":"e_1_2_1_41_1","unstructured":"Oracle. 2019b. JEP 318: Epsilon: A No-Op Garbage Collector. https:\/\/openjdk.java.net\/jeps\/318 .  Oracle. 2019b. JEP 318: Epsilon: A No-Op Garbage Collector. https:\/\/openjdk.java.net\/jeps\/318 ."},{"key":"e_1_2_1_42_1","unstructured":"Oracle. 2019c. JNI APIs and Developer Guides. https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/jni .  Oracle. 2019c. JNI APIs and Developer Guides. https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/jni ."},{"key":"e_1_2_1_43_1","unstructured":"Oracle. 2019d. OpenJDK Project Sumatra. http:\/\/openjdk.java.net\/projects\/sumatra .  Oracle. 2019d. OpenJDK Project Sumatra. http:\/\/openjdk.java.net\/projects\/sumatra ."},{"volume-title":"Feedback-Directed Random Test Generation. In International Conference on Software Engineering. 75\u201384","year":"2007","author":"Pacheco Carlos","key":"e_1_2_1_44_1"},{"key":"e_1_2_1_45_1","doi-asserted-by":"publisher","DOI":"10.14778\/3213880.3213890"},{"key":"e_1_2_1_46_1","doi-asserted-by":"publisher","DOI":"10.1109\/HPCA.2014.6835965"},{"volume-title":"Fully Automatic and Precise Detection of Thread Safety Violations. In Conference on Programming Language Design and Implementation . 521\u2013530","author":"Pradel Michael","key":"e_1_2_1_47_1"},{"volume-title":"Automatic Compilation of MATLAB Programs for Synergistic Execution on Heterogeneous Processors. In Conference on Programming Language Design and Implementation. 152\u2013163","author":"Prasad Ashwin","key":"e_1_2_1_48_1"},{"volume-title":"International Conference on High Performance Computing and Communication . 375\u2013380","author":"Pratt-Szeliga Philip C.","key":"e_1_2_1_49_1"},{"key":"e_1_2_1_50_1","doi-asserted-by":"publisher","DOI":"10.1145\/3150211"},{"key":"e_1_2_1_51_1","doi-asserted-by":"publisher","DOI":"10.1145\/2043556.2043579"},{"key":"e_1_2_1_52_1","doi-asserted-by":"publisher","DOI":"10.1145\/2517349.2522715"},{"key":"e_1_2_1_53_1","doi-asserted-by":"crossref","unstructured":"Rohan Sharma Milos Gligoric Andrea Arcuri Gordon Fraser and Darko Marinov. 2011. Testing Container Classes: Random or Systematic? 262\u2013277.  Rohan Sharma Milos Gligoric Andrea Arcuri Gordon Fraser and Darko Marinov. 2011. Testing Container Classes: Random or Systematic? 262\u2013277.","DOI":"10.1007\/978-3-642-19811-3_19"},{"volume-title":"StreamIt: A Language for Streaming Applications. In International Conference on Compiler Construction . 179\u2013196","author":"Thies William","key":"e_1_2_1_54_1"},{"volume-title":"LLVM Compiler Implementation for Explicit Parallelization and SIMD Vectorization. In Workshop on the LLVM Compiler Infrastructure in HPC . 4.","year":"2017","author":"Tian Xinmin","key":"e_1_2_1_55_1"},{"volume-title":"Observations and Opportunities in Architecting Shared Virtual Memory for Heterogeneous Systems. In International Symposium on Performance Analysis of Systems and Software . 161\u2013171","year":"2016","author":"Vesely Jan","key":"e_1_2_1_56_1"},{"key":"e_1_2_1_57_1","doi-asserted-by":"publisher","DOI":"10.1023\/A:1022920129859"},{"volume-title":"Test Input Generation for Java Containers Using State Matching. In International Symposium on Software Testing and Analysis. 37\u201348","year":"2006","author":"Visser Willem","key":"e_1_2_1_58_1"},{"key":"e_1_2_1_59_1","unstructured":"Mikhail Vorontsov. 2019. Java Performance Tuning Guide. http:\/\/java-performance.info\/over-32g-heap-java .  Mikhail Vorontsov. 2019. Java Performance Tuning Guide. http:\/\/java-performance.info\/over-32g-heap-java ."},{"key":"e_1_2_1_60_1","doi-asserted-by":"publisher","DOI":"10.1145\/1346281.1346304"},{"volume-title":"GPUexplore: Many-core On-the-fly State Space Exploration Using GPUs. In International Conference on Tools and Algorithms for the Construction and Analysis of Systems . 233\u2013247","year":"2014","author":"Wijs Anton","key":"e_1_2_1_61_1"},{"key":"e_1_2_1_62_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-319-48989-6_42"},{"volume-title":"JCUDA: A Programmer-Friendly Interface for Accelerating Java Programs with CUDA. In European Conference on Parallel Processing. 887\u2013899","year":"2009","author":"Yan Yonghong","key":"e_1_2_1_63_1"},{"volume-title":"Compiler-assisted Test Acceleration on GPUs for Embedded Software. In International Symposium on Software Testing and Analysis. 35\u201345","year":"2017","author":"Yaneva Vanya","key":"e_1_2_1_64_1"},{"key":"e_1_2_1_65_1","doi-asserted-by":"publisher","DOI":"10.1145\/2159430.2159439"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3360603","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3360603","content-type":"application\/pdf","content-version":"vor","intended-application":"syndication"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3360603","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T23:22:59Z","timestamp":1750202579000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3360603"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2019,10,10]]},"references-count":65,"journal-issue":{"issue":"OOPSLA","published-print":{"date-parts":[[2019,10,10]]}},"alternative-id":["10.1145\/3360603"],"URL":"https:\/\/doi.org\/10.1145\/3360603","relation":{},"ISSN":["2475-1421"],"issn-type":[{"type":"electronic","value":"2475-1421"}],"subject":[],"published":{"date-parts":[[2019,10,10]]},"assertion":[{"value":"2019-10-10","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}