GALPAT (Galloping Pattern)
Overview
galpat writes a uniform background across a region, flips one cell to the
opposite value, then reads that cell alternately against every other cell in the
region. The single flipped cell "gallops" against its neighbours, which exposes
a cell whose value can be pulled by a specific other cell.
A march tests each cell against the operations applied to it in address order. GALPAT tests each cell against every other cell in the region, which is what catches address-decoder faults and coupling between cells far apart in address space but adjacent in the physical array.
Execution Mechanics
The cost is quadratic: a full GALPAT over N cells is O(N²) reads. Running it across an entire GPU allocation cannot finish, which is why this workload is region-bounded by design.
| Flag | Default | Meaning |
|---|---|---|
--region_offset |
0 | First element of the region under test |
--region_size |
1048576 | Number of elements in the region |
--region_chunk |
512 | Gallop window each thread covers |
The region is clamped into the allocation rather than rejected, so a region running past the end of memory shrinks instead of failing the run.
The intended use is as a second stage. Sweep memory with the linear tests
(march_test, memory_hammer), record failing addresses with --fault_map,
then aim galpat at the implicated region for the expensive exhaustive check.
Target Subsystems
- Primary Target: Address-decoder faults and cell-to-cell coupling within a region.
- Secondary: Sense-amplifier behaviour under repeated opposite-value reads.
Failure Symptoms
Critical Failures
- Gallop error: Reported with the element index and an
XORmask of the flipped bits. - A cell that fails only when galloped against one specific partner points at a decoder or coupling fault rather than a weak cell.
Coverage boundary
A PASS covers only the region that was tested. Startup prints the exact
Region: [offset, end) — read it before concluding anything about the rest
of memory.
Usage
Aimed at a region another test has already implicated:
./build/galpat 0 60 50 --verify --region_offset 4194304 --region_size 65536 \
--fault_map galpat_region.csv
Result
Throughput reports gallop-reads/s. Because coverage is quadratic in region
size, this number is only comparable between runs that used the same
--region_size.