{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,9,30]],"date-time":"2026-09-30T17:13:15Z","timestamp":1790788395052,"version":"4.1.0"},"reference-count":39,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA2","license":[{"start":{"date-parts":[[2022,10,31]],"date-time":"2022-10-31T00:00:00Z","timestamp":1667174400000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2022,10,31]]},"abstract":"<jats:p>Microarchitectural code analyzers, i.e., tools that estimate the throughput of  \nmachine code basic blocks, are important utensils in the tool belt of  \nperformance engineers. Recent tools like llvm-mca, uiCA, and Ithemal use a  \nvariety of techniques and different models for their throughput predictions.  \nWhen put to the test, it is common to see these state-of-the-art tools give  \nvery different results. These inconsistencies are either errors, or they point  \nto different and rarely documented assumptions made by the tool designers.<\/jats:p>\n          <jats:p>In this paper, we present AnICA, a tool taking inspiration from differential  \ntesting and abstract interpretation to systematically analyze inconsistencies  \namong these code analyzers. Our evaluation shows that AnICA can summarize  \nthousands of inconsistencies in a few dozen descriptions that directly lead to  \nhigh-level insights into the different behavior of the tools. In several case  \nstudies, we further demonstrate how AnICA automatically finds and characterizes  \nknown and unknown bugs in llvm-mca, as well as a quirk in AMD's Zen  \nmicroarchitectures.<\/jats:p>","DOI":"10.1145\/3563288","type":"journal-article","created":{"date-parts":[[2022,10,31]],"date-time":"2022-10-31T20:23:35Z","timestamp":1667247815000},"page":"1-29","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":3,"title":["AnICA: analyzing inconsistencies in microarchitectural code analyzers"],"prefix":"10.1145","volume":"6","author":[{"ORCID":"https:\/\/orcid.org\/0000-0001-9227-0910","authenticated-orcid":false,"given":"Fabian","family":"Ritter","sequence":"first","affiliation":[{"name":"Saarland University, Germany"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-3387-2134","authenticated-orcid":false,"given":"Sebastian","family":"Hack","sequence":"additional","affiliation":[{"name":"Saarland University, Germany"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2022,10,31]]},"reference":[{"key":"e_1_2_1_1_1","unstructured":"Andreas Abel. 2020. Automatic Generation of Models of Microarchitectures. Ph. D. Dissertation. Universit\u00e4t des Saarlandes. https:\/\/d-nb.info\/1212853466\/34 \t\t\t\t  Andreas Abel. 2020. Automatic Generation of Models of Microarchitectures. Ph. D. Dissertation. Universit\u00e4t des Saarlandes. https:\/\/d-nb.info\/1212853466\/34"},{"key":"e_1_2_1_2_1","volume-title":"Machine Learning for Computer Architecture and Systems","author":"Abel Andreas","year":"2022","unstructured":"Andreas Abel . 2022. DiffTune Revisited: A Simple Baseline for Evaluating Learned llvm-mca Parameters . In Machine Learning for Computer Architecture and Systems 2022 . https:\/\/openreview.net\/forum?id=dw4evoj6AE Andreas Abel. 2022. DiffTune Revisited: A Simple Baseline for Evaluating Learned llvm-mca Parameters. In Machine Learning for Computer Architecture and Systems 2022. https:\/\/openreview.net\/forum?id=dw4evoj6AE"},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/3297858.3304062"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1109\/ISPASS48437.2020.00014"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/3524059.3532396"},{"key":"e_1_2_1_6_1","unstructured":"AMD. 2017. Software Optimization Guide for AMD Family 17h Processors. AMD. \t\t\t\t  AMD. 2017. Software Optimization Guide for AMD Family 17h Processors. AMD."},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/2024716.2024718"},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICSAMOS.2010.5642102"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1109\/SP.2014.15"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1016\/0096-0551(81)90048-5"},{"key":"e_1_2_1_11_1","unstructured":"Guillaume Chatelet. 2018. llvm-exegesis: Automatic Measurement of Instruction Latency\/Uops. https:\/\/lists.llvm.org\/pipermail\/llvm-dev\/2018-March\/121814.html Accessed: 2021-07-22 \t\t\t\t  Guillaume Chatelet. 2018. llvm-exegesis: Automatic Measurement of Instruction Latency\/Uops. https:\/\/lists.llvm.org\/pipermail\/llvm-dev\/2018-March\/121814.html Accessed: 2021-07-22"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1109\/IISWC47752.2019.9042166"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/2786805.2786835"},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/512950.512973"},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","DOI":"10.1109\/CGO53902.2022.9741289"},{"key":"e_1_2_1_16_1","unstructured":"Andrea Di Biagio. 2018. llvm-mca: A Static Performance Analysis Tool. http:\/\/lists.llvm.org\/pipermail\/llvm-dev\/2018-March\/121490.html \t\t\t\t  Andrea Di Biagio. 2018. llvm-mca: A Static Performance Analysis Tool. http:\/\/lists.llvm.org\/pipermail\/llvm-dev\/2018-March\/121490.html"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.23919\/FMCAD.2019.8894251"},{"key":"e_1_2_1_18_1","unstructured":"Google. 2018. EXEgesis: Automatic Measurement of Instruction Latency\/Uops. https:\/\/github.com\/google\/EXEgesis Accessed: 2021-07-22 \t\t\t\t  Google. 2018. EXEgesis: Automatic Measurement of Instruction Latency\/Uops. https:\/\/github.com\/google\/EXEgesis Accessed: 2021-07-22"},{"key":"e_1_2_1_19_1","unstructured":"Intel. 2012. Intel Architecture Code Analyzer. https:\/\/software.intel.com\/en-us\/articles\/intel-architecture-code-analyzer \t\t\t\t  Intel. 2012. Intel Architecture Code Analyzer. https:\/\/software.intel.com\/en-us\/articles\/intel-architecture-code-analyzer"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1109\/SANER.2018.8330199"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.1109\/CGO.2004.1281665"},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1109\/PMBS.2018.8641578"},{"key":"e_1_2_1_23_1","unstructured":"LLVM. 2021. LLVM 13 Scheduling Model for AMD Zen\/Zen+ CPUs. https:\/\/github.com\/llvm\/llvm-project\/blob\/release\/13.x\/llvm\/lib\/Target\/X86\/X86ScheduleZnver1.td Accessed: 2022-04-07 \t\t\t\t  LLVM. 2021. LLVM 13 Scheduling Model for AMD Zen\/Zen+ CPUs. https:\/\/github.com\/llvm\/llvm-project\/blob\/release\/13.x\/llvm\/lib\/Target\/X86\/X86ScheduleZnver1.td Accessed: 2022-04-07"},{"key":"e_1_2_1_24_1","unstructured":"LLVM. 2021. llvm-exegesis - LLVM Machine Instruction Benchmark. https:\/\/llvm.org\/docs\/CommandGuide\/llvm-exegesis.html Accessed: 2021-07-22 \t\t\t\t  LLVM. 2021. llvm-exegesis - LLVM Machine Instruction Benchmark. https:\/\/llvm.org\/docs\/CommandGuide\/llvm-exegesis.html Accessed: 2021-07-22"},{"key":"e_1_2_1_25_1","unstructured":"LLVM. 2021. llvm-mca - LLVM Machine Code Analyzer. https:\/\/llvm.org\/docs\/CommandGuide\/llvm-mca.html Accessed: 2021-11-15 \t\t\t\t  LLVM. 2021. llvm-mca - LLVM Machine Code Analyzer. https:\/\/llvm.org\/docs\/CommandGuide\/llvm-mca.html Accessed: 2021-11-15"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.2019.2946563"},{"key":"e_1_2_1_27_1","first-page":"100","article-title":"Differential Testing for Software","volume":"10","author":"McKeeman William M.","year":"1998","unstructured":"William M. McKeeman . 1998 . Differential Testing for Software . Digit. Tech. J. , 10 , 1 (1998), 100 \u2013 107 . http:\/\/www.hpl.hp.com\/hpjournal\/dtj\/vol10num1\/vol10num1art9.pdf William M. McKeeman. 1998. Differential Testing for Software. Digit. Tech. J., 10, 1 (1998), 100\u2013107. http:\/\/www.hpl.hp.com\/hpjournal\/dtj\/vol10num1\/vol10num1art9.pdf","journal-title":"Digit. Tech. J."},{"key":"e_1_2_1_28_1","volume-title":"Proceedings of the 36th International Conference on Machine Learning, Kamalika Chaudhuri and Ruslan Salakhutdinov (Eds.) (Proceedings of Machine Learning Research","volume":"4515","author":"Mendis Charith","year":"2019","unstructured":"Charith Mendis , Alex Renda , Saman Amarasinghe , and Michael Carbin . 2019 . Ithemal: Accurate, Portable and Fast Basic Block Throughput Estimation using Deep Neural Networks . In Proceedings of the 36th International Conference on Machine Learning, Kamalika Chaudhuri and Ruslan Salakhutdinov (Eds.) (Proceedings of Machine Learning Research , Vol. 97). PMLR, Long Beach, California, USA. 4505\u2013 4515 . http:\/\/proceedings.mlr.press\/v97\/mendis19a.html Charith Mendis, Alex Renda, Saman Amarasinghe, and Michael Carbin. 2019. Ithemal: Accurate, Portable and Fast Basic Block Throughput Estimation using Deep Neural Networks. In Proceedings of the 36th International Conference on Machine Learning, Kamalika Chaudhuri and Ruslan Salakhutdinov (Eds.) (Proceedings of Machine Learning Research, Vol. 97). PMLR, Long Beach, California, USA. 4505\u20134515. http:\/\/proceedings.mlr.press\/v97\/mendis19a.html"},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1109\/ISPASS.2014.6844463"},{"key":"e_1_2_1_30_1","volume-title":"Revizor: Fuzzing for Leaks in Black-box CPUs. CoRR, abs\/2105.06872","author":"Oleksenko Oleksii","year":"2021","unstructured":"Oleksii Oleksenko , Christof Fetzer , Boris K\u00f6pf , and Mark Silberstein . 2021 . Revizor: Fuzzing for Leaks in Black-box CPUs. CoRR, abs\/2105.06872 (2021), arXiv:2105.06872. arxiv:2105.06872 Oleksii Oleksenko, Christof Fetzer, Boris K\u00f6pf, and Mark Silberstein. 2021. Revizor: Fuzzing for Leaks in Black-box CPUs. CoRR, abs\/2105.06872 (2021), arXiv:2105.06872. arxiv:2105.06872"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/1831708.1831741"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/2001420.2001445"},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.1109\/SP.2017.27"},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.1109\/MICRO50266.2020.00045"},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/3385412.3385995"},{"key":"e_1_2_1_36_1","doi-asserted-by":"publisher","DOI":"10.5281\/zenodo.6818171"},{"key":"e_1_2_1_37_1","doi-asserted-by":"publisher","DOI":"10.1109\/HiPC.2014.7116904"},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/1498765.1498785"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1109\/SPW53761.2021.00029"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3563288","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3563288","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T16:38:10Z","timestamp":1750178290000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3563288"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2022,10,31]]},"references-count":39,"journal-issue":{"issue":"OOPSLA2","published-print":{"date-parts":[[2022,10,31]]}},"alternative-id":["10.1145\/3563288"],"URL":"https:\/\/doi.org\/10.1145\/3563288","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2022,10,31]]},"assertion":[{"value":"2022-10-31","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}