{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,10,6]],"date-time":"2026-10-06T07:33:23Z","timestamp":1791272003133,"version":"4.1.0"},"reference-count":28,"publisher":"Association for Computing Machinery (ACM)","issue":"3","license":[{"start":{"date-parts":[[2016,4,8]],"date-time":"2016-04-08T00:00:00Z","timestamp":1460073600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["ACM Trans. Program. Lang. Syst."],"published-print":{"date-parts":[[2016,5,2]]},"abstract":"<jats:p>Efficient memory allocation is crucial for data-intensive applications, as a smaller memory footprint ensures better cache performance and allows one to run a larger problem size given a fixed amount of main memory. In this article, we describe a new automatic storage optimization technique to minimize the dimensionality and storage requirements of arrays used in sequences of loop nests with a predetermined schedule. We formulate the problem of intra-array storage optimization as one of finding the right storage partitioning hyperplanes: each storage partition corresponds to a single storage location. Our heuristic is driven by a dual-objective function that minimizes both the dimensionality of the mapping and the extents along those dimensions. The technique is dimension optimal for most codes encountered in practice. The storage requirements of the mappings obtained also are asymptotically better than those obtained by any existing schedule-dependent technique. Storage reduction factors and other results that we report from an implementation of our technique demonstrate its effectiveness on several real-world examples drawn from the domains of image processing, stencil computations, high-performance computing, and the class of tiled codes in general.<\/jats:p>","DOI":"10.1145\/2845078","type":"journal-article","created":{"date-parts":[[2016,4,8]],"date-time":"2016-04-08T23:08:32Z","timestamp":1460156912000},"page":"1-23","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":7,"title":["Automatic Storage Optimization for Arrays"],"prefix":"10.1145","volume":"38","author":[{"given":"Somashekaracharya G.","family":"Bhaskaracharya","sequence":"first","affiliation":[{"name":"Indian Institute of Science, Bangalore, India"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Uday","family":"Bondhugula","sequence":"additional","affiliation":[{"name":"Indian Institute of Science, Bangalore, India"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Albert","family":"Cohen","sequence":"additional","affiliation":[{"name":"INRIA, Paris, France"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2016,4,8]]},"reference":[{"key":"e_1_2_1_1_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-00722-4_15"},{"key":"e_1_2_1_2_1","doi-asserted-by":"publisher","DOI":"10.5555\/1177220"},{"key":"e_1_2_1_3_1","doi-asserted-by":"crossref","unstructured":"Christophe Alias. 2007. Bee+Cl@k. Available at http:\/\/compsys-tools.ens-lyon.fr\/.","DOI":"10.1145\/1254766.1254778"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/1254766.1254778"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1109\/SC.2012.107"},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.5555\/1788374.1788386"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1109\/TVLSI.2008.2002049"},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1109\/TC.2005.167"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1016\/S0167-8191(97)00089-6"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1007\/BF01407835"},{"key":"e_1_2_1_11_1","volume-title":"Retrieved","author":"GNU.","year":"2010","unstructured":"GNU. 2010. GLPK (GNU Linear Programming Kit). Retrieved February 27, 2016, from https:\/\/www.gnu. org\/software\/glpk\/."},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/2544137.2544160"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.5244\/C.2.23"},{"key":"e_1_2_1_14_1","volume-title":"Retrieved","year":"2013","unstructured":"Intel. 2013. Using Intel VTune Amplifier XE to Tune Software on the Intel Xeon Processor E5 Family. Retrieved February 27, 2016, from https:\/\/software.intel.com\/en-us\/articles\/using-intel-vtune-amplifier-xe-to-tune-software-on-the-intel-xeon-processor-e5-family."},{"key":"e_1_2_1_15_1","volume-title":"Intel VTune Amplifier XE 2015 (build 367957)","year":"2015","unstructured":"Intel. 2015. Intel VTune Amplifier XE 2015 (build 367957). Retrieved December 20, 2015, from https:\/\/software.intel.com\/en-us\/intel-vtune-amplifier-xe."},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1016\/S0167-8191(98)00029-5"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/2694344.2694364"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/2739047"},{"key":"e_1_2_1_19_1","volume-title":"PLUTO: An Automatic Polyhedral parallelizer and locality optimizer for multicores.","year":"2008","unstructured":"Pluto. 2008. PLUTO: An Automatic Polyhedral parallelizer and locality optimizer for multicores. Available at http:\/\/pluto-compiler.sourceforge.net."},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/365151.365152"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/2491956.2462176"},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.5555\/17634"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/291069.291015"},{"key":"e_1_2_1_24_1","volume-title":"The Lattice Boltzmann Equation: For Fluid Dynamics and Beyond","author":"Succi S.","unstructured":"S. Succi. 2001. The Lattice Boltzmann Equation: For Fluid Dynamics and Beyond. Oxford University Press."},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/1286821.1286825"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/378795.378852"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.5555\/1888390.1888455"},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.5555\/646668.700629"}],"container-title":["ACM Transactions on Programming Languages and Systems"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/2845078","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/2845078","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T05:48:51Z","timestamp":1750225731000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/2845078"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2016,4,8]]},"references-count":28,"journal-issue":{"issue":"3","published-print":{"date-parts":[[2016,5,2]]}},"alternative-id":["10.1145\/2845078"],"URL":"https:\/\/doi.org\/10.1145\/2845078","relation":{},"ISSN":["0164-0925","1558-4593"],"issn-type":[{"value":"0164-0925","type":"print"},{"value":"1558-4593","type":"electronic"}],"subject":[],"published":{"date-parts":[[2016,4,8]]},"assertion":[{"value":"2015-02-01","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2015-11-01","order":1,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2016-04-08","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}