Skip to main content

PTO-ARCH-MEMORY-MODEL-ORDERING

PTO-ARCH-MEMORY-MODEL-ORDERING

ASL pseudocode

The complete ASL owner is shown directly below.

// PTO-UNIT: {"id":"PTO-ARCH-MEMORY-MODEL-ORDERING","surface":"arch","classification":["memory-model","ordering"],"depends_on":["PTO-ARCH-MEMORY-MODEL-ATOMICITY"]}readonly func MemoryCoherenceBefore(left_index: MemoryEventIndex,                                    right_index: MemoryEventIndex) => booleanbegin    let left = _MemoryEvents[[left_index]];    let right = _MemoryEvents[[right_index]];    return MemoryEventIsWrite(left) && MemoryEventIsWrite(right) &&           MemoryEventsShareLocation(left, right) &&           left.coherence_rank < right.coherence_rank;end;
readonly func MemoryReadsFromBefore(write_index: MemoryEventIndex,                                    read_index: MemoryEventIndex) => booleanbegin    let write = _MemoryEvents[[write_index]];    let read = _MemoryEvents[[read_index]];    return MemoryEventIsWrite(write) && MemoryEventIsRead(read) &&           read.read_from == write_index;end;
readonly func MemoryExternalReadsFromBefore(write_index: MemoryEventIndex,                                            read_index: MemoryEventIndex)                                            => booleanbegin    if !MemoryReadsFromBefore(write_index, read_index) then return FALSE; end;    let write = _MemoryEvents[[write_index]];    let read = _MemoryEvents[[read_index]];    return write.kind == MemoryEvent_InitialWrite || write.agent != read.agent;end;
readonly func MemoryFromReadBefore(read_index: MemoryEventIndex,                                   write_index: MemoryEventIndex) => booleanbegin    let read = _MemoryEvents[[read_index]];    // An atomic event contains its read and write sides. Its own write is not a    // later event in from-read; only a distinct coherence successor is.    if read_index == write_index || !MemoryEventIsRead(read) then return FALSE; end;    return MemoryCoherenceBefore(read.read_from, write_index);end;
readonly func MemoryProgramOrderLocationBefore(    left_index: MemoryEventIndex, right_index: MemoryEventIndex) => booleanbegin    let left = _MemoryEvents[[left_index]];    let right = _MemoryEvents[[right_index]];    return left_index < right_index && left.agent == right.agent &&           left.kind != MemoryEvent_InitialWrite &&           right.kind != MemoryEvent_InitialWrite &&           MemoryEventIsAccess(left) && MemoryEventIsAccess(right) &&           MemoryEventsShareLocation(left, right);end;
readonly func MemoryFenceOrders(left_index: MemoryEventIndex,                                right_index: MemoryEventIndex) => booleanbegin    if left_index + 1 >= right_index then return FALSE; end;    let left = _MemoryEvents[[left_index]];    let right = _MemoryEvents[[right_index]];    for fence_number = left_index + 1 to right_index - 1 do        let fence_index = fence_number as MemoryEventIndex;        let fence = _MemoryEvents[[fence_index]];        if fence.kind == MemoryEvent_Fence && fence.agent == left.agent &&           fence.agent == right.agent &&           (MemoryEventClass(left) AND fence.fence_predecessor) != Zeros{4} &&           (MemoryEventClass(right) AND fence.fence_successor) != Zeros{4} then            return TRUE;        end;    end;    return FALSE;end;
readonly func MemoryPreservedProgramOrderBefore(    left_index: MemoryEventIndex, right_index: MemoryEventIndex) => booleanbegin    let left = _MemoryEvents[[left_index]];    let right = _MemoryEvents[[right_index]];    if left_index >= right_index || left.agent != right.agent ||       left.kind == MemoryEvent_InitialWrite ||       right.kind == MemoryEvent_InitialWrite ||       !MemoryEventIsAccess(left) || !MemoryEventIsAccess(right) then        return FALSE;    end;    // PTO-TSO preserves R->M and M->W. W->R to another location is the one    // relaxed program-order pair unless a matching fence or stronger event    // ordering restores it. Atomics are full ordering points.    if MemoryEventIsRead(left) || MemoryEventIsWrite(right) ||       left.kind == MemoryEvent_Atomic || right.kind == MemoryEvent_Atomic then        return TRUE;    end;    if left.order == MemoryOrder_Acquire ||       left.order == MemoryOrder_AcquireRelease ||       right.order == MemoryOrder_Release ||       right.order == MemoryOrder_AcquireRelease then        return TRUE;    end;    return MemoryFenceOrders(left_index, right_index);end;
readonly func MemoryCandidateExecutionValid() => booleanbegin    if _MemoryEventCount == 0 then return FALSE; end;    for event_number = 0 to _MemoryEventCount - 1 do        let event_index = event_number as MemoryEventIndex;        let event = _MemoryEvents[[event_index]];        if MemoryEventIsAccess(event) then            var initial_count: integer = 0;            for candidate_number = 0 to _MemoryEventCount - 1 do                let candidate_index = candidate_number as MemoryEventIndex;                let candidate = _MemoryEvents[[candidate_index]];                if candidate.kind == MemoryEvent_InitialWrite &&                   MemoryEventsShareLocation(event, candidate) then                    initial_count = initial_count + 1;                end;                if candidate_index != event_index &&                   MemoryEventIsAccess(candidate) &&                   RangesOverlap(event.address, event.size_bytes,                       candidate.address, candidate.size_bytes) &&                   !MemoryEventsShareLocation(event, candidate) then                    // Mixed-size or partially overlapping candidates require                    // a byte-level coherence extension and fail closed here.                    return FALSE;                end;            end;            if initial_count != 1 then return FALSE; end;        end;        if event.kind == MemoryEvent_InitialWrite && event.coherence_rank != 0 then            return FALSE;        end;        if MemoryEventIsWrite(event) &&           event.kind != MemoryEvent_InitialWrite then            if event.coherence_rank == 0 then return FALSE; end;            var predecessor_found = FALSE;            for candidate_number = 0 to _MemoryEventCount - 1 do                let candidate_index = candidate_number as MemoryEventIndex;                let candidate = _MemoryEvents[[candidate_index]];                if candidate_index != event_index &&                   MemoryEventIsWrite(candidate) &&                   MemoryEventsShareLocation(event, candidate) then                    if candidate.coherence_rank == event.coherence_rank then                        return FALSE;                    end;                    if candidate.coherence_rank + 1 == event.coherence_rank then                        predecessor_found = TRUE;                    end;                end;            end;            if !predecessor_found then return FALSE; end;        end;        if MemoryEventIsRead(event) then            if event.read_from >= _MemoryEventCount then return FALSE; end;            let source = _MemoryEvents[[event.read_from]];            if !MemoryEventIsWrite(source) ||               !MemoryEventsShareLocation(event, source) ||               event.read_value != source.write_value then                return FALSE;            end;            if event.kind == MemoryEvent_Atomic &&               event.write_performed &&               source.coherence_rank + 1 != event.coherence_rank then                return FALSE;            end;        end;    end;    return TRUE;end;
readonly func MemoryRelationAcyclic(uniproc: boolean) => booleanbegin    if _MemoryEventCount == 0 then return TRUE; end;    var closure: MemoryRelationMatrix;    for index = 0 to PTO_MODEL_MEMORY_EVENTS - 1 do        closure[[index]] = Zeros{PTO_MODEL_MEMORY_EVENTS};    end;    for left_number = 0 to _MemoryEventCount - 1 do        let left = left_number as MemoryEventIndex;        for right_number = 0 to _MemoryEventCount - 1 do            let right = right_number as MemoryEventIndex;            var edge = MemoryCoherenceBefore(left, right) ||                MemoryFromReadBefore(left, right);            if uniproc then                edge = edge || MemoryProgramOrderLocationBefore(left, right) ||                    MemoryReadsFromBefore(left, right);            else                edge = edge || MemoryPreservedProgramOrderBefore(left, right) ||                    MemoryExternalReadsFromBefore(left, right);            end;            if edge then closure[[left]][right] = '1'; end;        end;    end;    for via_number = 0 to _MemoryEventCount - 1 do        let via = via_number as MemoryEventIndex;        for source_number = 0 to _MemoryEventCount - 1 do            let source = source_number as MemoryEventIndex;            if closure[[source]][via] == '1' then                closure[[source]] = closure[[source]] OR closure[[via]];            end;        end;    end;    for event_number = 0 to _MemoryEventCount - 1 do        let event = event_number as MemoryEventIndex;        if closure[[event]][event] == '1' then return FALSE; end;    end;    return TRUE;end;
readonly func MemoryExecutionAllowedTSO() => booleanbegin    return MemoryCandidateExecutionValid() &&           MemoryRelationAcyclic(TRUE) && MemoryRelationAcyclic(FALSE);end;

