Modern Arm Assembly Language Programming: Covers Armv8-A 32-bit, 64-bit, and SIMD

by Daniel Kusswurm
2021.07.28: updated by
Up

Chapter 17: Optimization Strategies and Techniques


Armv8 Microarchitecture

プロセッサのマイクロアーキテクチャは、命令フェッチバイプライン、 命令デコーダ、 実行パイプライン、 メモリキャッシュなど、 ハードウェア構成要素の編成と操作によって特徴づけられる。

Cortex Microarchitecture

Cortex-A72 クアッドコアプロセッサは、各プロセッサコアには 48KB L1 命令キャッシュと、32KB L1データキャッシュが含まれている。 4個のプロセッサコアは、512KB -4MBのL2統合キャッシュを共有している。

Cortex-A77 クアッドコアプロセッサは、各プロセッサコアには 64KB L1 命令キャッシュ、64KB L1データキャッシュ、 および 256KB - 512KB の L2キャッシュが含まれている。 4個のプロセッサコアは、512KB -4MBのL3統合キャッシュを共有している。

Cortex Front-End Pipeline

Arm Cortex プロセッサコアは、 fetch, decode, dispatch, execute, retire の5段階のパイプライン動作を行う。

Cortex-A72 プロセッサでは、branch prediction, instruction fetch, decode rename dispatch は In Order で行われる。 Issue および Execution は Out of order で実行される。

decode unit は、アセンブリ言語の命令コードをマイクロオペレーションに変換する。 生成されるマイクロオペレーションの数は、元の命令によって異なる。

Cortex-A77 プロセッサも、Cortex-A72 と同様のパイプラインから構成されているが、 execution unit の数が増えている。 パフォーマンスが大幅に向上し、消費電流も削減されている。

Cortex Execution Pipelines

Cortex-A72 とCortex-A77 プロセッサはどちらも2つの floating-point/SIMD 実行パイプラインを持っており、 並列に実行できる。



Optimizing Armv8 Assembly Language Code

Basic Techniques

Floating-Point Arithmetic

Branch Instructions

条件付き分岐命令は、パイプラインと内部キャッシュの影響により、実行に時間がかかる可能性がある。 次の最適化手法を使用して、分岐命令のパフォーマンスへの悪影響を最小限に抑え、分岐予測ユニットの精度を向上させる。

Data Alignment

SIMD Techniques



Summary



http://karel.tsuda.ac.jp/