
1:64
Volume 1, Part 1: Application Programming Model
4.4.5.1
Data Speculation Concepts
An ambiguous memory dependency is said to exist between a store (or any operation
that may update memory state) and a load when it cannot be statically determined
whether the load and store might access overlapping regions of memory. For
convenience, a store that cannot be statically disambiguated relative to a particular
load is said to be ambiguous relative to that load. In such cases, the compiler cannot
change the order in which the load and store instructions were originally specified in the
program. To overcome this scheduling limitation, a special kind of load instruction
called an advanced load can be scheduled to execute earlier than one or more stores
that are ambiguous relative to that load.
As with control speculation, the compiler can also speculate operations that are
dependent upon the advanced load and later insert a check instruction that will
determine whether the speculation was successful or not. For data speculation, the
check can be placed anywhere the original non-data speculative load could have been
scheduled.
Thus, a data-speculative sequence of instructions consists of an advanced load, zero or
more instructions dependent on the value of that load, and a check instruction. This
means that any sequence of stores followed by a load can be transformed into an
advanced load followed by a sequence of stores followed by a check. The decision to
perform such a transformation is highly dependent upon the likelihood and cost of
recovering from an unsuccessful data speculation.
4.4.5.2
Data Speculation and Instructions
Advanced loads are available in integer (
ld.a
), floating-point (
ldf.a
), and
floating-point pair (
ldfp.a
) forms. When an advanced load is executed, it allocates an
entry in a structure called the Advanced Load Address Table (ALAT). Later, when a
corresponding check instruction is executed, the presence of an entry indicates that the
data speculation succeeded; otherwise, the speculation failed and one of two kinds of
compiler-generated recovery is performed:
1. The check load instruction (
ld.c
,
ldf.c
, or
ldfp.c
) is used for recovery when
the only instruction scheduled before a store that is ambiguous relative to the
advanced load is the advanced load itself. The check load searches the ALAT for a
matching entry. If found, the speculation was successful; if a matching entry was
not found, the speculation was unsuccessful and the check load reloads the
correct value from memory.
shows this transformation.
2. The advanced load check (
chk.a
) is used when an advanced load and several
instructions that depend on the loaded value are scheduled before a store that is
ambiguous relative to the advanced load. The advanced load check works like the
Figure 4-2.
Data Speculation Recovery Using ld.c
Before Data Speculation
After Data Speculation
// Other instructions
st8
[r4] = r12
ld8
r6 = [r8];;
add
r5 = r6, r7;;
st8
[r18] = r5
ld8.a
r6 = [r8];; // Advanced load
// Other instructions
st8
[r4] = r12
ld8.c.clr
r6 = [r8] // Check load
add
r5 = r6, r7;;
st8
[r18] = r5
Содержание ITANIUM ARCHITECTURE - SOFTWARE DEVELOPERS VOLUME 3 REV 2.3
Страница 1: ......
Страница 11: ...x Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 12: ...1 1 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Part I Application Architecture Guide ...
Страница 13: ...1 2 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 33: ...1 22 Volume 1 Part 1 Introduction to the Intel Itanium Architecture ...
Страница 57: ...1 46 Volume 1 Part 1 Execution Environment ...
Страница 147: ...1 136 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 149: ...1 138 Volume 1 Part 2 About the Optimization Guide ...
Страница 191: ...1 180 Volume 1 Part 2 Predication Control Flow and Instruction Stream ...
Страница 230: ......
Страница 248: ...236 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 249: ...2 1 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Part I System Architecture Guide ...
Страница 250: ...2 2 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 264: ...2 16 Volume 2 Part 1 Intel Itanium System Environment ...
Страница 380: ...2 132 Volume 2 Part 1 Interruptions ...
Страница 398: ...2 150 Volume 2 Part 1 Register Stack Engine ...
Страница 486: ...2 238 Volume 2 Part 1 IA 32 Interruption Vector Descriptions ...
Страница 749: ...2 501 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Part II System Programmer s Guide ...
Страница 750: ...2 502 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 754: ...2 506 Volume 2 Part 2 About the System Programmer s Guide ...
Страница 796: ...2 548 Volume 2 Part 2 Interruptions and Serialization ...
Страница 808: ...2 560 Volume 2 Part 2 Context Management ...
Страница 842: ...2 594 Volume 2 Part 2 Floating point System Software ...
Страница 850: ...2 602 Volume 2 Part 2 IA 32 Application Support ...
Страница 862: ...2 614 Volume 2 Part 2 External Interrupt Architecture ...
Страница 870: ...2 622 Volume 2 Part 2 Performance Monitoring Support ...
Страница 891: ......
Страница 941: ...3 42 Volume 3 Instruction Reference cmp illegal_operation_fault PR p1 0 PR p2 0 Interruptions Illegal Operation fault ...
Страница 1099: ...3 200 Volume 3 Instruction Reference padd Interruptions Illegal Operation fault ...
Страница 1191: ...3 292 Volume 3 Pseudo Code Functions Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 1295: ...3 396 Volume 3 Resource and Dependency Semantics ...
Страница 1296: ......
Страница 1302: ...402 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 1494: ...4 192 Volume 4 Base IA 32 Instruction Reference FWAIT Wait See entry for WAIT ...
Страница 1564: ...4 262 Volume 4 Base IA 32 Instruction Reference LES Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1565: ...Volume 4 Base IA 32 Instruction Reference 4 263 LFS Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1568: ...4 266 Volume 4 Base IA 32 Instruction Reference LGS Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1583: ...Volume 4 Base IA 32 Instruction Reference 4 281 LSS Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1647: ...Volume 4 Base IA 32 Instruction Reference 4 345 ROL ROR Rotate See entry for RCL RCR ROL ROR ...
Страница 1663: ...Volume 4 Base IA 32 Instruction Reference 4 361 SHL SHR Shift Instructions See entry for SAL SAR SHL SHR ...
Страница 1668: ...4 366 Volume 4 Base IA 32 Instruction Reference SIDT Store Interrupt Descriptor Table Register See entry for SGDT SIDT ...
Страница 1884: ...4 582 Volume 4 IA 32 SSE Instruction Reference ...
Страница 1885: ...Index Intel Itanium Architecture Software Developer s Manual Rev 2 3 Index ...
Страница 1886: ...Index Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 1898: ...INDEX Index 12 Index for Volumes 1 2 3 and 4 ...