Architecture behavior

purpose scope

Purpose and scope

This unit decides whether a captured candidate memory execution is allowed by PTO-TSO. It validates the event set, builds the required ordering relations, and rejects any candidate whose required relation contains a cycle.

The final query, MemoryExecutionAllowedTSO, requires candidate validity and acyclicity of both the same-location execution relation and the externally visible preserved-order relation.

concepts state

Event relations

  • Coherence orders writes to the same location by increasing coherence_rank; reads-from connects a write to a read whose read_from field names that write.
  • External reads-from keeps reads whose source is an initial write or belongs to a different agent; from-read connects a read to a distinct coherence successor of the write it observed.
  • Same-agent program order at one location and preserved program order across locations provide the two program-order views used by the acyclicity checks.
  • A fence contributes an edge only when it lies between two events from the same agent and both event classes match its predecessor and successor masks.
rules interactions

Candidate rules

Every accessed location has exactly one initial-write event, and each initial write has coherence rank 0.

Every later write to a location has a unique nonzero coherence rank with an immediate predecessor at the preceding rank.

Every read names an in-range write to the same location and carries the value written by that source. A successful atomic write immediately follows its read source in coherence order.

PTO-TSO preserves read-to-memory and memory-to-write program order. A write followed by a read of another location is the relaxed pair unless an atomic event, acquire/release order, or a matching fence restores the edge.

