{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/allo-a-programming-model-for-composable","title":"Allo: A Programming Model for Composable Accelerator Design","arxiv_id":"2404.04815","date":"2024-04-07","proceeding":null,"authors":["Hongzheng Chen","Niansong Zhang","Shaojie Xiang","Zhichen Zeng","Mengjia Dai","Zhiru Zhang"],"abstract":"Special-purpose hardware accelerators are increasingly pivotal for sustaining performance improvements in emerging applications, especially as the benefits of technology scaling continue to diminish. However, designers currently lack effective tools and methodologies to construct complex, high-performance accelerator architectures in a productive manner. Existing high-level synthesis (HLS) tools often require intrusive source-level changes to attain satisfactory quality of results. Despite the introduction of several new accelerator design languages (ADLs) aiming to enhance or replace HLS, their advantages are more evident in relatively simple applications with a single kernel. Existing ADLs prove less effective for realistic hierarchical designs with multiple kernels, even if the design hierarchy is flattened. In this paper, we introduce Allo, a composable programming model for efficient spatial accelerator design. Allo decouples hardware customizations, including compute, memory, communication, and data type from algorithm specification, and encapsulates them as a set of customization primitives. Allo preserves the hierarchical structure of an input program by combining customizations from different functions in a bottom-up, type-safe manner. This approach facilitates holistic optimizations that span across function boundaries. We conduct comprehensive experiments on commonly-used HLS benchmarks and several realistic deep learning models. Our evaluation shows that Allo can outperform state-of-the-art HLS tools and ADLs on all test cases in the PolyBench. For the GPT2 model, the inference latency of the Allo generated accelerator is 1.7x faster than the NVIDIA A100 GPU with 5.4x higher energy efficiency, demonstrating the capability of Allo to handle large-scale designs.","url_abs":"https://arxiv.org/abs/2404.04815v1","url_pdf":"https://arxiv.org/pdf/2404.04815v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"allo-a-programming-model-for-composable","repo_url":"https://github.com/cornell-zhang/allo","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"allo-a-programming-model-for-composable","repo_url":"https://github.com/cornell-zhang/allo-pldi24-artifact","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":null,"task_name":"GPU"},{"task_slug":"high-level-synthesis","task_name":"High-Level Synthesis"},{"task_slug":"model","task_name":"model"}],"methods":[{"method_slug":"set","method_name":"SET"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2404.04815","atlas_url":"https://app.syntology.ai/?focus=2404.04815","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2404.04815"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/cornell-zhang/allo-pldi24-artifact","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/cornell-zhang/allo","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran":13,"unverified":7},"by_repo_kind":{"official":{"samples":20,"ran":13,"repositories":2}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"156caede4d5f8d82","entry":"add","repo":"cornell-zhang/allo","repo_kind":"official","path":"allo/dsl.py","file_url":"https://github.com/cornell-zhang/allo/blob/HEAD/allo/dsl.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"156caede4d5f8d82"}},{"code_sha256_prefix":"4856dc783b43f8f1","entry":"atax_np","repo":"cornell-zhang/allo-pldi24-artifact","repo_kind":"official","path":"polybench/allo/atax/atax.py","file_url":"https://github.com/cornell-zhang/allo-pldi24-artifact/blob/HEAD/polybench/allo/atax/atax.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"4856dc783b43f8f1"}},{"code_sha256_prefix":"f04e1226b2e866ab","entry":"bmm","repo":"cornell-zhang/allo","repo_kind":"official","path":"allo/dsl.py","file_url":"https://github.com/cornell-zhang/allo/blob/HEAD/allo/dsl.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f04e1226b2e866ab"}},{"code_sha256_prefix":"7241067c56508906","entry":"find_live_out_variable","repo":"cornell-zhang/allo","repo_kind":"official","path":"allo/verify.py","file_url":"https://github.com/cornell-zhang/allo/blob/HEAD/allo/verify.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"7241067c56508906"}},{"code_sha256_prefix":"301f37bdadc8dd77","entry":"gemm_np","repo":"cornell-zhang/allo-pldi24-artifact","repo_kind":"official","path":"polybench/allo/gemm/gemm.py","file_url":"https://github.com/cornell-zhang/allo-pldi24-artifact/blob/HEAD/polybench/allo/gemm/gemm.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"301f37bdadc8dd77"}},{"code_sha256_prefix":"77a0e980d892d96c","entry":"get_np_pow2_type","repo":"cornell-zhang/allo","repo_kind":"official","path":"allo/utils.py","file_url":"https://github.com/cornell-zhang/allo/blob/HEAD/allo/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"77a0e980d892d96c"}},{"code_sha256_prefix":"0f2fd8492c4e8145","entry":"get_np_struct_type","repo":"cornell-zhang/allo","repo_kind":"official","path":"allo/utils.py","file_url":"https://github.com/cornell-zhang/allo/blob/HEAD/allo/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"0f2fd8492c4e8145"}},{"code_sha256_prefix":"254427a75d1be10e","entry":"getsourcefile","repo":"cornell-zhang/allo","repo_kind":"official","path":"allo/customize.py","file_url":"https://github.com/cornell-zhang/allo/blob/HEAD/allo/customize.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"254427a75d1be10e"}},{"code_sha256_prefix":"2d968c9e47547f7b","entry":"matmul","repo":"cornell-zhang/allo","repo_kind":"official","path":"allo/dsl.py","file_url":"https://github.com/cornell-zhang/allo/blob/HEAD/allo/dsl.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"2d968c9e47547f7b"}},{"code_sha256_prefix":"53464a64bf0b1b81","entry":"np_type_to_str","repo":"cornell-zhang/allo","repo_kind":"official","path":"allo/utils.py","file_url":"https://github.com/cornell-zhang/allo/blob/HEAD/allo/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"53464a64bf0b1b81"}},{"code_sha256_prefix":"4bd63c32dca4cf2a","entry":"three_mm_np","repo":"cornell-zhang/allo-pldi24-artifact","repo_kind":"official","path":"polybench/allo/3mm/three_mm.py","file_url":"https://github.com/cornell-zhang/allo-pldi24-artifact/blob/HEAD/polybench/allo/3mm/three_mm.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"4bd63c32dca4cf2a"}},{"code_sha256_prefix":"98290762149375b8","entry":"two_mm_np","repo":"cornell-zhang/allo-pldi24-artifact","repo_kind":"official","path":"polybench/allo/2mm/two_mm.py","file_url":"https://github.com/cornell-zhang/allo-pldi24-artifact/blob/HEAD/polybench/allo/2mm/two_mm.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"98290762149375b8"}},{"code_sha256_prefix":"97c24ff209cfacb4","entry":"wrapped_apply","repo":"cornell-zhang/allo","repo_kind":"official","path":"allo/customize.py","file_url":"https://github.com/cornell-zhang/allo/blob/HEAD/allo/customize.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"97c24ff209cfacb4"}},{"code_sha256_prefix":"f8d709d2cdd5d57c","entry":"analyze_arg_load_store_in_func","repo":"cornell-zhang/allo","repo_kind":"official","path":"allo/passes.py","file_url":"https://github.com/cornell-zhang/allo/blob/HEAD/allo/passes.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f8d709d2cdd5d57c"}},{"code_sha256_prefix":"b638b2ab66043fd2","entry":"coalesce_memory_access","repo":"cornell-zhang/allo","repo_kind":"official","path":"allo/memory.py","file_url":"https://github.com/cornell-zhang/allo/blob/HEAD/allo/memory.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b638b2ab66043fd2"}},{"code_sha256_prefix":"be739767a96a835c","entry":"generate_input_output_buffers","repo":"cornell-zhang/allo","repo_kind":"official","path":"allo/passes.py","file_url":"https://github.com/cornell-zhang/allo/blob/HEAD/allo/passes.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"be739767a96a835c"}},{"code_sha256_prefix":"15ab3d55edb1d040","entry":"lower_linalg_and_attach_names","repo":"cornell-zhang/allo","repo_kind":"official","path":"allo/passes.py","file_url":"https://github.com/cornell-zhang/allo/blob/HEAD/allo/passes.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"15ab3d55edb1d040"}},{"code_sha256_prefix":"c9b219fb1a29bdf8","entry":"rewrite_output_variable","repo":"cornell-zhang/allo","repo_kind":"official","path":"allo/verify.py","file_url":"https://github.com/cornell-zhang/allo/blob/HEAD/allo/verify.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"c9b219fb1a29bdf8"}},{"code_sha256_prefix":"0c07f14ad62c090b","entry":"store_load_store_load_pattern","repo":"cornell-zhang/allo","repo_kind":"official","path":"allo/autoscheduler/passes.py","file_url":"https://github.com/cornell-zhang/allo/blob/HEAD/allo/autoscheduler/passes.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"0c07f14ad62c090b"}},{"code_sha256_prefix":"aa240a45a4e178b7","entry":"verify","repo":"cornell-zhang/allo","repo_kind":"official","path":"allo/verify.py","file_url":"https://github.com/cornell-zhang/allo/blob/HEAD/allo/verify.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"aa240a45a4e178b7"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}