{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,6,12]],"date-time":"2026-06-12T10:08:51Z","timestamp":1781258931762,"version":"3.54.1"},"reference-count":33,"publisher":"Association for Computing Machinery (ACM)","issue":"PLDI","license":[{"start":{"date-parts":[[2024,6,20]],"date-time":"2024-06-20T00:00:00Z","timestamp":1718841600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2024,6,20]]},"abstract":"<jats:p>\n            Graphics Processing Units (GPU) offer tremendous computational power by following a throughput oriented paradigm where many thousand computational units operate in parallel. Programming such massively parallel hardware is challenging. Programmers must correctly and efficiently coordinate thousands of threads and their accesses to various shared memory spaces. Existing mainstream GPU programming languages, such as CUDA and OpenCL, are based on C\/C++ inheriting their fundamentally unsafe ways to access memory via raw pointers. This facilitates easy to make, but hard to detect bugs, such as\n            <jats:italic toggle=\"yes\">data races<\/jats:italic>\n            and\n            <jats:italic toggle=\"yes\">deadlocks<\/jats:italic>\n            .\n          <\/jats:p>\n          <jats:p>\n            In this paper, we present\n            <jats:italic toggle=\"yes\">Descend<\/jats:italic>\n            : a safe GPU programming language. In contrast to prior safe high-level GPU programming approaches,\n            <jats:italic toggle=\"yes\">Descend<\/jats:italic>\n            is an imperative GPU\n            <jats:italic toggle=\"yes\">systems programming language<\/jats:italic>\n            in the spirit of Rust, enforcing safe CPU and GPU memory management in the type system by tracking\n            <jats:italic toggle=\"yes\">Ownership<\/jats:italic>\n            and\n            <jats:italic toggle=\"yes\">Lifetimes<\/jats:italic>\n            .\n            <jats:italic toggle=\"yes\">Descend<\/jats:italic>\n            introduces a new\n            <jats:italic toggle=\"yes\">holistic GPU programming<\/jats:italic>\n            model where computations are hierarchically scheduled over the GPU\u2019s\n            <jats:italic toggle=\"yes\">execution resources<\/jats:italic>\n            : grid, blocks, warps, and threads.\n            <jats:italic toggle=\"yes\">Descend\u2019s<\/jats:italic>\n            extended\n            <jats:italic toggle=\"yes\">Borrow<\/jats:italic>\n            checking ensures that execution resources safely access memory regions without data races. For this, we introduced\n            <jats:italic toggle=\"yes\">views<\/jats:italic>\n            describing safe parallel access patterns of memory regions, as well as\n            <jats:italic toggle=\"yes\">atomic<\/jats:italic>\n            variables. For memory accesses that can\u2019t be checked by our type system, users can annotate limited code sections as\n            <jats:monospace>unsafe<\/jats:monospace>\n            .\n          <\/jats:p>\n          <jats:p>\n            We discuss the memory safety guarantees offered by\n            <jats:italic toggle=\"yes\">Descend<\/jats:italic>\n            and evaluate our implementation using multiple benchmarks, demonstrating that\n            <jats:italic toggle=\"yes\">Descend<\/jats:italic>\n            is capable of expressing real-world GPU programs showing competitive performance compared to manually written CUDA programs lacking\n            <jats:italic toggle=\"yes\">Descend\u2019s<\/jats:italic>\n            safety guarantees.\n          <\/jats:p>","DOI":"10.1145\/3656411","type":"journal-article","created":{"date-parts":[[2024,6,20]],"date-time":"2024-06-20T16:27:20Z","timestamp":1718900840000},"page":"841-864","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":8,"title":["Descend: A Safe GPU Systems Programming Language"],"prefix":"10.1145","volume":"8","author":[{"ORCID":"https:\/\/orcid.org\/0000-0001-5271-6893","authenticated-orcid":false,"given":"Bastian","family":"K\u00f6pcke","sequence":"first","affiliation":[{"name":"University of M\u00fcnster, M\u00fcnster, Germany"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0003-3857-9380","authenticated-orcid":false,"given":"Sergei","family":"Gorlatch","sequence":"additional","affiliation":[{"name":"University of M\u00fcnster, M\u00fcnster, Germany"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-5048-0741","authenticated-orcid":false,"given":"Michel","family":"Steuwer","sequence":"additional","affiliation":[{"name":"Technische Universit\u00e4t Berlin, Berlin, Germany"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2024,6,20]]},"reference":[{"key":"e_1_3_1_2_1","unstructured":"Robert Atkey Michel Steuwer Sam Lindley and Christophe Dubach. 2017. Strategy Preserving Compilation for Parallel Functional Code. CoRR abs\/1710.08332 (2017). arXiv:1710.08332 http:\/\/arxiv.org\/abs\/1710.08332"},{"key":"e_1_3_1_3_1","unstructured":"Michael Bauer John Clark Eric Schkufza and Alex Aiken. 2010. Sequoia++ User Manual."},{"key":"e_1_3_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/2555243.2555258"},{"key":"e_1_3_1_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/2384616.2384625"},{"key":"e_1_3_1_6_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-030-81685-8_19"},{"key":"e_1_3_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/2212736.2212744"},{"key":"e_1_3_1_8_1","doi-asserted-by":"crossref","unstructured":"Kayvon Fatahalian Daniel Reiter Horn Timothy J Knight Larkhoon Leem Mike Houston Ji Young Park Mattan Erez Manman Ren Alex Aiken William J Dally et al. 2006. Sequoia: Programming the memory hierarchy. In Proceedings of the 2006 ACM\/IEEE Conference on Supercomputing. 83\u2013es.","DOI":"10.1145\/1188455.1188543"},{"key":"e_1_3_1_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/1839676.1839694"},{"key":"e_1_3_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/3408974"},{"key":"e_1_3_1_11_1","doi-asserted-by":"crossref","unstructured":"Mark Harris. 2007. Parallel Prefix Sum (Scan) with CUDA.","DOI":"10.1145\/1281500.1281650"},{"key":"e_1_3_1_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/3062341.3062354"},{"key":"e_1_3_1_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/3570638"},{"key":"e_1_3_1_14_1","doi-asserted-by":"publisher","DOI":"10.1109\/IPDPSW.2013.173"},{"key":"e_1_3_1_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/3418295"},{"key":"e_1_3_1_16_1","unstructured":"Khronos OpenCL Working Group. 2023. The OpenCL C Specification. https:\/\/registry.khronos.org\/OpenCL\/specs\/3.0-unified\/pdf\/OpenCL_C.pdf Version 3.0.14."},{"key":"e_1_3_1_17_1","unstructured":"Khronos SYCL Working Group. 2023. SYCL 2020 Specification. https:\/\/registry.khronos.org\/SYCL\/specs\/sycl-2020\/pdf\/sycl-2020.pdf revision 7."},{"key":"e_1_3_1_18_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.parco.2011.09.001"},{"key":"e_1_3_1_19_1","doi-asserted-by":"publisher","DOI":"10.1007\/S11227-019-02966-8"},{"key":"e_1_3_1_20_1","doi-asserted-by":"publisher","DOI":"10.1109\/HPEC.2014.7040988"},{"key":"e_1_3_1_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/2145816.2145844"},{"key":"e_1_3_1_22_1","doi-asserted-by":"publisher","DOI":"10.1109\/SC.2014.20"},{"key":"e_1_3_1_23_1","doi-asserted-by":"publisher","DOI":"10.1109\/CCGRID.2015.105"},{"key":"e_1_3_1_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/2500365.2500595"},{"key":"e_1_3_1_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/1365490.1365500"},{"key":"e_1_3_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/3443420"},{"key":"e_1_3_1_27_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-031-12597-3_21"},{"key":"e_1_3_1_28_1","unstructured":"Michel Steuwer Thomas Koehler Bastian K\u00f6pcke and Federico Pizzuti. 2022. RISE & Shine: Language-Oriented Compiler Design. CoRR abs\/2201.03611 (2022). arXiv:2201.03611 https:\/\/arxiv.org\/abs\/2201.03611"},{"key":"e_1_3_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/2968455.2968521"},{"key":"e_1_3_1_30_1","doi-asserted-by":"publisher","DOI":"10.1109\/CGO.2017.7863730"},{"key":"e_1_3_1_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/3437801.3441605"},{"key":"e_1_3_1_32_1","unstructured":"Aaron Weiss Daniel Patterson Nicholas D. Matsakis and Amal Ahmed. 2019. Oxide: The Essence of Rust. CoRR abs\/1903.00982 (2019). arXiv:1903.00982 http:\/\/arxiv.org\/abs\/1903.00982"},{"key":"e_1_3_1_33_1","doi-asserted-by":"publisher","DOI":"10.1145\/3377811.3380358"},{"key":"e_1_3_1_34_1","unstructured":"Pavan Yalamanchili Umar Arshad Zakiuddin Mohammed Pradeep Garigipati Peter Entschev Brian Kloppenborg James Malcolm and John Melonakos. 2015. ArrayFire - A high performance software library for parallel computing with an easy-to-use API. https:\/\/github.com\/arrayfire\/arrayfire"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3656411","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3656411","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,7,4]],"date-time":"2025-07-04T20:42:27Z","timestamp":1751661747000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3656411"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2024,6,20]]},"references-count":33,"journal-issue":{"issue":"PLDI","published-print":{"date-parts":[[2024,6,20]]}},"alternative-id":["10.1145\/3656411"],"URL":"https:\/\/doi.org\/10.1145\/3656411","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2024,6,20]]},"assertion":[{"value":"2024-06-20","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}