boundaries

Boundaries and fail-closed cases

Mixed-size or partially overlapping accesses are rejected when their ranges overlap but they do not describe the same location. This owner therefore does not silently invent byte-level coherence for such candidates.

An atomic event does not create a from-read edge to its own write side; from-read considers only a distinct coherence successor.

An empty event set is not a valid candidate execution, although the acyclicity helper itself treats an empty relation as acyclic.

example usage

illustrative analysis example

For a store-buffering candidate, record each agent's store and later read, assign each read to the initial write it observed, and run the validity and acyclicity queries. The relaxed write-to-read pair can leave the candidate allowed when no stronger edge closes a cycle.

If matching fences are inserted between each store and read, MemoryFenceOrders contributes preserved-program-order edges. Each read of an initial write also has a from-read edge, which MemoryFromReadBefore derives from the read's read_from source and the later coherence successor at that location; together these edges form a cycle, so MemoryExecutionAllowedTSO rejects the observed outcome.

Related owners

  • Atomicity is this unit's declared dependency and defines the event properties on which ordering relies.
  • Memory events defines event construction and capture.
  • Execution context owns the captured event array, event count, fence selectors, and current memory agent.

NDF clauses

Bodies come from owning ASL. Dragging or buttons change only this page-session view order.

No NDF clause is attached to this unit.

Evidence index

12 matching entries

