{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,11,18]],"date-time":"2025-11-18T09:34:39Z","timestamp":1763458479420,"version":"3.45.0"},"reference-count":50,"publisher":"Association for Computing Machinery (ACM)","issue":"6","license":[{"start":{"date-parts":[[2017,12,5]],"date-time":"2017-12-05T00:00:00Z","timestamp":1512432000000},"content-version":"vor","delay-in-days":389,"URL":"http:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"funder":[{"DOI":"10.13039\/100000001","name":"National Science Foundation","doi-asserted-by":"publisher","award":["HCC 1011444"],"award-info":[{"award-number":["HCC 1011444"]}],"id":[{"id":"10.13039\/100000001","id-type":"DOI","asserted-by":"publisher"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["ACM Trans. Graph."],"published-print":{"date-parts":[[2016,11,11]]},"abstract":"<jats:p>This paper introduces a novel domain-specific compiler, which translates visual computing programs written in dynamic languages to highly efficient code. We define \"dynamic\" languages as those such as Python and MATLAB, which feature dynamic typing and flexible array operations. Such language features can be useful for rapid prototyping, however, the dynamic computation model introduces significant overheads in program execution time. We introduce a compiler framework for accelerating visual computing programs, such as graphics and vision programs, written in generalpurpose dynamic languages. Our compiler allows substantial performance gains (frequently orders of magnitude) over general compilers for dynamic languages by specializing the compiler for visual computation. Specifically, our compiler takes advantage of three key properties of visual computing programs, which permit optimizations: (1) many array data structures have small, constant, or bounded size, (2) many operations on visual data are supported in hardware or are embarrassingly parallel, and (3) humans are not sensitive to small numerical errors in visual outputs due to changing floating-point precisions. Our compiler integrates program transformations that have been described previously, and improves existing transformations to handle visual programs that perform complicated array computations. In particular, we show that dependent type analysis can be used to infer sizes and guide optimizations for many small-sized array operations that arise in visual programs. Programmers who are not experts on visual computation can use our compiler to produce more efficient Python programs than if they write manually parallelized C, with fewer lines of application logic.<\/jats:p>","DOI":"10.1145\/2980179.2982403","type":"journal-article","created":{"date-parts":[[2016,11,11]],"date-time":"2016-11-11T12:02:54Z","timestamp":1478865774000},"page":"1-13","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":4,"title":["VizGen"],"prefix":"10.1145","volume":"35","author":[{"given":"Yuting","family":"Yang","sequence":"first","affiliation":[{"name":"University of Virginia"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Sam","family":"Prestwood","sequence":"additional","affiliation":[{"name":"University of Virginia"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Connelly","family":"Barnes","sequence":"additional","affiliation":[{"name":"University of Virginia"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2016,12,5]]},"reference":[{"key":"e_1_2_2_1_1","doi-asserted-by":"publisher","DOI":"10.1145\/1778765.1778766"},{"key":"e_1_2_2_2_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.ascom.2014.12.001"},{"key":"e_1_2_2_3_1","doi-asserted-by":"publisher","unstructured":"Ammons G. and Larus J. R. 1998. Improving data-flow analysis with path profiles. In ACM PLDI. 10.1145\/277650.277665","DOI":"10.1145\/277650.277665"},{"key":"e_1_2_2_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/2628071.2628092"},{"key":"e_1_2_2_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/291251.289451"},{"key":"e_1_2_2_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/268946.268958"},{"key":"e_1_2_2_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/1531326.1531330"},{"key":"e_1_2_2_8_1","doi-asserted-by":"publisher","DOI":"10.1109\/MCSE.2010.118"},{"volume-title":"Proc. 9th Python in Science Conf.","author":"Bergstra J.","key":"e_1_2_2_9_1","unstructured":"Bergstra, J., Breuleux, O., Bastien, F., Lamblin, P., Pascanu, R., Desjardins, G., Turian, J., Warde-Farley, D., and Bengio, Y. 2010. Theano: A cpu and gpu math compiler in python. In Proc. 9th Python in Science Conf."},{"key":"e_1_2_2_10_1","volume-title":"Julia: A fast dynamic language for technical computing. arXiv preprint arXiv:1209.5145.","author":"Bezanson J.","year":"2012","unstructured":"Bezanson, J., Karpinski, S., Shah, V. B., and Edelman, A. 2012. Julia: A fast dynamic language for technical computing. arXiv preprint arXiv:1209.5145."},{"key":"e_1_2_2_11_1","doi-asserted-by":"publisher","DOI":"10.1109\/2.546612"},{"key":"e_1_2_2_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/1565824.1565827"},{"key":"e_1_2_2_13_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICSE.2009.5070516"},{"key":"e_1_2_2_14_1","doi-asserted-by":"publisher","DOI":"10.1109\/71.372771"},{"key":"e_1_2_2_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/1276377.1276506"},{"key":"e_1_2_2_16_1","doi-asserted-by":"publisher","unstructured":"Condit J. Harren M. Anderson Z. Gay D. and Necula G. C. 2007. Dependent types for low-level programming. In Programming Languages and Systems. Springer 520--535.","DOI":"10.5555\/1762174.1762221"},{"key":"e_1_2_2_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/1531743.1531772"},{"key":"e_1_2_2_18_1","doi-asserted-by":"publisher","unstructured":"De Moura L. and Bj\u00f8rner N. 2008. Z3: An efficient smt solver. In Tools and Algorithms for the Construction and Analysis of Systems. Springer 337--340.","DOI":"10.5555\/1792734.1792766"},{"key":"e_1_2_2_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/2499370.2462166"},{"key":"e_1_2_2_20_1","unstructured":"Dufour M. and Coughlan J. 2013. Shedskin: an experimental (restricted-python)-to-c++ compiler. https:\/\/code.google.com\/p\/shedskin\/wiki\/docs."},{"key":"e_1_2_2_21_1","volume-title":"Proceedings Bridges","author":"Elliott C.","year":"2001","unstructured":"Elliott, C. Functional image synthesis. In Proceedings Bridges 2001, Mathematical Connections in Art, Music, and Science."},{"key":"e_1_2_2_22_1","volume-title":"Fftw: An adaptive software architecture for the fft. In 1998 IEEE Acoustics, Speech and Signal Processing","author":"Frigo M.","year":"1998","unstructured":"Frigo, M., and Johnson, S. G. 1998. Fftw: An adaptive software architecture for the fft. In 1998 IEEE Acoustics, Speech and Signal Processing, vol. 3."},{"key":"e_1_2_2_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/1088149.1088197"},{"key":"e_1_2_2_24_1","doi-asserted-by":"publisher","unstructured":"Gao G. Olsen R. Sarkar V. and Thekkath R. 1993. Collective loop fusion for array contraction. In Languages and Compilers for Parallel Computing. Springer 281--295.","DOI":"10.5555\/645670.665368"},{"key":"e_1_2_2_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/1735688.1735695"},{"key":"e_1_2_2_26_1","doi-asserted-by":"publisher","unstructured":"Graham S. L. Kessler P. B. and McKusick M. K. 1982. gprof: a call graph execution profiler (with retrospective). In ACM SIGPLAN PLDI. 10.1145\/872726.806987","DOI":"10.1145\/872726.806987"},{"key":"e_1_2_2_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/2544137.2544160"},{"key":"e_1_2_2_28_1","doi-asserted-by":"publisher","DOI":"10.1088\/1749-4680\/8\/1\/014001"},{"key":"e_1_2_2_29_1","doi-asserted-by":"publisher","DOI":"10.1016\/S0950-5849(01)00189-6"},{"key":"e_1_2_2_30_1","unstructured":"Harris C. and Stephens M. 1988. A combined corner and edge detector. In Alvey vision conference vol. 15 Citeseer 50."},{"key":"e_1_2_2_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/2304576.2304619"},{"key":"e_1_2_2_32_1","doi-asserted-by":"publisher","unstructured":"Karcher T. and Pankratius V. 2011. Run-time automatic performance tuning for multicore applications. In Euro-Par 2011 Parallel Processing. Springer 3--14.","DOI":"10.5555\/2033345.2033348"},{"volume-title":"Maximizing loop parallelism and improving data locality via loop fusion and distribution","author":"Kennedy K.","key":"e_1_2_2_33_1","unstructured":"Kennedy, K., and McKinley, K. S. 1994. Maximizing loop parallelism and improving data locality via loop fusion and distribution. Springer."},{"key":"e_1_2_2_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/1273442.1250761"},{"key":"e_1_2_2_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/2833157.2833162"},{"key":"e_1_2_2_36_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.jpdc.2007.01.001"},{"key":"e_1_2_2_37_1","doi-asserted-by":"publisher","DOI":"10.1145\/2694344.2694364"},{"key":"e_1_2_2_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/2897824.2925952"},{"key":"e_1_2_2_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/2010324.1964963"},{"key":"e_1_2_2_40_1","volume-title":"Innovative Parallel Computing (InPar)","author":"Pharr M.","year":"2012","unstructured":"Pharr, M., and Mark, W. R. 2012. ispc: A spmd compiler for high-performance cpu programming. In Innovative Parallel Computing (InPar), 2012, IEEE, 1--13."},{"key":"e_1_2_2_41_1","unstructured":"Quora: How many photos are uploaded to facebook every day? https:\/\/www.quora.com\/How-many-photos-are-uploaded-to-Facebook-each-day."},{"key":"e_1_2_2_42_1","doi-asserted-by":"publisher","DOI":"10.1145\/2491956.2462176"},{"key":"e_1_2_2_43_1","unstructured":"Salib M. 2004. Starkiller: A static type inferencer and compiler for Python. PhD thesis Citeseer."},{"key":"e_1_2_2_44_1","doi-asserted-by":"publisher","DOI":"10.1145\/192161.192191"},{"key":"e_1_2_2_45_1","doi-asserted-by":"publisher","DOI":"10.2196\/jmir.2237"},{"key":"e_1_2_2_46_1","doi-asserted-by":"publisher","DOI":"10.1145\/2370816.2370825"},{"key":"e_1_2_2_47_1","doi-asserted-by":"publisher","DOI":"10.1145\/1989493.1989508"},{"key":"e_1_2_2_48_1","doi-asserted-by":"publisher","DOI":"10.1016\/S0167-8191(00)00087-9"},{"key":"e_1_2_2_49_1","doi-asserted-by":"publisher","DOI":"10.1145\/277652.277732"},{"key":"e_1_2_2_50_1","doi-asserted-by":"publisher","DOI":"10.1145\/292540.292560"}],"container-title":["ACM Transactions on Graphics"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/2980179.2982403","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/2980179.2982403","content-type":"application\/pdf","content-version":"vor","intended-application":"syndication"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/2980179.2982403","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,11,18]],"date-time":"2025-11-18T09:29:59Z","timestamp":1763458199000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/2980179.2982403"}},"subtitle":["accelerating visual computing prototypes in dynamic languages"],"short-title":[],"issued":{"date-parts":[[2016,11,11]]},"references-count":50,"journal-issue":{"issue":"6","published-print":{"date-parts":[[2016,11,11]]}},"alternative-id":["10.1145\/2980179.2982403"],"URL":"https:\/\/doi.org\/10.1145\/2980179.2982403","relation":{},"ISSN":["0730-0301","1557-7368"],"issn-type":[{"type":"print","value":"0730-0301"},{"type":"electronic","value":"1557-7368"}],"subject":[],"published":{"date-parts":[[2016,11,11]]},"assertion":[{"value":"2016-12-05","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}