{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,12,10]],"date-time":"2025-12-10T15:59:54Z","timestamp":1765382394364,"version":"3.37.3"},"reference-count":10,"publisher":"Springer Science and Business Media LLC","issue":"4-5","license":[{"start":{"date-parts":[[2022,12,8]],"date-time":"2022-12-08T00:00:00Z","timestamp":1670457600000},"content-version":"tdm","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"},{"start":{"date-parts":[[2022,12,8]],"date-time":"2022-12-08T00:00:00Z","timestamp":1670457600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"}],"content-domain":{"domain":["link.springer.com"],"crossmark-restriction":false},"short-container-title":["Int J Parallel Prog"],"published-print":{"date-parts":[[2023,10]]},"abstract":"<jats:title>Abstract<\/jats:title><jats:p>This paper introduces the Yet Another Kernel Launcher (YAKL) C++ portability library, which strives to enable user-level code with the look and feel of Fortran code. The intended audience includes both C++ developers and Fortran developers unfamiliar with C++. The C++ portability approach is briefly explained, YAKL\u2019s main features are described, and code examples are given that demonstrate YAKL\u2019s usage. YAKL fills a niche capability important particularly to scientific applications seeking to port Fortran code quickly to a portable C++ library. YAKL places heavy emphasis on simplicity, readability, and productivity with performance mainly emphasizing Graphics Processing Units (GPUs). Central to YAKL\u2019s ability to allow Fortran-like user-level code are three features: (1) a multi-dimensional Array class that allows Fortran behavior; (2) a limited library of Fortran intrinsic functions; and (3) an efficient pool allocator that transparently enables cheap frequent allocations and deallocations of YAKL Arrays. While YAKL allows Fortran-style code, it also allows Arrays that exhibit C-like behavior as well, including row-major index ordering and lower bounds of \u201c0\u201d. YAKL currently supports CPUs, CPU threading, and Nvidia, AMD, and Intel GPUs.<\/jats:p>","DOI":"10.1007\/s10766-022-00739-0","type":"journal-article","created":{"date-parts":[[2022,12,8]],"date-time":"2022-12-08T20:04:45Z","timestamp":1670529885000},"page":"209-230","update-policy":"https:\/\/doi.org\/10.1007\/springer_crossmark_policy","source":"Crossref","is-referenced-by-count":9,"title":["Portable C++ Code that can Look and Feel Like Fortran Code with Yet Another Kernel Launcher (YAKL)"],"prefix":"10.1007","volume":"51","author":[{"ORCID":"https:\/\/orcid.org\/0000-0003-4764-3348","authenticated-orcid":false,"given":"Matthew","family":"Norman","sequence":"first","affiliation":[]},{"given":"Isaac","family":"Lyngaas","sequence":"additional","affiliation":[]},{"given":"Abhishek","family":"Bagusetty","sequence":"additional","affiliation":[]},{"given":"Mark","family":"Berrill","sequence":"additional","affiliation":[]}],"member":"297","published-online":{"date-parts":[[2022,12,8]]},"reference":[{"key":"739_CR1","doi-asserted-by":"publisher","DOI":"10.7551\/mitpress\/7055.001.0001","volume-title":"Using MPI: Portable Parallel Programming with the Message-Passing Interface","author":"W Gropp","year":"1999","unstructured":"Gropp, W., Gropp, W.D., Lusk, E., Skjellum, A., Lusk, A.D.F.E.E.: Using MPI: Portable Parallel Programming with the Message-Passing Interface. MIT Press (1999)"},{"key":"739_CR2","doi-asserted-by":"crossref","unstructured":"Wienke, S., Springer, P., Terboven, C., et al.: Openacc-first experiences with real-world applications. In: European Conference on Parallel Processing, pp. 859\u2013870. Springer (2012)","DOI":"10.1007\/978-3-642-32820-6_85"},{"key":"739_CR3","doi-asserted-by":"crossref","unstructured":"Sommer, L., Korinth, J., Koch, A.: Openmp device offloading to fpga accelerators. In: 2017 IEEE 28th International Conference on Application-specific Systems, Architectures and Processors (ASAP), pp. 201\u2013205. IEEE (2017)","DOI":"10.1109\/ASAP.2017.7995280"},{"key":"739_CR4","doi-asserted-by":"crossref","unstructured":"Edwards, H.C., Trott, C.R.: Kokkos: enabling performance portability across manycore architectures. In: 2013 Extreme Scaling Workshop (xsw 2013), pp. 18\u201324. IEEE (2013)","DOI":"10.1109\/XSW.2013.7"},{"key":"739_CR5","doi-asserted-by":"crossref","unstructured":"Beckingsale, D.A., Burmark, J., Hornung, R., Jones, H., Killian, W., Kunen, A.J., Pearce, O., Robinson, P., Ryujin, B.S., Scogland, T.R.: Raja: Portable performance for large-scale scientific applications. In: 2019 IEEE\/ACM International Workshop on Performance, Portability and Productivity in Hpc (p3hpc), pp. 71\u201381. IEEE (2019)","DOI":"10.1109\/P3HPC49587.2019.00012"},{"key":"739_CR6","doi-asserted-by":"crossref","unstructured":"Ashbaugh, B., Bader, A., Brodman, J., Hammond, J., Kinsner, M., Pennycook, J., Schulz, R., Sewall, J.: Data parallel c++ enhancing sycl through extensions for productivity and performance. In: Proceedings of the International Workshop on OpenCL, pp. 1\u20132 (2020)","DOI":"10.1145\/3388333.3388653"},{"issue":"5","key":"739_CR7","doi-asserted-by":"publisher","first-page":"1302","DOI":"10.1137\/19M128435X","volume":"42","author":"M Norman","year":"2020","unstructured":"Norman, M., Larkin, J.: A holistic algorithmic approach to improving accuracy, robustness, and computational efficiency for atmospheric dynamics. SIAM J. Sci. Comput. 42(5), 1302\u20131327 (2020)","journal-title":"SIAM J. Sci. Comput."},{"issue":"736","key":"739_CR8","doi-asserted-by":"publisher","first-page":"1661","DOI":"10.1002\/qj.3989","volume":"147","author":"MR Norman","year":"2021","unstructured":"Norman, M.R.: A high-order weno-limited finite-volume algorithm for atmospheric flow using the ader-differential transform time discretization. Q. J. R. Meteorol. Soc. 147(736), 1661\u20131690 (2021)","journal-title":"Q. J. R. Meteorol. Soc."},{"key":"739_CR9","doi-asserted-by":"crossref","unstructured":"Lyngaas, I., Norman, M., Kim, Y.: Sam++: Porting the e3sm-mmf cloud resolving model using a c++ portability library. Int. J. High Perform. Comput. Appl. 10943420211044495 (2021)","DOI":"10.1177\/10943420211044495"},{"issue":"1","key":"739_CR10","doi-asserted-by":"publisher","first-page":"93","DOI":"10.1177\/10943420211027539","volume":"36","author":"MR Norman","year":"2022","unstructured":"Norman, M.R., Bader, D.A., Eldred, C., Hannah, W.M., Hillman, B.R., Jones, C.R., Lee, J.M., Leung, L., Lyngaas, I., Pressel, K.G., et al.: Unprecedented cloud resolution in a gpu-enabled full-physics atmospheric climate simulation on olcf\u2019s summit supercomputer. Int. J. High Perform. Comput. Appl. 36(1), 93\u2013105 (2022)","journal-title":"Int. J. High Perform. Comput. Appl."}],"container-title":["International Journal of Parallel Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/link.springer.com\/content\/pdf\/10.1007\/s10766-022-00739-0.pdf","content-type":"application\/pdf","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/link.springer.com\/article\/10.1007\/s10766-022-00739-0\/fulltext.html","content-type":"text\/html","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/link.springer.com\/content\/pdf\/10.1007\/s10766-022-00739-0.pdf","content-type":"application\/pdf","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2023,7,26]],"date-time":"2023-07-26T17:48:41Z","timestamp":1690393721000},"score":1,"resource":{"primary":{"URL":"https:\/\/link.springer.com\/10.1007\/s10766-022-00739-0"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2022,12,8]]},"references-count":10,"journal-issue":{"issue":"4-5","published-print":{"date-parts":[[2023,10]]}},"alternative-id":["739"],"URL":"https:\/\/doi.org\/10.1007\/s10766-022-00739-0","relation":{},"ISSN":["0885-7458","1573-7640"],"issn-type":[{"type":"print","value":"0885-7458"},{"type":"electronic","value":"1573-7640"}],"subject":[],"published":{"date-parts":[[2022,12,8]]},"assertion":[{"value":"11 April 2022","order":1,"name":"received","label":"Received","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"24 October 2022","order":2,"name":"accepted","label":"Accepted","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"8 December 2022","order":3,"name":"first_online","label":"First Online","group":{"name":"ArticleHistory","label":"Article History"}}]}}