Executable evidence5
  • tile ordering and dependency metadata remain distinct from fences
    1. surfaceARCH
    2. ownerPTO-ARCH-MEMORY-MODEL-ORDERING
    3. categoryORDERING
    4. case004
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-ARCH-DEPENDENCIES-ORDER-004
    Path
    tests/asl/arch/memory-model/ordering/arch-order-dependencies-004.asl
    Kind / role
    ordering
    Pass condition
    tile ordering and dependency assertions hold
    SHA-256
    54396119014ae03015b66a801f8fd47c886f1a856ac7d1efc69a79fdafaa3d4e
    Open exact source ↗ for PTO-AVS-ARCH-DEPENDENCIES-ORDER-004
  • PTO-ARCH-MEMORY-MODEL-ORDERING compiles as an independent normative unit
    1. surfaceARCH
    2. ownerPTO-ARCH-MEMORY-MODEL-ORDERING
    3. categorySTATIC-INVARIANT
    4. case001
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-ARCH-MEMORY-MODEL-ORDERING-STATIC-001
    Path
    tests/asl/arch/memory-model/ordering/arch-static-ordering-contract-001.asl
    Kind / role
    static-invariant
    Pass condition
    the complete model and this unit's static invariant compile
    SHA-256
    213cbc201790ba43a1d0c64598812cb7a4193b78411453939b2b853b0f41a8f9
    Open exact source ↗ for PTO-AVS-ARCH-MEMORY-MODEL-ORDERING-STATIC-001
  • scalar, reservation, pair, and DMA execution emit production events
    1. surfaceARCH
    2. ownerPTO-ARCH-MEMORY-MODEL-ORDERING
    3. categoryORDERING
    4. case002
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-ARCH-PRODUCTION-EVENTS-ORDER-002
    Path
    tests/asl/arch/memory-model/ordering/arch-order-production-events-002.asl
    Kind / role
    ordering
    Pass condition
    production event extraction assertions hold
    SHA-256
    c30ba50cb3651411c4ec93ebcd4ef342a46d908207707cc5579db55d419b6346
    Open exact source ↗ for PTO-AVS-ARCH-PRODUCTION-EVENTS-ORDER-002
  • tile and mixed-size memory operations emit ordered events
    1. surfaceARCH
    2. ownerPTO-ARCH-MEMORY-MODEL-ORDERING
    3. categoryORDERING
    4. case003
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-ARCH-TILE-EVENTS-ORDER-003
    Path
    tests/asl/arch/memory-model/ordering/arch-order-tile-events-003.asl
    Kind / role
    ordering
    Pass condition
    tile and mixed-size event assertions hold
    SHA-256
    8093407438f1dfc29fd99983624e9d08c6d0f26093539968dcaf50634f830257
    Open exact source ↗ for PTO-AVS-ARCH-TILE-EVENTS-ORDER-003
  • TSO concurrency outcomes obey store, fence, and atomic ordering
    1. surfaceARCH
    2. ownerPTO-ARCH-MEMORY-MODEL-ORDERING
    3. categoryORDERING
    4. case001
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-ARCH-TSO-CONCURRENCY-ORDER-001
    Path
    tests/asl/arch/memory-model/ordering/arch-order-tso-concurrency-001.asl
    Kind / role
    ordering
    Pass condition
    TSO concurrency assertions hold
    SHA-256
    9d01691c413335132b7527d49c2fd1e99f574789cd67624fc2b15ca934fd5132
    Open exact source ↗ for PTO-AVS-ARCH-TSO-CONCURRENCY-ORDER-001
