{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,1,10]],"date-time":"2026-01-10T08:09:45Z","timestamp":1768032585536,"version":"3.49.0"},"reference-count":55,"publisher":"Springer Science and Business Media LLC","issue":"7","license":[{"start":{"date-parts":[[2019,3,30]],"date-time":"2019-03-30T00:00:00Z","timestamp":1553904000000},"content-version":"tdm","delay-in-days":0,"URL":"http:\/\/www.springer.com\/tdm"},{"start":{"date-parts":[[2019,3,30]],"date-time":"2019-03-30T00:00:00Z","timestamp":1553904000000},"content-version":"vor","delay-in-days":0,"URL":"http:\/\/www.springer.com\/tdm"}],"content-domain":{"domain":["link.springer.com"],"crossmark-restriction":false},"short-container-title":["J Supercomput"],"published-print":{"date-parts":[[2020,7]]},"DOI":"10.1007\/s11227-019-02829-2","type":"journal-article","created":{"date-parts":[[2019,3,30]],"date-time":"2019-03-30T05:01:51Z","timestamp":1553922111000},"page":"5117-5138","update-policy":"https:\/\/doi.org\/10.1007\/springer_crossmark_policy","source":"Crossref","is-referenced-by-count":13,"title":["dOCAL: high-level distributed programming with OpenCL and CUDA"],"prefix":"10.1007","volume":"76","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-0286-0755","authenticated-orcid":false,"given":"Ari","family":"Rasch","sequence":"first","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Julian","family":"Bigge","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Martin","family":"Wrodarczyk","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Richard","family":"Schulze","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Sergei","family":"Gorlatch","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"297","published-online":{"date-parts":[[2019,3,30]]},"reference":[{"key":"2829_CR1","doi-asserted-by":"publisher","unstructured":"Rasch A, Gorlatch S (2018) ATF: a generic, directive-based auto-tuning framework. In: CCPE, pp 1\u201316. \nhttps:\/\/doi.org\/10.1002\/cpe.4423","DOI":"10.1002\/cpe.4423"},{"key":"2829_CR2","doi-asserted-by":"crossref","unstructured":"Aldinucci M et al (2015) The loop-of-stencil-reduce paradigm. In: IEEE Trustcom\/BigDataSE\/ISPA, pp 172\u2013177","DOI":"10.1109\/Trustcom.2015.628"},{"key":"2829_CR3","doi-asserted-by":"crossref","unstructured":"Boehm B et al (1995) Cost models for future software life cycle processes: COCOMO 2.0. In: Annals of software engineering, pp 57\u201394","DOI":"10.1007\/BF02249046"},{"key":"2829_CR4","unstructured":"Boost: Boost.Asio (2018). \nhttp:\/\/www.boost.org\/doc\/libs\/1_66_0\/doc\/html\/boost_asio.html"},{"key":"2829_CR5","doi-asserted-by":"crossref","unstructured":"Castro D et al (2016) Farms, pipes, streams and reforestation: reasoning about structured parallel processes using types and hylomorphisms. In: Proceedings of the 21st ACM SIGPLAN International Conference on Functional Programming, ICFP, pp 4\u201317","DOI":"10.1145\/2951913.2951920"},{"key":"2829_CR6","unstructured":"Cedric A et al (2011) StarPU: a unified platform for task scheduling on heterogeneous multicore architectures. In: Concurrency and computation: practice and experience, pp 187\u2013198"},{"key":"2829_CR7","doi-asserted-by":"crossref","unstructured":"Chang PP et al (1989) Inline function expansion for compiling C programs. In: ACM SIGPLAN Conference on Programming Language Design and Implementation, pp 246\u2013257","DOI":"10.1145\/73141.74840"},{"key":"2829_CR8","doi-asserted-by":"crossref","unstructured":"Dagum L et al (1998) OpenMP: an industry-standard api for shared-memory programming. In: IEEE computational science and engineering, pp 46\u201355","DOI":"10.1109\/99.660313"},{"key":"2829_CR9","doi-asserted-by":"crossref","unstructured":"Dastgeer U et al (2014) The PEPPHER composition tool: performance-aware dynamic composition of applications for GPU-based systems. In: Computing, pp 1195\u20131211","DOI":"10.1007\/s00607-013-0371-8"},{"key":"2829_CR10","unstructured":"Wheeler David A (2018) SLOCCount. \nhttps:\/\/www.dwheeler.com\/sloccount\/"},{"key":"2829_CR11","doi-asserted-by":"crossref","unstructured":"Du P et al (2012) From CUDA to OpenCL: towards a performance-portable solution for multi-platform GPU programming. In: Parallel computing, pp 391 \u2013 407","DOI":"10.1016\/j.parco.2011.10.002"},{"key":"2829_CR12","doi-asserted-by":"crossref","unstructured":"Duato J et al (2010) rCUDA: reducing the number of GPU-based accelerators in high performance clusters. In: International Conference on High Performance Computing Simulation, pp 224\u2013231","DOI":"10.1109\/HPCS.2010.5547126"},{"key":"2829_CR13","doi-asserted-by":"crossref","unstructured":"Duran A et al (2011) OmpSs: a proposal for programming heterogeneous multi-core architectures. In: Parallel processing letters, pp 173\u2013193","DOI":"10.1142\/S0129626411000151"},{"key":"2829_CR14","doi-asserted-by":"crossref","unstructured":"Enmyren J et al (2010) SkePU: a multi-backend skeleton programming library for multi-GPU systems. In: HLPP, pp 5\u201314","DOI":"10.1145\/1863482.1863487"},{"key":"2829_CR15","unstructured":"Ernsting S et al (2011) Data parallel skeletons for GPU clusters and multi-GPU systems. In: PARCO, pp 509\u2013518"},{"key":"2829_CR16","unstructured":"Gorlatch S, Cole M (2011) Parallel skeletons. In: Encyclopedia of parallel computing, pp 1417\u20131422"},{"key":"2829_CR17","doi-asserted-by":"crossref","unstructured":"Grasso I et al (2013) LibWater: heterogeneous distributed computing made easy. In: Proceedings of the 27th International ACM Conference on International Conference on Supercomputing, ICS, pp 161\u2013172","DOI":"10.1145\/2464996.2465008"},{"key":"2829_CR18","doi-asserted-by":"crossref","unstructured":"Haidl M, Gorlatch S (2014) PACXX: towards a unified programming model for programming accelerators using C++14. In: LLVM compiler infrastructure in HPC, pp 1\u201311","DOI":"10.1109\/LLVM-HPC.2014.9"},{"key":"2829_CR19","unstructured":"Halstead MH (1977) Elements of software science. Elsevier computer science library: operational programming systems series"},{"key":"2829_CR20","unstructured":"Intel: Ambient Occlusion Benchmark (AOBench) (2014). \nhttp:\/\/code.google.com\/p\/aobench"},{"key":"2829_CR21","unstructured":"Intel: Code Samples (2018). \nhttps:\/\/software.intel.com\/en-us\/intel-opencl-support\/code-samples"},{"key":"2829_CR22","unstructured":"Intel: CUDA Deep Neural Network Library (2018). \nhttps:\/\/developer.nvidia.com\/cudnn"},{"key":"2829_CR23","unstructured":"Intel: how to increase performance by minimizing buffer copies on intel processor graphics (2018). \nhttps:\/\/software.intel.com\/en-us\/articles\/getting-the-most-from-opencl-12-how-to-increase-performance-by-minimizing-buffer-copies-on-intel-processor-graphics"},{"key":"2829_CR24","doi-asserted-by":"crossref","unstructured":"Jia Y et al (2014) Caffe: convolutional architecture for fast feature embedding. In: arXiv preprint \narXiv:1408.5093","DOI":"10.1145\/2647868.2654889"},{"key":"2829_CR25","unstructured":"Karimi K et al (2010) A performance comparison of CUDA and OpenCL. In: CoRR"},{"key":"2829_CR26","doi-asserted-by":"crossref","unstructured":"Kegel P et al (2012) dOpenCL: towards a uniform programming approach for distributed heterogeneous multi-\/many-core systems. In: IEEE 26th international parallel and distributed processing symposium workshops PhD forum, pp 174\u2013186","DOI":"10.1109\/IPDPSW.2012.16"},{"key":"2829_CR27","doi-asserted-by":"crossref","unstructured":"Kim J et al (2012) SnuCL: an OpenCL framework for heterogeneous CPU\/GPU clusters. In: Proceedings of the 26th ACM International Conference on Supercomputing, ICS, pp 341\u2013352","DOI":"10.1145\/2304576.2304623"},{"key":"2829_CR28","doi-asserted-by":"crossref","unstructured":"Kl\u00f6ckner A et al (2012) PyCUDA and PyOpenCL: a scripting-based approach to GPU run-time code generation. In: Parallel computing, pp 157 \u2013 174","DOI":"10.1016\/j.parco.2011.09.001"},{"key":"2829_CR29","unstructured":"Koch G et al (2015) Siamese neural networks for one-shot image recognition. In: ICML deep learning workshop"},{"key":"2829_CR30","doi-asserted-by":"crossref","unstructured":"Lee S et al (2010) OpenMPC: extended OpenMP programming and tuning for GPUs. In: ACM\/IEEE International Conference for high Performance Computing, Networking, Storage and Analysis, pp 1\u201311","DOI":"10.1109\/SC.2010.36"},{"key":"2829_CR31","unstructured":"McCabe T.J (1976) A complexity measure. In: IEEE transactions on software engineering, pp 308\u2013320"},{"key":"2829_CR32","doi-asserted-by":"crossref","unstructured":"Memeti S et al (2017) Benchmarking OpenCL, OpenACC, OpenMP, and CUDA: programming productivity, performance, and energy consumption. In: Workshop on adaptive resource management and scheduling for cloud computing, pp 1\u20136","DOI":"10.1145\/3110355.3110356"},{"issue":"1","key":"2829_CR33","doi-asserted-by":"publisher","first-page":"94","DOI":"10.1007\/s10766-017-0542-x","volume":"47","author":"A Moreton-Fernandez","year":"2017","unstructured":"Moreton-Fernandez A et al (2017) Multi-device controllers: a library to simplify parallel heterogeneous programming. Int J Parallel Program 47(1):94\u2013113","journal-title":"Int J Parallel Program"},{"key":"2829_CR34","unstructured":"Nugteren C (2016) CLBlast: a tuned OpenCL BLAS library. In: CoRR"},{"key":"2829_CR35","unstructured":"NVIDIA: nvidia-opencl-examples. \nhttps:\/\/github.com\/sschaetz\/nvidia-opencl-examples\n\n (2012)"},{"key":"2829_CR36","unstructured":"NVIDIA: OpenCL samples (2012). \nhttps:\/\/github.com\/sschaetz\/nvidia-opencl-examples\/"},{"key":"2829_CR37","unstructured":"NVIDIA: CUDA Toolkit 9.1  (2018). \nhttps:\/\/developer.nvidia.com\/cuda-toolkit"},{"key":"2829_CR38","unstructured":"NVIDIA: how to optimize data transfers in CUDA C\/C++ (2018). \nhttps:\/\/devblogs.nvidia.com\/how-optimize-data-transfers-cuda-cc\/"},{"key":"2829_CR39","unstructured":"NVIDIA: how to overlap data transfers in CUDA C\/C++ (2018). \nhttps:\/\/devblogs.nvidia.com\/how-overlap-data-transfers-cuda-cc\/"},{"key":"2829_CR40","unstructured":"NVIDIA: hyper-Q (2018). \nhttp:\/\/developer.download.nvidia.com\/compute\/DevZone\/C\/html_x64\/6_Advanced\/simpleHyperQ\/doc\/HyperQ.pdf"},{"key":"2829_CR41","unstructured":"NVIDIA: unified memory for CUDA beginners (2018). \nhttps:\/\/devblogs.nvidia.com\/unified-memory-cuda-beginners\/"},{"key":"2829_CR42","doi-asserted-by":"crossref","unstructured":"P\u00e9rez B et al (2016) Simplifying programming and load balancing of data parallel applications on heterogeneous systems. In: GPGPU, pp 42\u201351","DOI":"10.1145\/2884045.2884051"},{"key":"2829_CR43","unstructured":"Reyes R et al (2015) SYCL: single-source C++ accelerator programming. In: PARCO, pp 673\u2013682"},{"key":"2829_CR44","unstructured":"rharish100193: halstead metrics tool (2016). \nhttps:\/\/sourceforge.net\/projects\/halsteadmetricstool\/"},{"key":"2829_CR45","unstructured":"Rompf T et al (2015) Go meta! A case for generative programming and DSLs in performance critical systems. In: LIPIcs\u2013Leibniz international proceedings in informatics, pp 238\u2013261"},{"key":"2829_CR46","doi-asserted-by":"crossref","unstructured":"Rupp K et al (2010) Automatic performance optimization in ViennaCL for GPUs. In: POOSC, pp 1\u20136","DOI":"10.1145\/2039312.2039318"},{"key":"2829_CR47","doi-asserted-by":"crossref","unstructured":"Spafford K et al (2010) Maestro: data orchestration and tuning for OpenCL devices. In: Euro-Par\u2013parallel processing. Springer, Berlin, pp 275\u2013286","DOI":"10.1007\/978-3-642-15291-7_26"},{"key":"2829_CR48","unstructured":"Standard C++ foundation foundation members: ISO C++ (2018). \nhttps:\/\/isocpp.org"},{"key":"2829_CR49","doi-asserted-by":"crossref","unstructured":"Steuwer M et al (2011) SkelCL\u2014a portable skeleton library for high-level GPU programming. In: IEEE IPDPS workshops, pp 1176\u20131182","DOI":"10.1109\/IPDPS.2011.269"},{"key":"2829_CR50","unstructured":"Steve Arnold: CCCC project documentation (2005). \nhttp:\/\/sarnold.github.io\/cccc\/"},{"key":"2829_CR51","unstructured":"Szuppe J (2016) Boost.Compute: a parallel computing library for C++ based on OpenCL. In: IWOCL, pp 1\u201339"},{"key":"2829_CR52","doi-asserted-by":"crossref","unstructured":"Tejedor E et al (2011) ClusterSs: a task-based programming model for clusters. In: Proceedings of the 20th international symposium on high performance distributed computing, HPDC, pp 267\u2013268","DOI":"10.1145\/1996130.1996168"},{"key":"2829_CR53","doi-asserted-by":"crossref","unstructured":"Tillet P, Cox D (2017) Input-aware auto-tuning of compute-bound HPC kernels. In: SC, pp 1\u201312","DOI":"10.1145\/3126908.3126939"},{"key":"2829_CR54","unstructured":"Vinas M et al (2015) Improving OpenCL programmability with the heterogeneous programming library. In: International Conference on Computational Science, ICCS, pp 110 \u2013 119"},{"key":"2829_CR55","doi-asserted-by":"crossref","unstructured":"Wienke S et al (2012) OpenACC\u2014first experiences with real-world applications. In: Euro-Par parallel processing, pp 859\u2013870","DOI":"10.1007\/978-3-642-32820-6_85"}],"container-title":["The Journal of Supercomputing"],"original-title":[],"language":"en","link":[{"URL":"http:\/\/link.springer.com\/content\/pdf\/10.1007\/s11227-019-02829-2.pdf","content-type":"application\/pdf","content-version":"vor","intended-application":"text-mining"},{"URL":"http:\/\/link.springer.com\/article\/10.1007\/s11227-019-02829-2\/fulltext.html","content-type":"text\/html","content-version":"vor","intended-application":"text-mining"},{"URL":"http:\/\/link.springer.com\/content\/pdf\/10.1007\/s11227-019-02829-2.pdf","content-type":"application\/pdf","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2020,6,5]],"date-time":"2020-06-05T08:30:48Z","timestamp":1591345848000},"score":1,"resource":{"primary":{"URL":"http:\/\/link.springer.com\/10.1007\/s11227-019-02829-2"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2019,3,30]]},"references-count":55,"journal-issue":{"issue":"7","published-print":{"date-parts":[[2020,7]]}},"alternative-id":["2829"],"URL":"https:\/\/doi.org\/10.1007\/s11227-019-02829-2","relation":{},"ISSN":["0920-8542","1573-0484"],"issn-type":[{"value":"0920-8542","type":"print"},{"value":"1573-0484","type":"electronic"}],"subject":[],"published":{"date-parts":[[2019,3,30]]},"assertion":[{"value":"30 March 2019","order":1,"name":"first_online","label":"First Online","group":{"name":"ArticleHistory","label":"Article History"}}]}}