Description
Performance models allow developers to gain important insights into the interaction of their code with the hardware that executes it, and enable them to apply target-specific optimizations. To create in-core performance models for out-of-order processors, architecture-specific performance metrics like latency, throughput, and port binding of individual instructions are indispensable. For x86 microarchitectures, there already exist tools to automatically obtain those values; however, the extension of performance modeling tools like the Open Source Architecture Code Analyzer (OSACA) to support further architectures like RISC-V emphasizes the need for a cross-platform microbenchmarking tool.
We present WINIC (What I Need Is Cycles), an automatic cross-platform microbenchmarking tool. Unlike previous tools, it can obtain throughput and operand-based latency metrics for most supported instructions of any 64-bit x86, AArch64, and RISC-V microarchitecture without the need for root permissions or extended system control levels.
We cover the methodology of microbenchmarking and the approach of WINIC to collect cycle-accurate performance data for assembly instructions.
We show that WINIC can be used to automatically obtain a vast number of accurate results for x86, AArch64, and RISC-V microarchitectures.
We show for four target microarchitectures that its results match between 70% and 97% of the performance data of non-memory instructions obtained by similar tools and documentation and WINIC is able to accurately measure throughput and latency metrics for instructions with memory access in L1 cache.
Furthermore, we show how operand-dependent latencies in between instruction operands measured by WINIC can be used to improve the in-core performance predictions on selected micro-kernels, exemplarily for the Neoverse V2 microarchitecture.