Commit-scoped evidence5
  • spec/evidence/release-traceability-readiness.json · closedPTO-EVIDENCE-RELEASE-TRACEABILITY
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-RELEASE-TRACEABILITY
    Path
    spec/evidence/release-traceability-readiness.json
    Kind / role
    ASL/NDF/documentation/AVS traceability
    SHA-256
    c7327021d39dc67ac5564bc55073b3870a397d79ac8d9648284d56e33bc14a3e
    Open exact source ↗ for PTO-EVIDENCE-RELEASE-TRACEABILITY
  • spec/evidence/instruction-contract-closure.json · closedPTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSURE
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSURE
    Path
    spec/evidence/instruction-contract-closure.json
    Kind / role
    mnemonic and encoding contract closure
    SHA-256
    3ef2bb62421c79dff8fa77a1c7983923b523244b8090812883ef81286ca8106a
    Open exact source ↗ for PTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSURE
  • spec/evidence/architecture-readiness.json · openPTO-EVIDENCE-ARCHITECTURE-READINESS
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-ARCHITECTURE-READINESS
    Path
    spec/evidence/architecture-readiness.json
    Kind / role
    architecture maturity and blockers
    SHA-256
    4b0b85199101251bea744e0f3591cc31906909dc80d5ab651c417a936036a004
    Open exact source ↗ for PTO-EVIDENCE-ARCHITECTURE-READINESS
  • spec/evidence/release-gate-readiness.json · ready-for-exact-head-verificationPTO-EVIDENCE-RELEASE-GATE-READINESS
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-RELEASE-GATE-READINESS
    Path
    spec/evidence/release-gate-readiness.json
    Kind / role
    exact-head gate readiness
    SHA-256
    a0f4d2b6920c08981ea55fd8ef820708a40d4feb5402c5150e8e9ab532d84ce0
    Open exact source ↗ for PTO-EVIDENCE-RELEASE-GATE-READINESS
  • spec/release-manifest.json · draftPTO-EVIDENCE-RELEASE-MANIFEST
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-RELEASE-MANIFEST
    Path
    spec/release-manifest.json
    Kind / role
    release content and encoding fingerprints
    SHA-256
    1a64c109ed7a90351c41e2a418b3c0ebaf8ad975838986d2101385186b85c0d8
    Open exact source ↗ for PTO-EVIDENCE-RELEASE-MANIFEST
