{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,1,23]],"date-time":"2026-01-23T21:25:15Z","timestamp":1769203515738,"version":"3.49.0"},"reference-count":73,"publisher":"PeerJ","license":[{"start":{"date-parts":[[2025,7,11]],"date-time":"2025-07-11T00:00:00Z","timestamp":1752192000000},"content-version":"unspecified","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"funder":[{"name":"Inria ADT Project SPETABARU-H"},{"name":"ANR National Project AUTOSPEC","award":["ANR-21-CE25-0009"],"award-info":[{"award-number":["ANR-21-CE25-0009"]}]}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":[],"abstract":"<jats:p>Parallelization is needed everywhere, from laptops and mobile phones to supercomputers. Among parallel programming models, task-based programming has demonstrated a powerful potential and is widely used in high-performance scientific computing. Not only does it allow efficient parallelization across distributed heterogeneous computing nodes, but it also allows for elegant source code structuring by describing hardware-independent algorithms. In this article, we present Specx, a task-based runtime system written in modern C++. Specx supports distributed heterogeneous computing by simultaneously exploiting central processing units (CPUs) and graphics processing units (GPUs) (CUDA\/HIP) and incorporating communication into the task graph. We describe the specificities of Specx and demonstrate its potential by running parallel applications.<\/jats:p>","DOI":"10.7717\/peerj-cs.2966","type":"journal-article","created":{"date-parts":[[2025,7,11]],"date-time":"2025-07-11T08:10:23Z","timestamp":1752221423000},"page":"e2966","source":"Crossref","is-referenced-by-count":4,"title":["Specx: a C++ task-based runtime system for heterogeneous distributed architectures"],"prefix":"10.7717","volume":"11","author":[{"given":"Paul","family":"Cardosi","sequence":"first","affiliation":[{"name":"ICPS Team, ICube, Illkirch, France"},{"name":"CAMUS Team, Inria, Illkirch, France"},{"name":"University of Strasbourg, Illkirch, France"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0003-0281-9709","authenticated-orcid":true,"given":"B\u00e9renger","family":"Bramas","sequence":"additional","affiliation":[{"name":"ICPS Team, ICube, Illkirch, France"},{"name":"CAMUS Team, Inria, Illkirch, France"},{"name":"University of Strasbourg, Illkirch, France"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"4443","published-online":{"date-parts":[[2025,7,11]]},"reference":[{"key":"10.7717\/peerj-cs.2966\/ref-1","doi-asserted-by":"publisher","first-page":"647","DOI":"10.1109\/SC.2014.58","article-title":"Parallel programming with migratable objects: CHARM++ in practice","author":"Acun","year":"2014"},{"key":"10.7717\/peerj-cs.2966\/ref-2","first-page":"319","article-title":"OmpSs-2@Cluster: distributed memory execution of nested OpenMP-style tasks","author":"Aguilar Mena","year":"2022"},{"key":"10.7717\/peerj-cs.2966\/ref-3","article-title":"Faster, cheaper, better\u2014a hybridization methodology to develop linear algebra software for GPUs","volume-title":"GPU Computing Gems","volume":"2","author":"Agullo","year":"2010"},{"issue":"10","key":"10.7717\/peerj-cs.2966\/ref-4","doi-asserted-by":"publisher","first-page":"2794","DOI":"10.1109\/tpds.2017.2697857","article-title":"Bridging the gap between OpenMP and task-based runtime systems for the fast multipole method","volume":"28","author":"Agullo","year":"2017a","journal-title":"IEEE Transactions on Parallel and Distributed Systems"},{"key":"10.7717\/peerj-cs.2966\/ref-5","article-title":"Achieving high performance on supercomputers with a sequential task-based programming model","author":"Agullo","year":"2016a"},{"key":"10.7717\/peerj-cs.2966\/ref-6","doi-asserted-by":"publisher","DOI":"10.1109\/tpds.2017.2766064","article-title":"Achieving high performance on supercomputers with a sequential task-based programming model","author":"Agullo","year":"2017b","journal-title":"IEEE Transactions on Parallel and Distributed Systems"},{"issue":"1","key":"10.7717\/peerj-cs.2966\/ref-7","doi-asserted-by":"publisher","first-page":"C66","DOI":"10.1137\/130915662","article-title":"Task-based FMM for multicore architectures","volume":"36","author":"Agullo","year":"2014","journal-title":"SIAM Journal on Scientific Computing"},{"issue":"9","key":"10.7717\/peerj-cs.2966\/ref-8","doi-asserted-by":"publisher","first-page":"2608","DOI":"10.1002\/cpe.3723","article-title":"Task-based FMM for heterogeneous architectures","volume":"28","author":"Agullo","year":"2016b","journal-title":"Concurrency and Computation: Practice and Experience"},{"key":"10.7717\/peerj-cs.2966\/ref-9","first-page":"521","article-title":"Multifrontal QR factorization for multicore architectures over runtime systems","author":"Agullo","year":"2013"},{"issue":"2","key":"10.7717\/peerj-cs.2966\/ref-10","doi-asserted-by":"publisher","first-page":"13:1","DOI":"10.1145\/2898348","article-title":"Implementing multifrontal sparse solvers for multicore architectures with sequential task flow runtime systems","volume":"43","author":"Agullo","year":"2016c","journal-title":"ACM Transactions on Mathematical Software"},{"issue":"2","key":"10.7717\/peerj-cs.2966\/ref-11","doi-asserted-by":"publisher","first-page":"187","DOI":"10.1002\/cpe.1631","article-title":"StarPU: a unified platform for task scheduling on heterogeneous multicore architectures","volume":"23","author":"Augonnet","year":"2011","journal-title":"Concurrency and Computation: Practice and Experience"},{"issue":"3","key":"10.7717\/peerj-cs.2966\/ref-12","doi-asserted-by":"publisher","first-page":"404","DOI":"10.1109\/tpds.2008.105","article-title":"The design of OpenMP tasks","volume":"20","author":"Ayguad\u00e9","year":"2009","journal-title":"IEEE Transactions on Parallel and Distributed Systems"},{"key":"10.7717\/peerj-cs.2966\/ref-13","first-page":"963","article-title":"UPC++: a high-performance communication framework for asynchronous computation","author":"Bachan","year":"2019"},{"key":"10.7717\/peerj-cs.2966\/ref-14","first-page":"1","article-title":"The UPC++ PGAS library for exascale computing","author":"Bachan","year":"2017"},{"key":"10.7717\/peerj-cs.2966\/ref-15","first-page":"1","article-title":"Legion: expressing locality and independence with logical regions","author":"Bauer","year":"2012"},{"issue":"1","key":"10.7717\/peerj-cs.2966\/ref-16","doi-asserted-by":"publisher","first-page":"55","DOI":"10.1006\/jpdc.1996.0107","article-title":"Cilk: an efficient multithreaded runtime system","volume":"37","author":"Blumofe","year":"1996","journal-title":"Journal of Parallel and Distributed Computing"},{"key":"10.7717\/peerj-cs.2966\/ref-17","article-title":"GASNet specification, v1. 8.1","author":"Bonachea","year":"2017"},{"issue":"6","key":"10.7717\/peerj-cs.2966\/ref-18","doi-asserted-by":"publisher","first-page":"36","DOI":"10.1109\/MCSE.2013.98","article-title":"PaRSEC: exploiting heterogeneity to enhance scalability","volume":"15","author":"Bosilca","year":"2013","journal-title":"Computing in Science & Engineering"},{"issue":"10","key":"10.7717\/peerj-cs.2966\/ref-19","doi-asserted-by":"publisher","first-page":"e183","DOI":"10.7717\/peerj-cs.183","article-title":"Increasing the degree of parallelism using speculative execution in task-based runtime systems","volume":"5","author":"Bramas","year":"2019","journal-title":"PeerJ Computer Science"},{"issue":"1","key":"10.7717\/peerj-cs.2966\/ref-20","first-page":"1","article-title":"Optimization of a discontinuous Galerkin solver with OpenCL and StarPU","volume":"15","author":"Bramas","year":"2020","journal-title":"International Journal on Finite"},{"key":"10.7717\/peerj-cs.2966\/ref-21","first-page":"16","article-title":"TaskTorrent: a lightweight distributed task-based runtime system in C++","author":"Cambier","year":"2020"},{"key":"10.7717\/peerj-cs.2966\/ref-22","first-page":"757","article-title":"Tiled algorithms for efficient task-parallel H-matrix solvers","author":"Carratal\u00e1-S\u00e1ez","year":"2020"},{"issue":"3","key":"10.7717\/peerj-cs.2966\/ref-23","doi-asserted-by":"publisher","first-page":"291","DOI":"10.1177\/1094342007078442","article-title":"Parallel programmability and the chapel language","volume":"21","author":"Chamberlain","year":"2007","journal-title":"The International Journal of High Performance Computing Applications"},{"key":"10.7717\/peerj-cs.2966\/ref-24","volume-title":"Parallel programming in OpenMP","author":"Chandra","year":"2001"},{"issue":"10","key":"10.7717\/peerj-cs.2966\/ref-25","doi-asserted-by":"publisher","first-page":"519","DOI":"10.1145\/1103845.1094852","article-title":"X10: an object-oriented approach to non-uniform cluster computing","volume":"40","author":"Charles","year":"2005","journal-title":"ACM SIGPLAN Notices"},{"key":"10.7717\/peerj-cs.2966\/ref-26","doi-asserted-by":"crossref","first-page":"389","DOI":"10.1007\/978-3-319-92040-5_20","article-title":"TaskGenX: a hardware-software proposal for accelerating task parallelism","volume-title":"High Performance Computing","author":"Chronaki","year":"2018"},{"issue":"5","key":"10.7717\/peerj-cs.2966\/ref-27","doi-asserted-by":"publisher","first-page":"496","DOI":"10.1016\/j.jpdc.2009.09.002","article-title":"Iterative computations with ordered read-write locks","volume":"70","author":"Clauss","year":"2010","journal-title":"Journal of Parallel and Distributed Computing"},{"key":"10.7717\/peerj-cs.2966\/ref-28","doi-asserted-by":"publisher","first-page":"113","DOI":"10.1109\/hicss.1995.375471","article-title":"Automatic task graph generation techniques","volume":"2","author":"Cosnard","year":"1995","journal-title":"Proceedings of the Twenty-Eighth Annual Hawaii International Conference on System Sciences"},{"key":"10.7717\/peerj-cs.2966\/ref-29","first-page":"21","article-title":"PTG: an abstraction for unhindered parallelism","author":"Danalis","year":"2014"},{"key":"10.7717\/peerj-cs.2966\/ref-30","first-page":"980","article-title":"A lightweight communication runtime for distributed graph analytics","author":"Dang","year":"2018"},{"issue":"02","key":"10.7717\/peerj-cs.2966\/ref-31","doi-asserted-by":"publisher","first-page":"173","DOI":"10.1142\/s0129626411000151","article-title":"OmpSs: a proposal for programming heterogeneous multi-core architectures","volume":"21","author":"Duran","year":"2011","journal-title":"Parallel Processing Letters"},{"issue":"12","key":"10.7717\/peerj-cs.2966\/ref-32","doi-asserted-by":"publisher","first-page":"3202","DOI":"10.1016\/j.jpdc.2014.07.003","article-title":"Kokkos: enabling manycore performance portability through polymorphic memory access patterns","volume":"74","author":"Edwards","year":"2014","journal-title":"Journal of Parallel and Distributed Computing"},{"issue":"2","key":"10.7717\/peerj-cs.2966\/ref-33","doi-asserted-by":"publisher","first-page":"1","DOI":"10.1145\/2938369","article-title":"A survey on thread-level speculation techniques","volume":"49","author":"Estebanez","year":"2016","journal-title":"ACM Computing Surveys"},{"issue":"10","key":"10.7717\/peerj-cs.2966\/ref-34","doi-asserted-by":"publisher","first-page":"e969","DOI":"10.7717\/peerj-cs.969","article-title":"Automated prioritizing heuristics for parallel task graph scheduling in heterogeneous computing","volume":"8","author":"Flint","year":"2022","journal-title":"PeerJ Computer Science"},{"issue":"6","key":"10.7717\/peerj-cs.2966\/ref-35","doi-asserted-by":"publisher","first-page":"1267","DOI":"10.1109\/tpds.2018.2884716","article-title":"Easy dataflow programming in clusters with UPC++ DepSpawn","volume":"30","author":"Fraguela","year":"2019","journal-title":"IEEE Transactions on Parallel and Distributed Systems"},{"issue":"2166","key":"10.7717\/peerj-cs.2966\/ref-36","doi-asserted-by":"publisher","first-page":"102936","DOI":"10.1016\/j.parco.2022.102936","article-title":"Resource allocation for task-level speculative scientific applications: a proof of concept using parallel trajectory splicing","volume":"112","author":"Garmon","year":"2022","journal-title":"Parallel Computing"},{"key":"10.7717\/peerj-cs.2966\/ref-37","first-page":"1299","article-title":"XKaapi: a runtime system for data-flow task programming on heterogeneous architectures","author":"Gautier","year":"2013"},{"key":"10.7717\/peerj-cs.2966\/ref-38","first-page":"268","article-title":"A comparative study of parallel programming frameworks for distributed GPU applications","author":"Gu","year":"2019"},{"key":"10.7717\/peerj-cs.2966\/ref-39","first-page":"203","article-title":"A current task-based programming paradigms analysis","author":"Gurhem","year":"2020"},{"key":"10.7717\/peerj-cs.2966\/ref-40","article-title":"GPUAPI: multi-level chapel runtime API for GPUs","author":"Hayashi","year":"2021"},{"key":"10.7717\/peerj-cs.2966\/ref-41","first-page":"934","article-title":"Distributed task-based runtime systems\u2014current state and micro-benchmark performance","author":"Hoque","year":"2018"},{"issue":"6","key":"10.7717\/peerj-cs.2966\/ref-42","doi-asserted-by":"publisher","first-page":"1303","DOI":"10.1109\/tpds.2021.3104255","article-title":"Taskflow: a lightweight parallel and heterogeneous task graph computing system","volume":"33","author":"Huang","year":"2022","journal-title":"IEEE Transactions on Parallel and Distributed Systems"},{"key":"10.7717\/peerj-cs.2966\/ref-43","doi-asserted-by":"crossref","DOI":"10.1109\/IPDPS.2015.102","article-title":"CHARM++ & MPI: combining the best of both worlds","author":"Jain","year":"2015"},{"issue":"53","key":"10.7717\/peerj-cs.2966\/ref-44","doi-asserted-by":"publisher","first-page":"2352","DOI":"10.21105\/joss.02352","article-title":"HPX\u2014the C++ standard library for parallelism and concurrency","volume":"5","author":"Kaiser","year":"2020","journal-title":"Journal of Open Source Software"},{"key":"10.7717\/peerj-cs.2966\/ref-45","first-page":"1","article-title":"HPX: a task based programming model in a global address space","author":"Kaiser","year":"2014"},{"key":"10.7717\/peerj-cs.2966\/ref-46","first-page":"91","article-title":"CHARM++: a portable concurrent object oriented system based on C++","volume":"28","author":"Kale","year":"1993"},{"key":"10.7717\/peerj-cs.2966\/ref-47","doi-asserted-by":"crossref","first-page":"222","DOI":"10.1007\/978-3-319-98521-3_15","article-title":"Mapping OpenMP to a distributed tasking runtime","volume-title":"Evolving OpenMP for Evolving Architectures","author":"Kemp","year":"2018"},{"issue":"2","key":"10.7717\/peerj-cs.2966\/ref-48","doi-asserted-by":"publisher","first-page":"141","DOI":"10.1109\/tmscs.2017.2773488","article-title":"On approximate speculative lock elision","volume":"4","author":"Khatamifard","year":"2018","journal-title":"IEEE Transactions on Multi-Scale Computing Systems"},{"key":"10.7717\/peerj-cs.2966\/ref-49","first-page":"29","article-title":"Taking advantage of hybrid systems for sparse direct solvers via task-based runtimes","author":"Lacoste","year":"2014"},{"key":"10.7717\/peerj-cs.2966\/ref-50","first-page":"522","article-title":"The Cilk++ concurrency platform","author":"Leiserson","year":"2009"},{"key":"10.7717\/peerj-cs.2966\/ref-51","first-page":"108","article-title":"A dynamic task-based D3Q19 Lattice-Boltzmann method for heterogeneous architectures","author":"Lima","year":"2019"},{"issue":"15","key":"10.7717\/peerj-cs.2966\/ref-52","doi-asserted-by":"publisher","first-page":"e4192","DOI":"10.1002\/cpe.4192","article-title":"Full runtime polyhedral optimizing loop transformations with the generation, instantiation, and scheduling of code-bones","volume":"29","author":"Martinez Caama\u00f1o","year":"2017","journal-title":"Concurrency and Computation: Practice and Experience"},{"key":"10.7717\/peerj-cs.2966\/ref-53","first-page":"764","article-title":"Task-based programming on emerging parallel architectures for finite-differences seismic numerical kernel","author":"Moustafa","year":"2018"},{"key":"10.7717\/peerj-cs.2966\/ref-54","article-title":"OpenMP application program interface version 3.0","author":"OpenMP Architecture Review Board","year":"2008"},{"key":"10.7717\/peerj-cs.2966\/ref-55","article-title":"OpenMP application program interface version 4.0","author":"OpenMP Architecture Review Board","year":"2013"},{"key":"10.7717\/peerj-cs.2966\/ref-56","first-page":"142","article-title":"A dependency-aware task-based programming environment for multi-core architectures","author":"Perez","year":"2008"},{"key":"10.7717\/peerj-cs.2966\/ref-57","first-page":"673","article-title":"SYCL: single-source C++ accelerator programming","volume-title":"Parallel Computing: On the Road to Exascale","author":"Reyes","year":"2016"},{"issue":"2","key":"10.7717\/peerj-cs.2966\/ref-58","doi-asserted-by":"publisher","first-page":"466","DOI":"10.1109\/tpds.2017.2752169","article-title":"Using hardware-transactional-memory support to implement thread-level speculation","volume":"29","author":"Salamanca","year":"2018","journal-title":"IEEE Transactions on Parallel and Distributed Systems"},{"key":"10.7717\/peerj-cs.2966\/ref-59","volume-title":"MPI\u2014the complete reference: the MPI core","volume":"1","author":"Snir","year":"1998"},{"key":"10.7717\/peerj-cs.2966\/ref-60","article-title":"Extending the task dataflow model with speculative data accesses","author":"Souris","year":"2023"},{"issue":"2","key":"10.7717\/peerj-cs.2966\/ref-61","doi-asserted-by":"publisher","first-page":"1","DOI":"10.1145\/342001.339650","article-title":"A scalable approach to thread-level speculation","volume":"28","author":"Steffan","year":"2000","journal-title":"ACM SIGARCH Computer Architecture News"},{"issue":"2","key":"10.7717\/peerj-cs.2966\/ref-62","doi-asserted-by":"publisher","first-page":"312","DOI":"10.1109\/tpds.2017.2755655","article-title":"Asynchronous task-based polar decomposition on single node manycore architectures","volume":"29","author":"Sukkari","year":"2018","journal-title":"IEEE Transactions on Parallel and Distributed Systems"},{"issue":"9","key":"10.7717\/peerj-cs.2966\/ref-63","doi-asserted-by":"publisher","first-page":"2150","DOI":"10.1109\/tpds.2018.2814602","article-title":"Unleashing fine-grained parallelism on embedded many-core accelerators with lightweight OpenMP tasking","volume":"29","author":"Tagliavini","year":"2018","journal-title":"IEEE Transactions on Parallel and Distributed Systems"},{"key":"10.7717\/peerj-cs.2966\/ref-64","first-page":"31","article-title":"Dynamic tasks scheduling with multiple priorities on heterogeneous computing systems","author":"Tayeb","year":"2024"},{"key":"10.7717\/peerj-cs.2966\/ref-65","volume-title":"On runtime systems for task-based programming on heterogeneous platforms","author":"Thibault","year":"2018"},{"issue":"4","key":"10.7717\/peerj-cs.2966\/ref-66","doi-asserted-by":"publisher","first-page":"1422","DOI":"10.1007\/s11227-018-2238-4","article-title":"A taxonomy of task-based parallel programming technologies for high-performance computing","volume":"74","author":"Thoman","year":"2018","journal-title":"The Journal of Supercomputing"},{"issue":"6","key":"10.7717\/peerj-cs.2966\/ref-67","doi-asserted-by":"publisher","first-page":"C617","DOI":"10.1137\/140989716","article-title":"SuperGlue: a shared memory framework using data versioning for dependency-aware task-based parallelization","volume":"37","author":"Tillenius","year":"2015","journal-title":"SIAM Journal on Scientific Computing"},{"issue":"4","key":"10.7717\/peerj-cs.2966\/ref-68","doi-asserted-by":"publisher","first-page":"805","DOI":"10.1109\/tpds.2021.3097283","article-title":"Kokkos 3: programming model extensions for the exascale era","volume":"33","author":"Trott","year":"2022","journal-title":"IEEE Transactions on Parallel and Distributed Systems"},{"issue":"5","key":"10.7717\/peerj-cs.2966\/ref-69","doi-asserted-by":"publisher","first-page":"1","DOI":"10.1007\/s11227-021-04158-9","article-title":"Tasking framework for adaptive speculative parallel mesh generation","volume":"78","author":"Tsolakis","year":"2022","journal-title":"The Journal of Supercomputing"},{"key":"10.7717\/peerj-cs.2966\/ref-70","article-title":"The chapel tasking layer over Q-threads. Technical Report, Sandia National Lab (SNL-NM), Albuquerque, NM, USA","author":"Wheeler","year":"2011"},{"key":"10.7717\/peerj-cs.2966\/ref-71","doi-asserted-by":"crossref","first-page":"169","DOI":"10.1007\/978-3-319-78024-5_16","article-title":"TaskUniVerse: a task-based unified interface for versatile parallel execution","volume-title":"Parallel Processing and Applied Mathematics","author":"Zafari","year":"2018"},{"issue":"4","key":"10.7717\/peerj-cs.2966\/ref-72","doi-asserted-by":"publisher","first-page":"102582","DOI":"10.1016\/j.parco.2019.102582","article-title":"DuctTeip: an efficient programming model for distributed task-based parallel computing","volume":"90","author":"Zafari","year":"2019","journal-title":"Parallel Computing"},{"key":"10.7717\/peerj-cs.2966\/ref-73","first-page":"1105","article-title":"UPC++: a PGAS extension for C++","author":"Zheng","year":"2014"}],"container-title":["PeerJ Computer Science"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/peerj.com\/articles\/cs-2966.pdf","content-type":"application\/pdf","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/peerj.com\/articles\/cs-2966.xml","content-type":"application\/xml","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/peerj.com\/articles\/cs-2966.html","content-type":"text\/html","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/peerj.com\/articles\/cs-2966.pdf","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,7,11]],"date-time":"2025-07-11T08:10:28Z","timestamp":1752221428000},"score":1,"resource":{"primary":{"URL":"https:\/\/peerj.com\/articles\/cs-2966"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025,7,11]]},"references-count":73,"alternative-id":["10.7717\/peerj-cs.2966"],"URL":"https:\/\/doi.org\/10.7717\/peerj-cs.2966","archive":["CLOCKSS","LOCKSS","Portico"],"relation":{},"ISSN":["2376-5992"],"issn-type":[{"value":"2376-5992","type":"electronic"}],"subject":[],"published":{"date-parts":[[2025,7,11]]},"article-number":"e2966"}}