Abstract
Modern CPUs utilize SIMD vector instructions and hardware extensions to accelerate code with data-level parallelism. This allows for high performance gains in select application domains such as image and signal processing. However, general purpose code often lacks data-level parallelism or has complex control and data dependencies, which prevents vectorization. Thus, CPU vector registers and functional units frequently sit idle while the scalar datapath unilaterally executes code. In this paper, we present Loner, a profile-guided compiler methodology for optimizing scalar integer loops using the otherwise idle vector datapath. Loner expands the traditional definition of vectorization by identifying two situations where it is beneficial to perform vector operations with a single data element ("Loner"data). In the first, the scalar register file and functional units are overburdened, resulting in unnecessary spill/reload operations and stalls due to structural hazards. In the second, we describe a set of "vector-Amenable"computation patterns that the vector pipeline naturally executes more efficiently than its scalar counterpart. Loner identifies hot code regions that exhibit either characteristic and offloads a subset of a program's computation graph to the vector datapath for maximum performance. We evaluate Loner on an x86 Whiskey Lake processor using select benchmarks from the SPEC, GAP, and MiBench benchmark suites where it improves performance by 2.64% (geomean) up to 40.28%.
Author supplied keywords
Cite
CITATION STYLE
Behroozi, A., Park, S., & Mahlke, S. (2022). Loner: Utilizing the CPU Vector Datapath to Process Scalar Integer Data. In CC 2022 - Proceedings of the 31st ACM SIGPLAN International Conference on Compiler Construction (pp. 205–217). Association for Computing Machinery, Inc. https://doi.org/10.1145/3497776.3517767
Register to see more suggestions
Mendeley helps you to discover research relevant for your work.