Decision history2
  • PTO total store order candidate model · accepted
    1. decision recordADR
    2. case0006

    Decision record

    Loading ADR-0006…

    Sources and references
    Complete stable ID
    ADR-0006
    Path
    docs/status/decisions/0006-pto-total-store-order.md
    Affected units
    PTO-ARCH-MEMORY-MODEL-ADDRESS-SPACE, PTO-ARCH-MEMORY-MODEL-ATOMICITY, PTO-ARCH-MEMORY-MODEL-FAULT-PRECISION, PTO-ARCH-MEMORY-MODEL-MEMORY-EVENTS, PTO-ARCH-MEMORY-MODEL-ORDERING, PTO-ARCH-OVERVIEW-ARCHITECTURE
    Affected NDF
    PTO-ARCH-COMMIT-EVENT-CONFORMANCE-001
    SHA-256
    b80d8782e4587d4023edf02df9d2ba4d3cb2b2999fdc8991e49a2af4f9817735
    Open exact decision source ↗ for ADR-0006
  • Production memory events and atomic corners · accepted
    1. decision recordADR
    2. case0020

    Decision record

    Loading ADR-0020…

    Sources and references
    Complete stable ID
    ADR-0020
    Path
    docs/status/decisions/0020-production-memory-events-and-atomic-corners.md
    Affected units
    PTO-ARCH-MEMORY-MODEL-ADDRESS-SPACE, PTO-ARCH-MEMORY-MODEL-ATOMICITY, PTO-ARCH-MEMORY-MODEL-FAULT-PRECISION, PTO-ARCH-MEMORY-MODEL-GLOBAL-MEMORY-ACCESS, PTO-ARCH-MEMORY-MODEL-MEMORY-EVENTS, PTO-ARCH-MEMORY-MODEL-ORDERING, PTO-BLOCK-BSTART-GMOV, PTO-BLOCK-BSTART-MGATHER, PTO-BLOCK-BSTART-MGATHER-CAS, PTO-BLOCK-BSTART-MGATHER-MASK, PTO-BLOCK-BSTART-MSCATTER, PTO-BLOCK-BSTART-MSCATTER-MASK, PTO-BLOCK-BSTART-TLOAD, PTO-BLOCK-BSTART-TPREFETCH, PTO-BLOCK-BSTART-TSTORE, PTO-SCALAR-CASB, PTO-SCALAR-CASD, PTO-SCALAR-CASH, PTO-SCALAR-CASW, PTO-SCALAR-DMA, PTO-SCALAR-HL-CASB, PTO-SCALAR-HL-CASD, PTO-SCALAR-HL-CASH, PTO-SCALAR-HL-CASW, PTO-SCALAR-LD-ADD, PTO-SCALAR-LD-AND, PTO-SCALAR-LD-OR, PTO-SCALAR-LD-SMAX, PTO-SCALAR-LD-SMIN, PTO-SCALAR-LD-UMAX, PTO-SCALAR-LD-UMIN, PTO-SCALAR-LD-XOR, PTO-SCALAR-LR-B, PTO-SCALAR-LR-D, PTO-SCALAR-LR-H, PTO-SCALAR-LR-W, PTO-SCALAR-LW-ADD, PTO-SCALAR-LW-AND, PTO-SCALAR-LW-OR, PTO-SCALAR-LW-SMAX, PTO-SCALAR-LW-SMIN, PTO-SCALAR-LW-UMAX, PTO-SCALAR-LW-UMIN, PTO-SCALAR-LW-XOR, PTO-SCALAR-SC-B, PTO-SCALAR-SC-D, PTO-SCALAR-SC-H, PTO-SCALAR-SC-W, PTO-SCALAR-SD-ADD, PTO-SCALAR-SD-AND, PTO-SCALAR-SD-OR, PTO-SCALAR-SD-SMAX, PTO-SCALAR-SD-SMIN, PTO-SCALAR-SD-UMAX, PTO-SCALAR-SD-UMIN, PTO-SCALAR-SD-XOR, PTO-SCALAR-SW-ADD, PTO-SCALAR-SW-AND, PTO-SCALAR-SW-OR, PTO-SCALAR-SW-SMAX, PTO-SCALAR-SW-SMIN, PTO-SCALAR-SW-UMAX, PTO-SCALAR-SW-UMIN, PTO-SCALAR-SW-XOR, PTO-SCALAR-SWAPB, PTO-SCALAR-SWAPD, PTO-SCALAR-SWAPH, PTO-SCALAR-SWAPW, PTO-TILE-GMOV, PTO-TILE-MGATHER, PTO-TILE-MGATHER-CAS, PTO-TILE-MGATHER-MASK, PTO-TILE-MSCATTER, PTO-TILE-MSCATTER-MASK, PTO-TILE-TLOAD, PTO-TILE-TMOV, PTO-TILE-TPREFETCH, PTO-TILE-TSTORE
    Affected NDF
    PTO-ARCH-GM-ACCESS-001, PTO-BSTART-GMOV-COLLECTIVE-001, PTO-BSTART-MGATHER-CAS-SCHEMA-001, PTO-BSTART-MGATHER-MASK-SCHEMA-001, PTO-BSTART-MGATHER-SCHEMA-001, PTO-BSTART-MSCATTER-MASK-SCHEMA-001, PTO-BSTART-MSCATTER-SCHEMA-001, PTO-BSTART-TLOAD-CUBE-001, PTO-BSTART-TLOAD-MEMORY-001, PTO-BSTART-TPREFETCH-MEMORY-001, PTO-BSTART-TSTORE-CUBE-001, PTO-BSTART-TSTORE-MEMORY-001, PTO-GMOV-CORE4-PEER-001, PTO-MGATHER-BYTE-DISPLACEMENT-001, PTO-MGATHER-CAS-ATOMIC-001, PTO-MGATHER-CAS-PUBLICATION-001, PTO-MGATHER-MASK-PREDICATE-001, PTO-MGATHER-MASK-PUBLICATION-001, PTO-MGATHER-MASK-TYPE-002, PTO-MSCATTER-BYTE-DISPLACEMENT-001, PTO-MSCATTER-DUPLICATE-ORDER-001, PTO-MSCATTER-MASK-DUPLICATE-001, PTO-MSCATTER-MASK-PREDICATE-001, PTO-MSCATTER-MASK-TYPE-002, PTO-SD-XOR-ADR-CONTRACT-001, PTO-SW-ADD-ADR-CONTRACT-001, PTO-SW-AND-ADR-CONTRACT-001, PTO-SW-OR-ADR-CONTRACT-001, PTO-SW-SMAX-ADR-CONTRACT-001, PTO-SW-SMIN-ADR-CONTRACT-001, PTO-SW-UMAX-ADR-CONTRACT-001, PTO-SW-UMIN-ADR-CONTRACT-001, PTO-SW-XOR-ADR-CONTRACT-001, PTO-SWAPB-ADR-CONTRACT-001, PTO-SWAPD-ADR-CONTRACT-001, PTO-SWAPH-ADR-CONTRACT-001, PTO-SWAPW-ADR-CONTRACT-001, PTO-TLOAD-CUBE-001, PTO-TLOAD-MEMORY-001, PTO-TMOV-CONTRACT-001, PTO-TPREFETCH-FOOTPRINT-001, PTO-TSTORE-CUBE-001, PTO-TSTORE-MEMORY-001
    SHA-256
    215b18f05d0b53120949373fce6a5ce22f7ab534fb22df24743a9b2b4beb2dec
    Open exact decision source ↗ for ADR-0020

