{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,11]],"date-time":"2026-05-11T11:00:22Z","timestamp":1778497222158,"version":"3.51.4"},"reference-count":60,"publisher":"Association for Computing Machinery (ACM)","issue":"12","content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["Proc. VLDB Endow."],"published-print":{"date-parts":[[2021,7]]},"abstract":"<jats:p>Optimizing machine learning (ML) workloads on structured data is a key concern for data platforms. One class of optimizations called \"factorized ML\" helps reduce ML runtimes over multi-table datasets by pushing ML computations down through joins, avoiding the need to materialize such joins. The recent Morpheus system<jats:italic>automated<\/jats:italic>factorized ML to<jats:italic>any<\/jats:italic>ML algorithm expressible in linear algebra (LA). But all such prior factorized ML\/LA stacks are restricted by their chosen programming language (PL) and runtime environment, limiting their reach in emerging industrial data science environments with many PLs (R, Python, etc.) and even cross-PL analytics workflows. Re-implementing Morpheus from scratch in each PL\/environment is a<jats:italic>massive developability overhead<\/jats:italic>for implementation, testing, and maintenance. We tackle this challenge by proposing a new system architecture,<jats:italic>Trinity<\/jats:italic>, to enable factorized LA logic to be<jats:italic>written only once<\/jats:italic>and easily<jats:italic>reused across many PLs\/LA tools in one go<\/jats:italic>. To do this in an extensible and efficient manner without costly data copies, Trinity leverages and extends an emerging industrial polyglot compiler and runtime, Oracle's GraalVM. Trinity enables factorized LA in multiple PLs and even cross-PL workflows. Experiments with real datasets show that Trinity is significantly faster than materialized execution (&gt; 8x speedups in some cases), while being largely competitive to a prior single PL-focused Morpheus stack.<\/jats:p>","DOI":"10.14778\/3476311.3476372","type":"journal-article","created":{"date-parts":[[2021,10,28]],"date-time":"2021-10-28T22:48:56Z","timestamp":1635461336000},"page":"2918-2931","source":"Crossref","is-referenced-by-count":4,"title":["Towards a polyglot framework for factorized ML"],"prefix":"10.14778","volume":"14","author":[{"given":"David","family":"Justo","sequence":"first","affiliation":[{"name":"University of California"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Shaoqing","family":"Yi","sequence":"additional","affiliation":[{"name":"University of California"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Lukas","family":"Stadler","sequence":"additional","affiliation":[{"name":"Oracle Labs"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Nadia","family":"Polikarpova","sequence":"additional","affiliation":[{"name":"University of California"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Arun","family":"Kumar","sequence":"additional","affiliation":[{"name":"University of California"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2021,10,28]]},"reference":[{"key":"e_1_2_1_1_1","unstructured":"[n.d.]. Common Language Runtime (CLR) overview - .NET Framework. https:\/\/docs.microsoft.com\/en-us\/dotnet\/standard\/clr. Accessed: 2020-03-01. [n.d.]. Common Language Runtime (CLR) overview - .NET Framework. https:\/\/docs.microsoft.com\/en-us\/dotnet\/standard\/clr. Accessed: 2020-03-01."},{"key":"e_1_2_1_2_1","unstructured":"[n.d.]. Embed Languages with the GraalVM Polyglot API. https:\/\/www.graalvm.org\/docs\/reference-manual\/embed\/. Accessed: 2020-03-01. [n.d.]. Embed Languages with the GraalVM Polyglot API. https:\/\/www.graalvm.org\/docs\/reference-manual\/embed\/. Accessed: 2020-03-01."},{"key":"e_1_2_1_3_1","unstructured":"[n.d.]. Fallback (GraalVM Truffle Java API Reference). https:\/\/www.graalvm.org\/truffle\/javadoc\/com\/oracle\/truffle\/api\/dsl\/Fallback.html. Accessed: 2020-03-01. [n.d.]. Fallback (GraalVM Truffle Java API Reference). https:\/\/www.graalvm.org\/truffle\/javadoc\/com\/oracle\/truffle\/api\/dsl\/Fallback.html. Accessed: 2020-03-01."},{"key":"e_1_2_1_4_1","unstructured":"[n.d.]. FastR GitHub Repository. https:\/\/github.com\/oracle\/fastr\/. Accessed: 2020-03-01. [n.d.]. FastR GitHub Repository. https:\/\/github.com\/oracle\/fastr\/. Accessed: 2020-03-01."},{"key":"e_1_2_1_5_1","unstructured":"[n.d.]. GraalJS GitHub Repository. https:\/\/github.com\/graalvm\/graaljs. Accessed: 2020-03-01. [n.d.]. GraalJS GitHub Repository. https:\/\/github.com\/graalvm\/graaljs. Accessed: 2020-03-01."},{"key":"e_1_2_1_6_1","unstructured":"[n.d.]. GraalVM Python Implementation GitHub Repository. https:\/\/github.com\/graalvm\/graalpython. Accessed: 2020-03-01. [n.d.]. GraalVM Python Implementation GitHub Repository. https:\/\/github.com\/graalvm\/graalpython. Accessed: 2020-03-01."},{"key":"e_1_2_1_7_1","unstructured":"[n.d.]. grCuda Documentation. https:\/\/github.com\/NVIDIA\/grcuda\/blob\/master\/docs\/language.md. Accessed: 2020-03-01. [n.d.]. grCuda Documentation. https:\/\/github.com\/NVIDIA\/grcuda\/blob\/master\/docs\/language.md. Accessed: 2020-03-01."},{"key":"e_1_2_1_8_1","unstructured":"[n.d.]. grCuda GitHub Repository. https:\/\/github.com\/NVIDIA\/grcuda. Accessed: 2020-03-01. [n.d.]. grCuda GitHub Repository. https:\/\/github.com\/NVIDIA\/grcuda. Accessed: 2020-03-01."},{"key":"e_1_2_1_9_1","unstructured":"[n.d.]. Interactive Matrix Programming With SAS IML Software. https:\/\/www.sas.com\/en_us\/software\/iml.html. Accessed: 2020-03-01. [n.d.]. Interactive Matrix Programming With SAS IML Software. https:\/\/www.sas.com\/en_us\/software\/iml.html. Accessed: 2020-03-01."},{"key":"e_1_2_1_10_1","unstructured":"[n.d.]. InteropLibrary (GraalVM Truffle Reference). https:\/\/www.graalvm.org\/truffle\/javadoc\/com\/oracle\/truffle\/api\/interop\/InteropLibrary.html. Accessed: 2020-03-01. [n.d.]. InteropLibrary (GraalVM Truffle Reference). https:\/\/www.graalvm.org\/truffle\/javadoc\/com\/oracle\/truffle\/api\/interop\/InteropLibrary.html. Accessed: 2020-03-01."},{"key":"e_1_2_1_11_1","unstructured":"[n.d.]. Jython Project Homepage. https:\/\/www.jython.org\/. Accessed: 2020-03-01. [n.d.]. Jython Project Homepage. https:\/\/www.jython.org\/. Accessed: 2020-03-01."},{"key":"e_1_2_1_12_1","unstructured":"[n.d.]. Math.js Project Homepage. https:\/\/mathjs.org\/. Accessed: 2020-03-01. [n.d.]. Math.js Project Homepage. https:\/\/mathjs.org\/. Accessed: 2020-03-01."},{"key":"e_1_2_1_13_1","unstructured":"[n.d.]. MATLAB Homepage. https:\/\/www.mathworks.com\/products\/matlab.html. Accessed: 2020-03-01. [n.d.]. MATLAB Homepage. https:\/\/www.mathworks.com\/products\/matlab.html. Accessed: 2020-03-01."},{"key":"e_1_2_1_14_1","volume-title":"ParrotVM Documentation - HLLs and Interoperation"},{"key":"e_1_2_1_15_1","unstructured":"[n.d.]. The R Project for Statistical Computing. https:\/\/www.R-project.org\/. Accessed: 2020-03-01. [n.d.]. The R Project for Statistical Computing. https:\/\/www.R-project.org\/. Accessed: 2020-03-01."},{"key":"e_1_2_1_16_1","unstructured":"[n.d.]. SimpleLanguage GitHub Repository. https:\/\/github.com\/graalvm\/simplelanguage\/blob\/master\/language\/src\/main\/java\/com\/oracle\/truffle\/sl\/nodes\/expression\/SLAddNode.java. Accessed: 2020-03-01. [n.d.]. SimpleLanguage GitHub Repository. https:\/\/github.com\/graalvm\/simplelanguage\/blob\/master\/language\/src\/main\/java\/com\/oracle\/truffle\/sl\/nodes\/expression\/SLAddNode.java. Accessed: 2020-03-01."},{"key":"e_1_2_1_17_1","unstructured":"[n.d.]. Specialization (GraalVM Truffle Java API Reference). https:\/\/www.graalvm.org\/truffle\/javadoc\/com\/oracle\/truffle\/api\/dsl\/Specialization.html. Accessed: 2020-03-01. [n.d.]. Specialization (GraalVM Truffle Java API Reference). https:\/\/www.graalvm.org\/truffle\/javadoc\/com\/oracle\/truffle\/api\/dsl\/Specialization.html. Accessed: 2020-03-01."},{"key":"e_1_2_1_18_1","unstructured":"[n.d.]. TruffleLibraries Documentation. https:\/\/github.com\/oracle\/graal\/blob\/master\/truffle\/docs\/TruffleLibraries.md. Accessed: 2020-03-01. [n.d.]. TruffleLibraries Documentation. https:\/\/github.com\/oracle\/graal\/blob\/master\/truffle\/docs\/TruffleLibraries.md. Accessed: 2020-03-01."},{"key":"e_1_2_1_19_1","unstructured":"[n.d.]. Walnut Project Homepage on Oracle Labs. https:\/\/labs.oracle.com\/pls\/apex\/f?p=LABS:project_details:0:15. Accessed: 2020-03-01. [n.d.]. Walnut Project Homepage on Oracle Labs. https:\/\/labs.oracle.com\/pls\/apex\/f?p=LABS:project_details:0:15. Accessed: 2020-03-01."},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/3196959.3196960"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.4230\/LIPIcs.ECOOP.2017.4"},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/2038037.1941561"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.14778\/3137628.3137633"},{"key":"e_1_2_1_24_1","unstructured":"Lin Clark. [n.d.]. WebAssembly Interface Types: Interoperate with All the Things! - Mozilla Hacks - the Web developer blog. https:\/\/hacks.mozilla.org\/2019\/08\/webassembly-interface-types\/. Accessed: 2020-03-01. Lin Clark. [n.d.]. WebAssembly Interface Types: Interoperate with All the Things! - Mozilla Hacks - the Web developer blog. https:\/\/hacks.mozilla.org\/2019\/08\/webassembly-interface-types\/. Accessed: 2020-03-01."},{"key":"e_1_2_1_25_1","volume-title":"Polyglot Instrumentation Support for Debuggers and other Tools. CoRR abs\/1803.10201","author":"Van de Vanter Michael L.","year":"2018"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/3211346.3211354"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.14778\/3352063.3352097"},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/1377492.1377493"},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/3201898"},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/2936313.2816714"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/2936313.2816714"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/3070607.3070608"},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.14778\/2824032.2824087"},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/2723372.2723713"},{"key":"e_1_2_1_36_1","doi-asserted-by":"publisher","DOI":"10.14778\/3342263.3342633"},{"key":"e_1_2_1_37_1","doi-asserted-by":"publisher","DOI":"10.1145\/3299869.3319878"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/2500828.2500838"},{"key":"e_1_2_1_40_1","doi-asserted-by":"crossref","unstructured":"Todd M Malone. 2014. Interoperability in Programming Languages. Todd M Malone. 2014. Interoperability in Programming Languages.","DOI":"10.61366\/2576-2176.1014"},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/3328433.3328458"},{"key":"e_1_2_1_42_1","doi-asserted-by":"publisher","DOI":"10.5555\/1996313"},{"key":"e_1_2_1_43_1","doi-asserted-by":"publisher","DOI":"10.1145\/2637365.2517228"},{"key":"e_1_2_1_44_1","doi-asserted-by":"publisher","DOI":"10.5555\/2886196"},{"key":"e_1_2_1_45_1","doi-asserted-by":"publisher","DOI":"10.14778\/3213880.3213890"},{"key":"e_1_2_1_46_1","volume-title":"Weld: ACommon Runtime for High Performance Data Analytics.","author":"Palkar Shoumik","year":"2016"},{"key":"e_1_2_1_47_1","doi-asserted-by":"publisher","DOI":"10.14778\/2535573.2488340"},{"key":"e_1_2_1_48_1","doi-asserted-by":"publisher","DOI":"10.1145\/3397537.3399577"},{"key":"e_1_2_1_49_1","doi-asserted-by":"publisher","DOI":"10.1145\/3299869.3324961"},{"key":"e_1_2_1_50_1","doi-asserted-by":"publisher","DOI":"10.1145\/2882903.2882939"},{"key":"e_1_2_1_51_1","doi-asserted-by":"publisher","DOI":"10.1145\/3368826.3377923"},{"key":"e_1_2_1_52_1","volume-title":"Machine Learning for the Web and Beyond","author":"Smilkov Daniel","year":"1901"},{"key":"e_1_2_1_53_1","doi-asserted-by":"publisher","DOI":"10.1145\/2584665"},{"key":"e_1_2_1_54_1","doi-asserted-by":"publisher","DOI":"10.1145\/2637365.2517220"},{"key":"e_1_2_1_55_1","doi-asserted-by":"publisher","DOI":"10.1145\/3318464.3389701"},{"key":"e_1_2_1_56_1","doi-asserted-by":"publisher","DOI":"10.5555\/3275366.3284963"},{"key":"e_1_2_1_57_1","doi-asserted-by":"publisher","DOI":"10.1038\/s41592-019-0686-2"},{"key":"e_1_2_1_58_1","doi-asserted-by":"publisher","DOI":"10.1145\/3341700"},{"key":"e_1_2_1_59_1","doi-asserted-by":"publisher","DOI":"10.1145\/2384716.2384723"},{"key":"e_1_2_1_60_1","doi-asserted-by":"publisher","DOI":"10.1145\/3140587.3062381"},{"key":"e_1_2_1_61_1","doi-asserted-by":"publisher","DOI":"10.1145\/2509578.2509581"},{"key":"e_1_2_1_62_1","doi-asserted-by":"publisher","DOI":"10.1145\/2480360.2384587"}],"container-title":["Proceedings of the VLDB Endowment"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.14778\/3476311.3476372","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2023,11,11]],"date-time":"2023-11-11T22:15:14Z","timestamp":1699740914000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.14778\/3476311.3476372"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2021,7]]},"references-count":60,"journal-issue":{"issue":"12","published-print":{"date-parts":[[2021,7]]}},"alternative-id":["10.14778\/3476311.3476372"],"URL":"https:\/\/doi.org\/10.14778\/3476311.3476372","relation":{},"ISSN":["2150-8097"],"issn-type":[{"value":"2150-8097","type":"print"}],"subject":[],"published":{"date-parts":[[2021,7]]}}}