Unit metadata

Open 4 generated metadata fields
id
PTO-ARCH-MEMORY-MODEL-ORDERING
surface
arch
classification
[
  "memory-model",
  "ordering"
]
depends_on
[
  "PTO-ARCH-MEMORY-MODEL-ATOMICITY"
]
Open generated traceability record
{
  "classification": [
    "memory-model",
    "ordering"
  ],
  "documentation": "docs/arch/memory-model/ordering.md",
  "id": "PTO-ARCH-MEMORY-MODEL-ORDERING",
  "mnemonic": null,
  "readiness_subjects": [
    "ADR-0006",
    "ADR-0020"
  ],
  "semantic_tests": [
    "PTO-AVS-ARCH-DEPENDENCIES-ORDER-004",
    "PTO-AVS-ARCH-PRODUCTION-EVENTS-ORDER-002",
    "PTO-AVS-ARCH-TILE-EVENTS-ORDER-003",
    "PTO-AVS-ARCH-TSO-CONCURRENCY-ORDER-001"
  ],
  "source": "asl/arch/memory-model/ordering.asl",
  "surface": "arch",
  "tests": [
    "PTO-AVS-ARCH-DEPENDENCIES-ORDER-004",
    "PTO-AVS-ARCH-MEMORY-MODEL-ORDERING-STATIC-001",
    "PTO-AVS-ARCH-PRODUCTION-EVENTS-ORDER-002",
    "PTO-AVS-ARCH-TILE-EVENTS-ORDER-003",
    "PTO-AVS-ARCH-TSO-CONCURRENCY-ORDER-001"
  ]
}

Sources and release identity

Show commit, paths, hashes, version, and canonical owners
Release
0.58.5 · Release candidate
Commit
7dc8b7e5b121d2b2499a2273bebff29e2cd86812
ASL SHA-256
1f157179434fe7c704a35b7b0d8a086d2ade9280c4f678b3586fc29142844898
Generated documentation
docs/arch/memory-model/ordering.md · embedded in this page
Documentation SHA-256
dd69a837c3abfa89efb46b08c811fe5624f10f896539b72110099f8c0aca88df

Exact owners