mhpow B3 (R15-06): GPU adaptation of the MTP/DRSample MHPoW, control rows
CUDA labelling, Merkle commitment and proof creation for B1's reference encoding (BLAKE2b-256, tags L/M/C/G) and the lane's SHA-256 control reading, batched at 32/128/512 MiB per instance on a rented RTX 5090 and RTX 4090 (stock clocks, board power at 1 Hz, idle not subtracted). The C port reproduces B1's five known-answer fixtures byte for byte; the GPU matches on every checked instance; every GPU proof is accepted; the known-failed test (DRSample long edges deleted) fires. Finding: the card is caught in the per-instance chain trap (52 to 87 one-thread CPU instances at 32 MiB, 3.5 to 5.8 at 512 MiB). Registry batch NOT RUN. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
76ee67d8fe
commit
382d5a375a
52 changed files with 8349 additions and 0 deletions
254
docs/analysis/mhpow/b3/README.md
Normal file
254
docs/analysis/mhpow/b3/README.md
Normal file
|
|
@ -0,0 +1,254 @@
|
|||
# B3: GPU adaptation of the MTP/DRSample proof of work, without changing the theorem
|
||||
|
||||
Track B item B3 (package R15-06, the GPU feasibility lane), 9 October 2026. Status: every row below is NOT RUN until the panel reads it. Nothing activates. No row compares this work unit with the v6 work unit; that comparison needs a contract that does not exist yet (row X-1). No PASS is claimed here.
|
||||
|
||||
## The finding in one paragraph (for the panel; NOT RUN)
|
||||
|
||||
The exact function runs on the GPU byte for byte (B1's fixtures reproduced; every GPU proof accepted; the known-failed graph refused). At the B3 sizes the GPU is caught in the trap the plan warned of: each instance is one hash chain (one BLAKE2b block per label, about 1.5 to 1.7 microseconds on one GPU thread), memory caps the instances in flight, and so a whole RTX 5090 / RTX 4090 labels like 87 / 52 one-thread CPU instances at 32 MiB, 23 / 13 at 128 MiB and 5.8 / 3.5 at 512 MiB, drawing about 80 to 110 W of a 450 to 480 W board. At 128 and 512 MiB the function is principally CPU-friendly, the plan's rejection case; at 32 MiB the card is a mid-size server CPU. The card fills itself only with instances of 2 MiB or less (5 to 12 G labels per second, 38 to 64 nJ per label), which a specialist holds whole in on-die SRAM. Layout (SOA against AOS, block shape) moves the rate by 0 to 5 percent: the lever is the dependency chain, not the memory system. These rows are the control for the Track B pivot.
|
||||
|
||||
## Sources (by sha)
|
||||
|
||||
| source | identity |
|
||||
|---|---|
|
||||
| The founder's research plan, "IGNEUM - The 1.5x Research Programme" (sections 4.6, 6 B3, 8, 10) | sha256 269ceaa5824d09140a1bcc124dba59438db5a5e68fddc18960db7141fefc0305 |
|
||||
| The 1.5x experiment brief | sha256 74ee073286d4a6e2... (as cited by the common brief) |
|
||||
| [BS25] Blocki and Smearsoll, Provably Memory-Hard Proofs of Work With Memory-Easy Verification, TCC 2025, eprint 2025/1456, the FULL paper (46 pages, TeX build 11 Aug 2025) | sha256 13c3646e7d85c1aa58a92914582caab5798d90cf2a3cad33e58d81d49c1d31db (eprint.iacr.org answers curl with a Cloudflare challenge; this copy is the Wayback Machine's capture of the eprint PDF) |
|
||||
| [ABH17] Alwen, Blocki and Harsha, Practical Graphs for Optimal Side-Channel Resistant Memory-Hard Functions, CCS 2017, eprint 2017/443, Algorithm 1 (DRSample) | sha256 f8e08d361118120c905550d3ac63efffe2a806d68276b070c24e7aa15d8fa8eb (17 pages, Wayback capture) |
|
||||
| The B1 lane's CPU reference (R15-05), working copy on build-6 at 09:26Z, not yet landed | params.py d47b8ff5..., drsample.py 4169a5fc..., mtp.py c0feed31..., gen_fixtures.py b7a2a89f...; fixtures kat-n04..n20 (SHA256SUMS: kat-n20.json fd0d75b6..., kat-n20.proof.bin a49367d9...) |
|
||||
| This lane's code | tools/mhpow/b3/ on branch mhpow-b3; B1-encoding build id d672d3839ebb45e5, B3P1 control build id 2079d0d8ce7eef96 (sha256 of the four source files, build.sh) |
|
||||
|
||||
Sections of [BS25] used: 2.2 (the labelling game, `l_v = H(chi, v, parents' labels)`), 3.2 (the MTP framework: honest prover, commitment, challenges, verifier), 4.1 (the Merkle layout), 5 and 6.1 (the soundness bound and the DRSample instantiation, which cites [ABH17] for the graph).
|
||||
|
||||
## What the function is, and what B3 may change
|
||||
|
||||
The honest prover of [BS25] section 3.2, in B1's encoding (BLAKE2b-256, lambda = 256, one-byte tags L/M/C/G, u64 little-endian integers, the graph sampled once from a public seed by [ABH17] Algorithm 1 with rejection sampling):
|
||||
|
||||
1. label every node in topological order: `l_1 = H('L' | chi | 1)`, `l_2 = H('L' | chi | 2 | l_1)`, `l_v = H('L' | chi | v | l_{v-r} | l_{v-1})` with `v-r <= v-2` drawn by DRSample;
|
||||
2. commit: a Merkle tree over the N labels in the paper's bit order, inner nodes `H('M' | chi | left | right)`;
|
||||
3. challenge: `c_i = H('C' | chi | i | root) mod N`, i = 1..k;
|
||||
4. open each challenged node and its parents with their Merkle paths (B1's container `B1MTPDR1`).
|
||||
|
||||
B3 changes representation and scheduling only. The DAG edge rule, the hash, every byte hashed, the domain tags, the challenge rule and the proof container are B1's, and the oracle checks that byte for byte. What changes:
|
||||
|
||||
| change | what it is | why it is allowed |
|
||||
|---|---|---|
|
||||
| batching across instances | many instances (different chi) in flight; the graph table is shared because the graph is data-independent and fixed a priori | each instance is computed exactly as specified; nothing crosses instances |
|
||||
| coalesced label storage (SOA) | labels as 4 little-endian u64 words, instance-interleaved in 16-byte halves, `(row*2+h)*B + inst`; because every instance reads the same node numbers at the same step, a warp's loads of `l_{v-r}` are one contiguous run | same bytes, different addresses |
|
||||
| AOS (ablation) | instance-major rows | same bytes |
|
||||
| the far parent fetched ahead | `l_{far(v+1)}` (always `<= v-1`) is loaded while node v hashes; `l_{v-1}` never leaves registers | the parents' labels are those of the graph; only the load time moves |
|
||||
| cooperative lanes (B3P1 control only) | in a SHA-256 reading the 104-byte label message is two blocks and the first (`chi | v | l_{v-r}[0..23]`) does not depend on `l_{v-1}`, so lane A computes node v+1's first block while lane B finishes node v | the same two compressions per label; the order of independent work changes |
|
||||
|
||||
In B1's encoding there is no cooperative split of one label: the 105-byte label message is ONE BLAKE2b block, so the per-label critical path is one compression however many lanes share it. That is a property of the encoding, not of the GPU, and it is recorded here because it decides how much a GPU can shorten one instance's chain (row X-6).
|
||||
|
||||
## The under-utilisation trap (stated before the first row)
|
||||
|
||||
Each instance is one sequential dependency chain of N labels: `l_v` needs `l_{v-1}`, so one instance can occupy one GPU thread (or, where the encoding permits, two cooperating lanes) and no more. A GPU fills its memory bandwidth and its arithmetic only with tens of thousands of threads in flight. The only lever the theorem permits for more threads is more instances, and each honest instance must hold its N labels (the memory-hard part: [BS25] proves that a prover who keeps less pays in cumulative memory) plus its Merkle tree. So the card's memory caps the instances in flight: at 32 MiB of labels per instance (64 MiB with the tree) a 32 GB card holds about 476 instances, at 128 MiB about 119, at 512 MiB about 29. Shrinking the instance to fill the card (tens of thousands of instances) makes each instance a few hundred KiB, small enough for a specialist to keep whole instances in on-die SRAM. Deleting edges or splitting the chain to create parallelism inside an instance changes the graph and voids the proof (the known-failed test below is exactly that change, and the oracle refuses it).
|
||||
|
||||
So the GPU's throughput at the B3 sizes is (instances that fit) divided by (one thread's time per label). One thread's time per label on these cards is about 1.7 microseconds (B1 encoding); one CPU thread's is 0.25 microseconds with the scalar BLAKE2b port (0.10 to 0.14 with sha_ni SHA-256 in the control). The rows measure how far that leaves the card below a CPU.
|
||||
|
||||
## Method
|
||||
|
||||
- Pods: a rented RTX 5090 (Vast 54994203, driver 580.126.09, host EPYC 7K62, the container's CPU quota 26 CPUs) and a rented RTX 4090 (Vast 54994221, driver 570.153.02, host EPYC 7513, quota 15 CPUs), from the fleet lane, CUDA 12.8. Stock clocks: no clock lock on a rented pod (said in every row). The 5090's host had set its board power limit to 480 W (default 600 W, meta.txt); no row drew more than about 415 W, so the limit did not bind. The 5090 host's load average was 81 at the start of the control run (other tenants on a shared EPYC), so its CPU rows are noisier than the 4090 host's. The host CPUs are shared with other tenants; the CPU rows carry the load average in meta.txt.
|
||||
- Power boundary: GPU board power (`nvidia-smi power.draw`) at 1 Hz for the whole run, integrated sample-and-hold over each row's labelling window; idle (5.8 W on the 5090, 14.6 W on the 4090, 30 s windows) is NOT subtracted; host and wall power are not measured (row X-3).
|
||||
- Each row: the B1 graph table on the host (the spec function, host threads), allocation, the label passes (repeated until at least 20 s of labelling so the 1 Hz meter has at least 20 samples; the first pass is dropped as warm-up when there are several), the commitment, the proof creation (device challenges and openings, copy home, B1's container), then every GPU proof through the C-port verifier with the TRUE graph, then the oracle.
|
||||
- The correctness oracle, in three links: (1) `cpu_ref_b1 kat` reproduces B1's five known-answer fixtures (n = 4, 8, 12, 16, 20: chi, graph parents, labels sha256, tau, proof sha256 and the .proof.bin bytes); (2) in every row the GPU's labels, every Merkle node, root and proof container equal the C port's for the checked instances (2 per main row, spread across the batch; every GPU proof is verified); (3) instance 0 of every batch is B1's own KAT input, and at n = 20 its labels sha256 and tau are compared with B1's kat-n20.json directly. A timing row counts only when all three say identical.
|
||||
- The known-failed test (`test_known_failed_b1.sh`): the GPU runs with DRSample's long edges deleted (`far(v) = v-2`, "a faster graph with the old proof"); the oracle must report MISMATCH, 0 proofs accepted and exit 1, and the unmodified run must report IDENTICAL with instance 0 equal to B1's fixture. Result on both cards: PASS (the oracle fired on the known-failed case and passed the known-finished one).
|
||||
- The CPU baseline: `cpu_ref_b1 time` on the pod's own CPU, the C port (portable BLAKE2b, the spec's bytes) with one thread (THE sequential row) and with the container's whole quota (a diagnostic). B1's own CPython reference took 1.016 s for the n = 20 labels on build-6 (its row-n20-k64.json), about 1 microsecond per label, which is CPython's call overhead; the C port is the fair CPU.
|
||||
- No raw hashes per second anywhere: rows are per instance, per label and per accepted proof.
|
||||
- Figures: every table below is the verbatim output of `python3 tools/mhpow/b3/parse_rows.py <dirs>` run in docs/analysis/mhpow/b3/rows/ on the raw files there (rows.jsonl, power.csv, idle.json, cpu.jsonl, meta.txt).
|
||||
|
||||
## Oracle verdicts
|
||||
|
||||
| card | encoding | rows | rows IDENTICAL | instances byte-checked | GPU proofs accepted by the verifier | instance 0 = B1 fixture at n = 20 | C port = B1 KATs (n = 4..20) | known-failed test |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| RTX 5090 | B1 | 12 | 12 | 21 | 132899 of 132899 | yes (6 rows) | 5 of 5 | PASS |
|
||||
| RTX 4090 | B1 | 12 | 12 | 21 | 98590 of 98590 | yes (6 rows) | 5 of 5 | PASS |
|
||||
|
||||
## Rows, B1 encoding (the counted rows)
|
||||
|
||||
Stock clocks, rented pods, board power, idle not subtracted, against B1's working-copy fixtures (B1 not landed; row X-5). k = 64 challenges in every row (a timing placeholder; row X-2).
|
||||
|
||||
#### NVIDIA GeForce RTX 5090 (rented pod, stock clocks; host CPU AMD EPYC 7K62 48-Core Processor, nproc=192 cgroup_cpus=26); idle board power 6.0 W over 30 samples (not subtracted)
|
||||
|
||||
| row | MiB per instance | instances in flight | kernel, layout | label pass per batch (s) | labels/s, card | ns per label, per instance | board W (mean) | nJ per label | J per instance (labels) | commit per batch (s) | proof per batch (s) | GPU instance latency (s) | CPU sequential instance (s) | card = N one-thread CPU instances | oracle | accepted proofs |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| main-n20 | 32.0 | 476 of 476 | k1, soa | 1.543 | 323.5 M | 1,471 | 111 | 343.4 | 0.36 | 0.0398 | 0.0527 | 1.64 | 0.54 | 87.1 | IDENTICAL (2 checked) | 476 of 476 |
|
||||
| main-n22 | 128.0 | 119 of 119 | k1, soa | 6.175 | 80.8 M | 1,472 | 105 | 1,309.5 | 5.49 | 0.0400 | 0.0190 | 6.23 | 2.27 | 23.2 | IDENTICAL (2 checked) | 119 of 119 |
|
||||
| main-n24 | 512.0 | 29 of 29 | k1, soa | 24.639 | 19.7 M | 1,469 | 104 | 5,273.2 | 88.47 | 0.0391 | 0.0071 | 24.69 | 9.20 | 5.8 | IDENTICAL (2 checked) | 29 of 29 |
|
||||
| abl-n20-aos | 32.0 | 476 of 476 | k1, aos | 1.559 | 320.1 M | 1,487 | 123 | 385.4 | 0.40 | 0.0655 | 0.0621 | 1.69 | 0.54 | 86.2 | IDENTICAL (2 checked) | 476 of 476 |
|
||||
| abl-n20-tpb32 | 32.0 | 476 of 476 | k1, soa | 1.548 | 322.4 M | 1,477 | 125 | 383.6 | 0.40 | 0.0400 | 0.0581 | 1.65 | 0.54 | 86.8 | IDENTICAL (2 checked) | 476 of 476 |
|
||||
| ladder-n20-B1 | 32.0 | 1 of 476 | k1, soa | 1.443 | 0.7 M | 1,377 | 100 | 138,375.6 | 145.10 | 0.0004 | 0.0011 | 1.44 | 0.54 | 0.2 | IDENTICAL (1 checked) | 1 of 1 |
|
||||
| ladder-n20-B32 | 32.0 | 32 of 476 | k1, soa | 1.505 | 22.3 M | 1,436 | 104 | 4,679.8 | 4.91 | 0.0030 | 0.0066 | 1.51 | 0.54 | 6.0 | IDENTICAL (1 checked) | 32 of 32 |
|
||||
| ladder-n20-B128 | 32.0 | 128 of 476 | k1, soa | 1.528 | 87.8 M | 1,457 | 104 | 1,187.9 | 1.25 | 0.0114 | 0.0177 | 1.56 | 0.54 | 23.6 | IDENTICAL (1 checked) | 128 of 128 |
|
||||
| diag-n12 | 0.1 | 93706 of 93706 | k1, soa | 0.032 | 11,912.2 M | 7,866 | 453 | 38.0 | 0.00 | 0.0344 | 6.4473 | 6.51 | - | - | IDENTICAL (2 checked) | 93706 of 93706 |
|
||||
| diag-n14 | 0.5 | 28102 of 28102 | k1, soa | 0.049 | 9,426.0 M | 2,981 | 431 | 45.7 | 0.00 | 0.0386 | 2.0398 | 2.13 | - | - | IDENTICAL (2 checked) | 28102 of 28102 |
|
||||
| diag-n16 | 2.0 | 7457 of 7457 | k1, soa | 0.098 | 4,996.2 M | 1,493 | 318 | 63.8 | 0.00 | 0.0403 | 0.6610 | 0.80 | - | - | IDENTICAL (2 checked) | 7457 of 7457 |
|
||||
| diag-n18 | 8.0 | 1897 of 1897 | k1, soa | 0.388 | 1,282.4 M | 1,479 | 163 | 127.4 | 0.03 | 0.0403 | 0.1935 | 0.62 | - | - | IDENTICAL (2 checked) | 1897 of 1897 |
|
||||
|
||||
CPU reference on the same pod (cpu_ref_b1: the C port of B1, portable scalar BLAKE2b, byte-identical to B1's fixtures; a SIMD BLAKE2b would be faster, so this CPU figure is a floor for the CPU):
|
||||
|
||||
| n | MiB | threads | label s per instance | Merkle s | proof s | verify s | labels/s per instance | instance labels per wall second, whole prover, all threads | accepted |
|
||||
|---|---|---|---|---|---|---|---|---|---|
|
||||
| 20 | 32 | 1 | 0.282 | 0.262 | 0.00017 | 0.00090 | 3.71 M | 1.9 M | 1 of 1 |
|
||||
| 22 | 128 | 1 | 1.205 | 1.062 | 0.00021 | 0.00102 | 3.48 M | 1.8 M | 1 of 1 |
|
||||
| 24 | 512 | 1 | 4.911 | 4.293 | 0.00025 | 0.00108 | 3.42 M | 1.8 M | 1 of 1 |
|
||||
| 20 | 32 | 26 | 0.285 | 0.265 | 0.00017 | 0.00093 | 3.68 M | 34.7 M | 26 of 26 |
|
||||
| 22 | 128 | 26 | 1.202 | 1.063 | 0.00023 | 0.00100 | 3.49 M | 34.1 M | 26 of 26 |
|
||||
|
||||
#### NVIDIA GeForce RTX 4090 (rented pod, stock clocks; host CPU AMD EPYC 7513 32-Core Processor, nproc=64 cgroup_cpus=15); idle board power 15.2 W over 30 samples (not subtracted)
|
||||
|
||||
| row | MiB per instance | instances in flight | kernel, layout | label pass per batch (s) | labels/s, card | ns per label, per instance | board W (mean) | nJ per label | J per instance (labels) | commit per batch (s) | proof per batch (s) | GPU instance latency (s) | CPU sequential instance (s) | card = N one-thread CPU instances | oracle | accepted proofs |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| main-n20 | 32.0 | 353 of 353 | k1, soa | 1.743 | 212.3 M | 1,663 | 79 | 372.0 | 0.39 | 0.0383 | 0.0307 | 1.81 | 0.49 | 51.7 | IDENTICAL (2 checked) | 353 of 353 |
|
||||
| main-n22 | 128.0 | 88 of 88 | k1, soa | 7.030 | 52.5 M | 1,676 | 79 | 1,500.6 | 6.29 | 0.0383 | 0.0088 | 7.08 | 1.97 | 13.2 | IDENTICAL (2 checked) | 88 of 88 |
|
||||
| main-n24 | 512.0 | 22 of 22 | k1, soa | 27.903 | 13.2 M | 1,663 | 78 | 5,929.8 | 99.49 | 0.0382 | 0.0033 | 27.94 | 8.07 | 3.5 | IDENTICAL (2 checked) | 22 of 22 |
|
||||
| abl-n20-aos | 32.0 | 353 of 353 | k1, aos | 1.838 | 201.4 M | 1,753 | 81 | 404.1 | 0.42 | 0.0758 | 0.0321 | 1.95 | 0.49 | 49.0 | IDENTICAL (2 checked) | 353 of 353 |
|
||||
| abl-n20-tpb32 | 32.0 | 353 of 353 | k1, soa | 1.747 | 211.9 M | 1,666 | 83 | 390.8 | 0.41 | 0.0383 | 0.0294 | 1.81 | 0.49 | 51.6 | IDENTICAL (2 checked) | 353 of 353 |
|
||||
| ladder-n20-B1 | 32.0 | 1 of 353 | k1, soa | 1.692 | 0.6 M | 1,613 | 76 | 122,514.4 | 128.47 | 0.0003 | 0.0003 | 1.69 | 0.49 | 0.2 | IDENTICAL (1 checked) | 1 of 1 |
|
||||
| ladder-n20-B32 | 32.0 | 32 of 353 | k1, soa | 1.722 | 19.5 M | 1,642 | 77 | 3,969.0 | 4.16 | 0.0036 | 0.0038 | 1.73 | 0.49 | 4.7 | IDENTICAL (1 checked) | 32 of 32 |
|
||||
| ladder-n20-B128 | 32.0 | 128 of 353 | k1, soa | 1.752 | 76.6 M | 1,671 | 78 | 1,015.0 | 1.06 | 0.0140 | 0.0113 | 1.78 | 0.49 | 18.7 | IDENTICAL (1 checked) | 128 of 128 |
|
||||
| diag-n12 | 0.1 | 69485 of 69485 | k1, soa | 0.031 | 9,082.9 M | 7,650 | 406 | 44.7 | 0.00 | 0.0294 | 3.2327 | 3.29 | - | - | IDENTICAL (2 checked) | 69485 of 69485 |
|
||||
| diag-n14 | 0.5 | 20838 of 20838 | k1, soa | 0.051 | 6,671.5 M | 3,123 | 339 | 50.8 | 0.00 | 0.0355 | 1.1405 | 1.23 | - | - | IDENTICAL (2 checked) | 20838 of 20838 |
|
||||
| diag-n16 | 2.0 | 5530 of 5530 | k1, soa | 0.112 | 3,242.9 M | 1,705 | 206 | 63.5 | 0.00 | 0.0376 | 0.3536 | 0.50 | - | - | IDENTICAL (2 checked) | 5530 of 5530 |
|
||||
| diag-n18 | 8.0 | 1407 of 1407 | k1, soa | 0.440 | 837.7 M | 1,680 | 114 | 135.8 | 0.04 | 0.0381 | 0.1036 | 0.58 | - | - | IDENTICAL (2 checked) | 1407 of 1407 |
|
||||
|
||||
CPU reference on the same pod (cpu_ref_b1: the C port of B1, portable scalar BLAKE2b, byte-identical to B1's fixtures; a SIMD BLAKE2b would be faster, so this CPU figure is a floor for the CPU):
|
||||
|
||||
| n | MiB | threads | label s per instance | Merkle s | proof s | verify s | labels/s per instance | instance labels per wall second, whole prover, all threads | accepted |
|
||||
|---|---|---|---|---|---|---|---|---|---|
|
||||
| 20 | 32 | 1 | 0.255 | 0.230 | 0.00014 | 0.00081 | 4.11 M | 2.1 M | 1 of 1 |
|
||||
| 22 | 128 | 1 | 1.056 | 0.912 | 0.00015 | 0.00090 | 3.97 M | 2.1 M | 1 of 1 |
|
||||
| 24 | 512 | 1 | 4.408 | 3.658 | 0.00018 | 0.00097 | 3.81 M | 2.1 M | 1 of 1 |
|
||||
| 20 | 32 | 15 | 0.261 | 0.232 | 0.00014 | 0.00083 | 4.02 M | 27.8 M | 15 of 15 |
|
||||
| 22 | 128 | 15 | 1.099 | 0.940 | 0.00015 | 0.00092 | 3.82 M | 27.4 M | 15 of 15 |
|
||||
|
||||
### What each row means for GPU competitiveness
|
||||
|
||||
- RTX 5090, main-n20: 476 instances of 32 MiB label 323.5 M per second at 111 W board (343 nJ per label); one instance takes 1.64 s on the GPU against 0.54 s on one CPU thread; the card equals 87 CPU threads.
|
||||
- RTX 5090, main-n22: 119 instances of 128 MiB label 80.8 M per second at 105 W board (1,309 nJ per label); one instance takes 6.23 s on the GPU against 2.27 s on one CPU thread; the card equals 23 CPU threads, so a 64-core server CPU out-labels it: no GPU advantage, principally CPU-friendly.
|
||||
- RTX 5090, main-n24: 29 instances of 512 MiB label 19.7 M per second at 104 W board (5,273 nJ per label); one instance takes 24.69 s on the GPU against 9.20 s on one CPU thread; a 16-core desktop CPU out-labels the whole card (the card equals 5.8 CPU threads): principally CPU-friendly, the plan's rejection case.
|
||||
- RTX 5090, abl-n20-aos: the instance-major (AOS) layout changes the card's labels per second by -1.0 percent against the SOA main row; layout is not the lever, the dependency chain is.
|
||||
- RTX 5090, abl-n20-tpb32: the 32-thread blocks (one warp per block, spread over more SMs) changes the card's labels per second by -0.4 percent against the SOA main row; layout is not the lever, the dependency chain is.
|
||||
- RTX 5090, ladder-n20-B1: 1 instance(s) in flight label 0.73 M per second at 100 W, about 1 times one thread's 0.73 M; throughput is linear in instances and the board draws nearly the same power at 1 as at 476, so the joules per label fall only by filling memory with instances (the trap, measured).
|
||||
- RTX 5090, ladder-n20-B32: 32 instance(s) in flight label 22.29 M per second at 104 W, about 32 times one thread's 0.70 M; throughput is linear in instances and the board draws nearly the same power at 1 as at 476, so the joules per label fall only by filling memory with instances (the trap, measured).
|
||||
- RTX 5090, ladder-n20-B128: 128 instance(s) in flight label 87.83 M per second at 104 W, about 128 times one thread's 0.69 M; throughput is linear in instances and the board draws nearly the same power at 1 as at 476, so the joules per label fall only by filling memory with instances (the trap, measured).
|
||||
- RTX 5090, diag-n12 (not a B3 size): 0.10 MiB per instance lets 93706 instances fill the card (453 W, 11.91 G labels per second, 38 nJ per label); an instance this small (0.20 MiB with its tree) fits in a specialist's on-die SRAM, which is the other side of the trap.
|
||||
- RTX 5090, diag-n14 (not a B3 size): 0.50 MiB per instance lets 28102 instances fill the card (431 W, 9.43 G labels per second, 46 nJ per label); an instance this small (1.00 MiB with its tree) fits in a specialist's on-die SRAM, which is the other side of the trap.
|
||||
- RTX 5090, diag-n16 (not a B3 size): 2.00 MiB per instance lets 7457 instances fill the card (318 W, 5.00 G labels per second, 64 nJ per label); an instance this small (4.00 MiB with its tree) fits in a specialist's on-die SRAM, which is the other side of the trap.
|
||||
- RTX 5090, diag-n18 (not a B3 size): 8.00 MiB per instance lets 1897 instances fill the card (163 W, 1.28 G labels per second, 127 nJ per label); an instance this small (16.00 MiB with its tree) fits in a specialist's on-die SRAM, which is the other side of the trap.
|
||||
- RTX 4090, main-n20: 353 instances of 32 MiB label 212.3 M per second at 79 W board (372 nJ per label); one instance takes 1.81 s on the GPU against 0.49 s on one CPU thread; the card equals 52 CPU threads, so a 64-core server CPU out-labels it: no GPU advantage, principally CPU-friendly.
|
||||
- RTX 4090, main-n22: 88 instances of 128 MiB label 52.5 M per second at 79 W board (1,501 nJ per label); one instance takes 7.08 s on the GPU against 1.97 s on one CPU thread; a 16-core desktop CPU out-labels the whole card (the card equals 13.2 CPU threads): principally CPU-friendly, the plan's rejection case.
|
||||
- RTX 4090, main-n24: 22 instances of 512 MiB label 13.2 M per second at 78 W board (5,930 nJ per label); one instance takes 27.94 s on the GPU against 8.07 s on one CPU thread; a 16-core desktop CPU out-labels the whole card (the card equals 3.5 CPU threads): principally CPU-friendly, the plan's rejection case.
|
||||
- RTX 4090, abl-n20-aos: the instance-major (AOS) layout changes the card's labels per second by -5.1 percent against the SOA main row; layout is not the lever, the dependency chain is.
|
||||
- RTX 4090, abl-n20-tpb32: the 32-thread blocks (one warp per block, spread over more SMs) changes the card's labels per second by -0.2 percent against the SOA main row; layout is not the lever, the dependency chain is.
|
||||
- RTX 4090, ladder-n20-B1: 1 instance(s) in flight label 0.62 M per second at 76 W, about 1 times one thread's 0.62 M; throughput is linear in instances and the board draws nearly the same power at 1 as at 353, so the joules per label fall only by filling memory with instances (the trap, measured).
|
||||
- RTX 4090, ladder-n20-B32: 32 instance(s) in flight label 19.48 M per second at 77 W, about 32 times one thread's 0.61 M; throughput is linear in instances and the board draws nearly the same power at 1 as at 353, so the joules per label fall only by filling memory with instances (the trap, measured).
|
||||
- RTX 4090, ladder-n20-B128: 128 instance(s) in flight label 76.61 M per second at 78 W, about 128 times one thread's 0.60 M; throughput is linear in instances and the board draws nearly the same power at 1 as at 353, so the joules per label fall only by filling memory with instances (the trap, measured).
|
||||
- RTX 4090, diag-n12 (not a B3 size): 0.10 MiB per instance lets 69485 instances fill the card (406 W, 9.08 G labels per second, 45 nJ per label); an instance this small (0.20 MiB with its tree) fits in a specialist's on-die SRAM, which is the other side of the trap.
|
||||
- RTX 4090, diag-n14 (not a B3 size): 0.50 MiB per instance lets 20838 instances fill the card (339 W, 6.67 G labels per second, 51 nJ per label); an instance this small (1.00 MiB with its tree) fits in a specialist's on-die SRAM, which is the other side of the trap.
|
||||
- RTX 4090, diag-n16 (not a B3 size): 2.00 MiB per instance lets 5530 instances fill the card (206 W, 3.24 G labels per second, 63 nJ per label); an instance this small (4.00 MiB with its tree) fits in a specialist's on-die SRAM, which is the other side of the trap.
|
||||
- RTX 4090, diag-n18 (not a B3 size): 8.00 MiB per instance lets 1407 instances fill the card (114 W, 0.84 G labels per second, 136 nJ per label); an instance this small (16.00 MiB with its tree) fits in a specialist's on-die SRAM, which is the other side of the trap.
|
||||
|
||||
## Control rows, the B3 lane's SHA-256 reading (B3P1)
|
||||
|
||||
Before B1's reference existed this lane ran its own literal reading of the paper (SHA-256, no tags, the same graph rule with SHA-256 coins). These rows are a control, not the function: their oracle is the lane's own reference (`cpu_ref selftest`, the GPU byte-identical on every checked instance, the known-failed test PASS). They show the one thing the B1 rows cannot: what a two-block label (first block independent of `l_{v-1}`) buys with two cooperating lanes (k2), about 1.6x per instance on both cards. The CPU column here is a sha_ni core.
|
||||
|
||||
#### NVIDIA GeForce RTX 5090 (rented pod, stock clocks; host CPU AMD EPYC 7K62 48-Core Processor, nproc=26 cgroup_cpus=26); idle board power 5.8 W over 30 samples (not subtracted)
|
||||
|
||||
| row | MiB per instance | instances in flight | kernel, layout | label pass per batch (s) | labels/s, card | ns per label, per instance | board W (mean) | nJ per label | J per instance (labels) | commit per batch (s) | proof per batch (s) | GPU instance latency (s) | CPU sequential instance (s) | card = N one-thread CPU instances | oracle | accepted proofs |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| main-n20-k1 | 32.0 | 476 of 476 | k1, soa | 2.375 | 210.2 M | 2,265 | 105 | 498.3 | 0.52 | 0.0496 | 0.0502 | 2.47 | 0.22 | 25.9 | IDENTICAL (2 checked) | 476 of 476 |
|
||||
| main-n20-k2 | 32.0 | 476 of 476 | k2, soa | 1.450 | 344.2 M | 1,383 | 123 | 355.9 | 0.37 | 0.0499 | 0.0489 | 1.55 | 0.22 | 42.4 | IDENTICAL (2 checked) | 476 of 476 |
|
||||
| main-n22-k1 | 128.0 | 119 of 119 | k1, soa | 9.526 | 52.4 M | 2,271 | 105 | 2,001.3 | 8.39 | 0.0499 | 0.0182 | 9.59 | 0.92 | 6.8 | IDENTICAL (2 checked) | 119 of 119 |
|
||||
| main-n22-k2 | 128.0 | 119 of 119 | k2, soa | 5.811 | 85.9 M | 1,385 | 107 | 1,244.1 | 5.22 | 0.0497 | 0.0195 | 5.88 | 0.92 | 11.1 | IDENTICAL (2 checked) | 119 of 119 |
|
||||
| main-n24-k1 | 512.0 | 29 of 29 | k1, soa | 37.719 | 12.9 M | 2,248 | 102 | 7,916.2 | 132.81 | 0.0485 | 0.0074 | 37.78 | 3.88 | 1.8 | IDENTICAL (2 checked) | 29 of 29 |
|
||||
| main-n24-k2 | 512.0 | 29 of 29 | k2, soa | 22.628 | 21.5 M | 1,349 | 97 | 4,507.1 | 75.62 | 0.0484 | 0.0074 | 22.68 | 3.88 | 3.0 | IDENTICAL (2 checked) | 29 of 29 |
|
||||
| abl-n20-k1-aos | 32.0 | 476 of 476 | k1, aos | 2.294 | 217.5 M | 2,188 | 115 | 530.0 | 0.56 | 0.0654 | 0.0604 | 2.42 | 0.22 | 26.8 | IDENTICAL (2 checked) | 476 of 476 |
|
||||
| ladder-n20-B1-k2 | 32.0 | 1 of 476 | k2, soa | 1.336 | 0.8 M | 1,274 | 100 | 127,264.1 | 133.45 | 0.0004 | 0.0008 | 1.34 | 0.22 | 0.1 | IDENTICAL (1 checked) | 1 of 1 |
|
||||
| ladder-n20-B1-k1 | 32.0 | 1 of 476 | k1, soa | 2.218 | 0.5 M | 2,115 | 102 | 214,807.2 | 225.24 | 0.0005 | 0.0008 | 2.22 | 0.22 | 0.1 | IDENTICAL (1 checked) | 1 of 1 |
|
||||
| ladder-n20-B32-k2 | 32.0 | 32 of 476 | k2, soa | 1.385 | 24.2 M | 1,321 | 107 | 4,431.8 | 4.65 | 0.0037 | 0.0062 | 1.39 | 0.22 | 3.0 | IDENTICAL (1 checked) | 32 of 32 |
|
||||
| ladder-n20-B32-k1 | 32.0 | 32 of 476 | k1, soa | 2.322 | 14.5 M | 2,214 | 103 | 7,112.4 | 7.46 | 0.0037 | 0.0074 | 2.33 | 0.22 | 1.8 | IDENTICAL (1 checked) | 32 of 32 |
|
||||
| ladder-n20-B128-k2 | 32.0 | 128 of 476 | k2, soa | 1.445 | 92.9 M | 1,378 | 105 | 1,135.1 | 1.19 | 0.0136 | 0.0184 | 1.48 | 0.22 | 11.5 | IDENTICAL (1 checked) | 128 of 128 |
|
||||
| ladder-n20-B128-k1 | 32.0 | 128 of 476 | k1, soa | 2.361 | 56.9 M | 2,251 | 104 | 1,834.0 | 1.92 | 0.0135 | 0.0172 | 2.39 | 0.22 | 7.0 | IDENTICAL (1 checked) | 128 of 128 |
|
||||
| diag-n14-k1 | 0.5 | 28102 of 28102 | k1, soa | 0.068 | 6,755.6 M | 4,160 | 413 | 61.2 | 0.00 | 0.0471 | 1.9260 | 2.04 | - | - | IDENTICAL (2 checked) | 28102 of 28102 |
|
||||
| diag-n16-k1 | 2.0 | 7457 of 7457 | k1, soa | 0.149 | 3,269.4 M | 2,281 | 266 | 81.5 | 0.01 | 0.0498 | 0.6482 | 0.85 | - | - | IDENTICAL (2 checked) | 7457 of 7457 |
|
||||
| diag-n18-k1 | 8.0 | 1897 of 1897 | k1, soa | 0.597 | 833.5 M | 2,276 | 146 | 174.6 | 0.05 | 0.0502 | 0.1750 | 0.82 | - | - | IDENTICAL (2 checked) | 1897 of 1897 |
|
||||
|
||||
CPU reference on the same pod (cpu_ref: sha_ni SHA-256, byte-identical to the B3P1 spec by selftest):
|
||||
|
||||
| n | MiB | threads | label s per instance | Merkle s | proof s | verify s | labels/s per instance | instance labels per wall second, whole prover, all threads | accepted |
|
||||
|---|---|---|---|---|---|---|---|---|---|
|
||||
| 20 | 32 | 1 | 0.129 | 0.094 | 0.00028 | 0.00224 | 8.11 M | 4.5 M | 1 of 1 |
|
||||
| 22 | 128 | 1 | 0.544 | 0.373 | 0.00045 | 0.00246 | 7.71 M | 4.4 M | 1 of 1 |
|
||||
| 24 | 512 | 1 | 2.327 | 1.550 | 0.00070 | 0.00269 | 7.21 M | 4.2 M | 1 of 1 |
|
||||
| 20 | 32 | 26 | 0.136 | 0.097 | 0.00034 | 0.00225 | 7.72 M | 59.7 M | 26 of 26 |
|
||||
| 22 | 128 | 26 | 0.561 | 0.390 | 0.15758 | 0.00288 | 7.48 M | 53.2 M | 26 of 26 |
|
||||
|
||||
#### NVIDIA GeForce RTX 4090 (rented pod, stock clocks; host CPU AMD EPYC 7513 32-Core Processor, nproc=15 cgroup_cpus=15); idle board power 14.6 W over 30 samples (not subtracted)
|
||||
|
||||
| row | MiB per instance | instances in flight | kernel, layout | label pass per batch (s) | labels/s, card | ns per label, per instance | board W (mean) | nJ per label | J per instance (labels) | commit per batch (s) | proof per batch (s) | GPU instance latency (s) | CPU sequential instance (s) | card = N one-thread CPU instances | oracle | accepted proofs |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| main-n20-k1 | 32.0 | 353 of 353 | k1, soa | 2.399 | 154.3 M | 2,288 | 79 | 512.0 | 0.54 | 0.0481 | 0.0289 | 2.48 | 0.19 | 16.0 | IDENTICAL (2 checked) | 353 of 353 |
|
||||
| main-n20-k2 | 32.0 | 353 of 353 | k2, soa | 1.435 | 258.0 M | 1,368 | 94 | 362.6 | 0.38 | 0.0478 | 0.0295 | 1.51 | 0.19 | 26.7 | IDENTICAL (2 checked) | 353 of 353 |
|
||||
| main-n22-k1 | 128.0 | 88 of 88 | k1, soa | 9.619 | 38.4 M | 2,293 | 79 | 2,065.3 | 8.66 | 0.0477 | 0.0095 | 9.68 | 0.82 | 4.4 | IDENTICAL (2 checked) | 88 of 88 |
|
||||
| main-n22-k2 | 128.0 | 88 of 88 | k2, soa | 5.801 | 63.6 M | 1,383 | 81 | 1,274.6 | 5.35 | 0.0482 | 0.0094 | 5.86 | 0.82 | 7.3 | IDENTICAL (2 checked) | 88 of 88 |
|
||||
| main-n24-k1 | 512.0 | 22 of 22 | k1, soa | 38.474 | 9.6 M | 2,293 | 79 | 8,278.1 | 138.88 | 0.0478 | 0.0032 | 38.52 | 3.44 | 1.2 | IDENTICAL (2 checked) | 22 of 22 |
|
||||
| main-n24-k2 | 512.0 | 22 of 22 | k2, soa | 22.738 | 16.2 M | 1,355 | 78 | 4,826.6 | 80.98 | 0.0480 | 0.0030 | 22.79 | 3.44 | 2.0 | IDENTICAL (2 checked) | 22 of 22 |
|
||||
| abl-n20-k1-aos | 32.0 | 353 of 353 | k1, aos | 2.424 | 152.7 M | 2,311 | 83 | 542.7 | 0.57 | 0.0835 | 0.0314 | 2.54 | 0.19 | 15.8 | IDENTICAL (2 checked) | 353 of 353 |
|
||||
| ladder-n20-B1-k2 | 32.0 | 1 of 353 | k2, soa | 1.375 | 0.8 M | 1,312 | 78 | 102,447.5 | 107.42 | 0.0003 | 0.0003 | 1.38 | 0.19 | 0.1 | IDENTICAL (1 checked) | 1 of 1 |
|
||||
| ladder-n20-B1-k1 | 32.0 | 1 of 353 | k1, soa | 2.337 | 0.4 M | 2,229 | 78 | 173,376.7 | 181.80 | 0.0003 | 0.0003 | 2.34 | 0.19 | 0.0 | IDENTICAL (1 checked) | 1 of 1 |
|
||||
| ladder-n20-B32-k2 | 32.0 | 32 of 353 | k2, soa | 1.400 | 24.0 M | 1,335 | 78 | 3,271.3 | 3.43 | 0.0045 | 0.0034 | 1.41 | 0.19 | 2.5 | IDENTICAL (1 checked) | 32 of 32 |
|
||||
| ladder-n20-B32-k1 | 32.0 | 32 of 353 | k1, soa | 2.371 | 14.2 M | 2,261 | 77 | 5,451.3 | 5.72 | 0.0045 | 0.0038 | 2.38 | 0.19 | 1.5 | IDENTICAL (1 checked) | 32 of 32 |
|
||||
| ladder-n20-B128-k2 | 32.0 | 128 of 353 | k2, soa | 1.443 | 93.0 M | 1,376 | 78 | 839.9 | 0.88 | 0.0174 | 0.0110 | 1.47 | 0.19 | 9.6 | IDENTICAL (1 checked) | 128 of 128 |
|
||||
| ladder-n20-B128-k1 | 32.0 | 128 of 353 | k1, soa | 2.399 | 55.9 M | 2,288 | 78 | 1,402.7 | 1.47 | 0.0175 | 0.0119 | 2.43 | 0.19 | 5.8 | IDENTICAL (1 checked) | 128 of 128 |
|
||||
| diag-n14-k1 | 0.5 | 20838 of 20838 | k1, soa | 0.070 | 4,897.5 M | 4,255 | 305 | 62.4 | 0.00 | 0.0447 | 1.0917 | 1.21 | - | - | IDENTICAL (2 checked) | 20838 of 20838 |
|
||||
| diag-n16-k1 | 2.0 | 5530 of 5530 | k1, soa | 0.152 | 2,382.2 M | 2,321 | 189 | 79.5 | 0.01 | 0.0468 | 0.3434 | 0.54 | - | - | IDENTICAL (2 checked) | 5530 of 5530 |
|
||||
| diag-n18-k1 | 8.0 | 1407 of 1407 | k1, soa | 0.602 | 613.0 M | 2,295 | 108 | 176.8 | 0.05 | 0.0473 | 0.0980 | 0.75 | - | - | IDENTICAL (2 checked) | 1407 of 1407 |
|
||||
|
||||
CPU reference on the same pod (cpu_ref: sha_ni SHA-256, byte-identical to the B3P1 spec by selftest):
|
||||
|
||||
| n | MiB | threads | label s per instance | Merkle s | proof s | verify s | labels/s per instance | instance labels per wall second, whole prover, all threads | accepted |
|
||||
|---|---|---|---|---|---|---|---|---|---|
|
||||
| 20 | 32 | 1 | 0.108 | 0.084 | 0.00022 | 0.00193 | 9.66 M | 5.3 M | 1 of 1 |
|
||||
| 22 | 128 | 1 | 0.484 | 0.331 | 0.00028 | 0.00213 | 8.67 M | 5.0 M | 1 of 1 |
|
||||
| 24 | 512 | 1 | 2.101 | 1.335 | 0.00034 | 0.00231 | 7.98 M | 4.8 M | 1 of 1 |
|
||||
| 20 | 32 | 15 | 0.115 | 0.084 | 0.00024 | 0.00196 | 9.09 M | 58.0 M | 15 of 15 |
|
||||
| 22 | 128 | 15 | 0.516 | 0.342 | 0.02408 | 0.00226 | 8.13 M | 56.3 M | 15 of 15 |
|
||||
|
||||
## BLOCKED and open rows
|
||||
|
||||
| row | what | why it is open | who closes it |
|
||||
|---|---|---|---|
|
||||
| X-1 | any comparison of this work unit with the v6 work unit (per accepted proof against per accepted v6 share) | the Track B rule: an equivalent lottery-contribution and security-budget comparison must be written and approved by the coordinator before any such number; none exists | the coordinator, then this lane re-reads the rows under it |
|
||||
| X-2 | the number of challenges k | [BS25] Corollary 3 sets k = 2 lambda log N / c1 with DRSample's depth-robustness constant; with [ABH17]'s proved constants (e about 2.43e-4 N / log N) k exceeds N, so no concrete k follows from the proved bound; the rows use k = 64 for timing only (proof creation is under 0.04 s per batch at k = 64 and scales linearly; proof size 129 to 154 KB at k = 64) | B1 and B4 (the concrete constants) |
|
||||
| X-3 | joules per label for the CPU baseline, and any wall-power figure | rented containers expose no wall meter and no RAPL counters; the GPU rows are board power only | a box with a wall meter (the house rigs are blocked for every lane today) |
|
||||
| X-4 | the specialist's energy per label for this function | the adversary lane's chip model; an approximate reading from memory follows, labelled approximate and neither a WITNESS nor a BOUND: a BLAKE2b compression costs a hashing ASIC on the order of picojoules, and one 32-byte SRAM read plus one write per label is of the same order, so a specialist's energy per label at 32 MiB is plausibly one to two orders of magnitude under the GPU's 0.4 to 0.5 microjoules | the adversary lane (WITNESS rows) |
|
||||
| X-5 | B1's reference is a working copy (build-6, 09:26Z), not landed | the oracle must be re-read against the landed fixtures; `test_known_failed_b1.sh <landed kat dir>` is the re-read, minutes per card | this lane, the hour B1 lands |
|
||||
| X-6 | an encoding that halves the per-label critical path for every prover (two-block label, first block independent of `l_{v-1}`) | B3P1 shows 1.6x per GPU instance; it helps a CPU and a specialist the same way, so it is not a GPU lever, and changing the encoding is B1's and B2's call with its own proof review | B1, B2 |
|
||||
| X-7 | 8, 12 and 16 GB cards | not rented; instance counts scale with memory; the tier table below derives them from the measured per-instance rate (derived, not measured) | the fleet lane can rent a 4060/3060-class pod on request |
|
||||
| X-8 | a cheating prover on a GPU (partial labelling, the ex-post-facto graph of [BS25] section 4) | B4's theorem work defines the adversary first; B3 measured the honest prover only | B4, then this lane |
|
||||
| X-9 | the trimmed-tree honest prover (keep only the upper Merkle levels, rebuild sibling subtrees at proof time) | not built; it raises instances in flight by at most about 2x (the tree is half of the state), which moves no row out of the trap | this lane if the panel asks |
|
||||
|
||||
## Consequences for each user tier
|
||||
|
||||
Derived, not measured, except the 24 and 32 GB rows above: instances = (card memory - 1.5 GB reserve) / (labels + tree + proof slot), labels per second = instances / one thread's measured time per label (1,667 ns, the 4090 B1 main rows); "CPU threads" divides by the 4090 pod's one-thread C-port rate at the same size.
|
||||
|
||||
| card memory | 32 MiB: instances, M labels/s, = CPU threads | 128 MiB | 512 MiB |
|
||||
|---|---|---|---|
|
||||
| 8 GB | 103, 61.8 M, 15.0 | 25, 15.0 M, 3.8 | 6, 3.6 M, 0.9 |
|
||||
| 12 GB | 167, 100.2 M, 24.4 | 41, 24.6 M, 6.2 | 10, 6.0 M, 1.6 |
|
||||
| 16 GB | 231, 138.5 M, 33.7 | 57, 34.2 M, 8.6 | 14, 8.4 M, 2.2 |
|
||||
| 24 GB | 359, 215.3 M, 52.4 | 89, 53.4 M, 13.4 | 22, 13.2 M, 3.5 |
|
||||
| 32 GB | 487, 292.1 M, 71.1 | 121, 72.6 M, 18.3 | 30, 18.0 M, 4.7 |
|
||||
|
||||
What it means per tier: a home miner with one 8 GB card at 32 MiB per instance labels about as fast as 15 CPU threads, at 512 MiB as fast as 0.9 of one CPU thread; one 24 or 32 GB card equals 52 to 71 CPU threads at 32 MiB and 3.5 to 4.7 at 512 MiB (one-thread kernel; the measured rows above add the board's own figures); a rig scales linearly with cards and so does a server CPU with cores. A pool user sees the same per-card rate. Windows and Linux run the same CUDA kernel (measured on Linux only); AMD, Intel and Apple GPUs have no kernel here (the per-thread chain argument applies to them unchanged: one instance per lane, instances capped by memory). What this lane does about it: the B3 sizes are reported as failing the plan's GPU-competitiveness gate; the only GPU-favourable regime measured is instances under 2 MiB, which hands the specialist an SRAM-resident design (rows diag-n12 to n16), so B3 asks B1, B2 and B4 for a construction whose per-label work is memory-bound rather than hash-bound before any further GPU tuning.
|
||||
|
||||
## Commands
|
||||
|
||||
```
|
||||
tools/mhpow/b3/build.sh # on the pod: cpu_ref, b3_gpu (B3P1), cpu_ref_b1, b3_gpu_b1 (B1)
|
||||
tools/mhpow/b3/test_known_failed_b1.sh <b1-kat-dir> # the oracle chain and its known-failed case
|
||||
tools/mhpow/b3/run_rows_b1.sh <card-label> <b1-kat-dir> # the B1 rows, writes /root/b3/out/<label>/
|
||||
tools/mhpow/b3/test_known_failed.sh; tools/mhpow/b3/run_rows.sh <card-label> # the B3P1 control
|
||||
cd docs/analysis/mhpow/b3/rows && python3 ../../../../../tools/mhpow/b3/parse_rows.py rtx5090-b1 rtx4090-b1
|
||||
```
|
||||
106
docs/analysis/mhpow/b3/README.src.md
Normal file
106
docs/analysis/mhpow/b3/README.src.md
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
# B3: GPU adaptation of the MTP/DRSample proof of work, without changing the theorem
|
||||
|
||||
Track B item B3 (package R15-06, the GPU feasibility lane), 9 October 2026. Status: every row below is NOT RUN until the panel reads it. Nothing activates. No row compares this work unit with the v6 work unit; that comparison needs a contract that does not exist yet (row X-1). No PASS is claimed here.
|
||||
|
||||
## The finding in one paragraph (for the panel; NOT RUN)
|
||||
|
||||
The exact function runs on the GPU byte for byte (B1's fixtures reproduced; every GPU proof accepted; the known-failed graph refused). At the B3 sizes the GPU is caught in the trap the plan warned of: each instance is one hash chain (one BLAKE2b block per label, about 1.5 to 1.7 microseconds on one GPU thread), memory caps the instances in flight, and so a whole RTX 5090 / RTX 4090 labels like 87 / 52 one-thread CPU instances at 32 MiB, 23 / 13 at 128 MiB and 5.8 / 3.5 at 512 MiB, drawing about 80 to 110 W of a 450 to 480 W board. At 128 and 512 MiB the function is principally CPU-friendly, the plan's rejection case; at 32 MiB the card is a mid-size server CPU. The card fills itself only with instances of 2 MiB or less (5 to 12 G labels per second, 38 to 64 nJ per label), which a specialist holds whole in on-die SRAM. Layout (SOA against AOS, block shape) moves the rate by 0 to 5 percent: the lever is the dependency chain, not the memory system. These rows are the control for the Track B pivot.
|
||||
|
||||
## Sources (by sha)
|
||||
|
||||
| source | identity |
|
||||
|---|---|
|
||||
| The founder's research plan, "IGNEUM - The 1.5x Research Programme" (sections 4.6, 6 B3, 8, 10) | sha256 269ceaa5824d09140a1bcc124dba59438db5a5e68fddc18960db7141fefc0305 |
|
||||
| The 1.5x experiment brief | sha256 74ee073286d4a6e2... (as cited by the common brief) |
|
||||
| [BS25] Blocki and Smearsoll, Provably Memory-Hard Proofs of Work With Memory-Easy Verification, TCC 2025, eprint 2025/1456, the FULL paper (46 pages, TeX build 11 Aug 2025) | sha256 13c3646e7d85c1aa58a92914582caab5798d90cf2a3cad33e58d81d49c1d31db (eprint.iacr.org answers curl with a Cloudflare challenge; this copy is the Wayback Machine's capture of the eprint PDF) |
|
||||
| [ABH17] Alwen, Blocki and Harsha, Practical Graphs for Optimal Side-Channel Resistant Memory-Hard Functions, CCS 2017, eprint 2017/443, Algorithm 1 (DRSample) | sha256 f8e08d361118120c905550d3ac63efffe2a806d68276b070c24e7aa15d8fa8eb (17 pages, Wayback capture) |
|
||||
| The B1 lane's CPU reference (R15-05), working copy on build-6 at 09:26Z, not yet landed | params.py d47b8ff5..., drsample.py 4169a5fc..., mtp.py c0feed31..., gen_fixtures.py b7a2a89f...; fixtures kat-n04..n20 (SHA256SUMS: kat-n20.json fd0d75b6..., kat-n20.proof.bin a49367d9...) |
|
||||
| This lane's code | tools/mhpow/b3/ on branch mhpow-b3; B1-encoding build id d672d3839ebb45e5, B3P1 control build id 2079d0d8ce7eef96 (sha256 of the four source files, build.sh) |
|
||||
|
||||
Sections of [BS25] used: 2.2 (the labelling game, `l_v = H(chi, v, parents' labels)`), 3.2 (the MTP framework: honest prover, commitment, challenges, verifier), 4.1 (the Merkle layout), 5 and 6.1 (the soundness bound and the DRSample instantiation, which cites [ABH17] for the graph).
|
||||
|
||||
## What the function is, and what B3 may change
|
||||
|
||||
The honest prover of [BS25] section 3.2, in B1's encoding (BLAKE2b-256, lambda = 256, one-byte tags L/M/C/G, u64 little-endian integers, the graph sampled once from a public seed by [ABH17] Algorithm 1 with rejection sampling):
|
||||
|
||||
1. label every node in topological order: `l_1 = H('L' | chi | 1)`, `l_2 = H('L' | chi | 2 | l_1)`, `l_v = H('L' | chi | v | l_{v-r} | l_{v-1})` with `v-r <= v-2` drawn by DRSample;
|
||||
2. commit: a Merkle tree over the N labels in the paper's bit order, inner nodes `H('M' | chi | left | right)`;
|
||||
3. challenge: `c_i = H('C' | chi | i | root) mod N`, i = 1..k;
|
||||
4. open each challenged node and its parents with their Merkle paths (B1's container `B1MTPDR1`).
|
||||
|
||||
B3 changes representation and scheduling only. The DAG edge rule, the hash, every byte hashed, the domain tags, the challenge rule and the proof container are B1's, and the oracle checks that byte for byte. What changes:
|
||||
|
||||
| change | what it is | why it is allowed |
|
||||
|---|---|---|
|
||||
| batching across instances | many instances (different chi) in flight; the graph table is shared because the graph is data-independent and fixed a priori | each instance is computed exactly as specified; nothing crosses instances |
|
||||
| coalesced label storage (SOA) | labels as 4 little-endian u64 words, instance-interleaved in 16-byte halves, `(row*2+h)*B + inst`; because every instance reads the same node numbers at the same step, a warp's loads of `l_{v-r}` are one contiguous run | same bytes, different addresses |
|
||||
| AOS (ablation) | instance-major rows | same bytes |
|
||||
| the far parent fetched ahead | `l_{far(v+1)}` (always `<= v-1`) is loaded while node v hashes; `l_{v-1}` never leaves registers | the parents' labels are those of the graph; only the load time moves |
|
||||
| cooperative lanes (B3P1 control only) | in a SHA-256 reading the 104-byte label message is two blocks and the first (`chi | v | l_{v-r}[0..23]`) does not depend on `l_{v-1}`, so lane A computes node v+1's first block while lane B finishes node v | the same two compressions per label; the order of independent work changes |
|
||||
|
||||
In B1's encoding there is no cooperative split of one label: the 105-byte label message is ONE BLAKE2b block, so the per-label critical path is one compression however many lanes share it. That is a property of the encoding, not of the GPU, and it is recorded here because it decides how much a GPU can shorten one instance's chain (row X-6).
|
||||
|
||||
## The under-utilisation trap (stated before the first row)
|
||||
|
||||
Each instance is one sequential dependency chain of N labels: `l_v` needs `l_{v-1}`, so one instance can occupy one GPU thread (or, where the encoding permits, two cooperating lanes) and no more. A GPU fills its memory bandwidth and its arithmetic only with tens of thousands of threads in flight. The only lever the theorem permits for more threads is more instances, and each honest instance must hold its N labels (the memory-hard part: [BS25] proves that a prover who keeps less pays in cumulative memory) plus its Merkle tree. So the card's memory caps the instances in flight: at 32 MiB of labels per instance (64 MiB with the tree) a 32 GB card holds about 476 instances, at 128 MiB about 119, at 512 MiB about 29. Shrinking the instance to fill the card (tens of thousands of instances) makes each instance a few hundred KiB, small enough for a specialist to keep whole instances in on-die SRAM. Deleting edges or splitting the chain to create parallelism inside an instance changes the graph and voids the proof (the known-failed test below is exactly that change, and the oracle refuses it).
|
||||
|
||||
So the GPU's throughput at the B3 sizes is (instances that fit) divided by (one thread's time per label). One thread's time per label on these cards is about 1.7 microseconds (B1 encoding); one CPU thread's is 0.25 microseconds with the scalar BLAKE2b port (0.10 to 0.14 with sha_ni SHA-256 in the control). The rows measure how far that leaves the card below a CPU.
|
||||
|
||||
## Method
|
||||
|
||||
- Pods: a rented RTX 5090 (Vast 54994203, driver 580.126.09, host EPYC 7K62, the container's CPU quota 26 CPUs) and a rented RTX 4090 (Vast 54994221, driver 570.153.02, host EPYC 7513, quota 15 CPUs), from the fleet lane, CUDA 12.8. Stock clocks: no clock lock on a rented pod (said in every row). The 5090's host had set its board power limit to 480 W (default 600 W, meta.txt); no row drew more than about 415 W, so the limit did not bind. The 5090 host's load average was 81 at the start of the control run (other tenants on a shared EPYC), so its CPU rows are noisier than the 4090 host's. The host CPUs are shared with other tenants; the CPU rows carry the load average in meta.txt.
|
||||
- Power boundary: GPU board power (`nvidia-smi power.draw`) at 1 Hz for the whole run, integrated sample-and-hold over each row's labelling window; idle (5.8 W on the 5090, 14.6 W on the 4090, 30 s windows) is NOT subtracted; host and wall power are not measured (row X-3).
|
||||
- Each row: the B1 graph table on the host (the spec function, host threads), allocation, the label passes (repeated until at least 20 s of labelling so the 1 Hz meter has at least 20 samples; the first pass is dropped as warm-up when there are several), the commitment, the proof creation (device challenges and openings, copy home, B1's container), then every GPU proof through the C-port verifier with the TRUE graph, then the oracle.
|
||||
- The correctness oracle, in three links: (1) `cpu_ref_b1 kat` reproduces B1's five known-answer fixtures (n = 4, 8, 12, 16, 20: chi, graph parents, labels sha256, tau, proof sha256 and the .proof.bin bytes); (2) in every row the GPU's labels, every Merkle node, root and proof container equal the C port's for the checked instances (2 per main row, spread across the batch; every GPU proof is verified); (3) instance 0 of every batch is B1's own KAT input, and at n = 20 its labels sha256 and tau are compared with B1's kat-n20.json directly. A timing row counts only when all three say identical.
|
||||
- The known-failed test (`test_known_failed_b1.sh`): the GPU runs with DRSample's long edges deleted (`far(v) = v-2`, "a faster graph with the old proof"); the oracle must report MISMATCH, 0 proofs accepted and exit 1, and the unmodified run must report IDENTICAL with instance 0 equal to B1's fixture. Result on both cards: PASS (the oracle fired on the known-failed case and passed the known-finished one).
|
||||
- The CPU baseline: `cpu_ref_b1 time` on the pod's own CPU, the C port (portable BLAKE2b, the spec's bytes) with one thread (THE sequential row) and with the container's whole quota (a diagnostic). B1's own CPython reference took 1.016 s for the n = 20 labels on build-6 (its row-n20-k64.json), about 1 microsecond per label, which is CPython's call overhead; the C port is the fair CPU.
|
||||
- No raw hashes per second anywhere: rows are per instance, per label and per accepted proof.
|
||||
- Figures: every table below is the verbatim output of `python3 tools/mhpow/b3/parse_rows.py <dirs>` run in docs/analysis/mhpow/b3/rows/ on the raw files there (rows.jsonl, power.csv, idle.json, cpu.jsonl, meta.txt).
|
||||
|
||||
## Oracle verdicts
|
||||
|
||||
<<ORACLE>>
|
||||
|
||||
## Rows, B1 encoding (the counted rows)
|
||||
|
||||
Stock clocks, rented pods, board power, idle not subtracted, against B1's working-copy fixtures (B1 not landed; row X-5). k = 64 challenges in every row (a timing placeholder; row X-2).
|
||||
|
||||
<<B1_TABLES>>
|
||||
|
||||
### What each row means for GPU competitiveness
|
||||
|
||||
<<MEANING>>
|
||||
|
||||
## Control rows, the B3 lane's SHA-256 reading (B3P1)
|
||||
|
||||
Before B1's reference existed this lane ran its own literal reading of the paper (SHA-256, no tags, the same graph rule with SHA-256 coins). These rows are a control, not the function: their oracle is the lane's own reference (`cpu_ref selftest`, the GPU byte-identical on every checked instance, the known-failed test PASS). They show the one thing the B1 rows cannot: what a two-block label (first block independent of `l_{v-1}`) buys with two cooperating lanes (k2), about 1.6x per instance on both cards. The CPU column here is a sha_ni core.
|
||||
|
||||
<<B3P1_TABLES>>
|
||||
|
||||
## BLOCKED and open rows
|
||||
|
||||
| row | what | why it is open | who closes it |
|
||||
|---|---|---|---|
|
||||
| X-1 | any comparison of this work unit with the v6 work unit (per accepted proof against per accepted v6 share) | the Track B rule: an equivalent lottery-contribution and security-budget comparison must be written and approved by the coordinator before any such number; none exists | the coordinator, then this lane re-reads the rows under it |
|
||||
| X-2 | the number of challenges k | [BS25] Corollary 3 sets k = 2 lambda log N / c1 with DRSample's depth-robustness constant; with [ABH17]'s proved constants (e about 2.43e-4 N / log N) k exceeds N, so no concrete k follows from the proved bound; the rows use k = 64 for timing only (proof creation is under 0.04 s per batch at k = 64 and scales linearly; proof size 129 to 154 KB at k = 64) | B1 and B4 (the concrete constants) |
|
||||
| X-3 | joules per label for the CPU baseline, and any wall-power figure | rented containers expose no wall meter and no RAPL counters; the GPU rows are board power only | a box with a wall meter (the house rigs are blocked for every lane today) |
|
||||
| X-4 | the specialist's energy per label for this function | the adversary lane's chip model; an approximate reading from memory follows, labelled approximate and neither a WITNESS nor a BOUND: a BLAKE2b compression costs a hashing ASIC on the order of picojoules, and one 32-byte SRAM read plus one write per label is of the same order, so a specialist's energy per label at 32 MiB is plausibly one to two orders of magnitude under the GPU's 0.4 to 0.5 microjoules | the adversary lane (WITNESS rows) |
|
||||
| X-5 | B1's reference is a working copy (build-6, 09:26Z), not landed | the oracle must be re-read against the landed fixtures; `test_known_failed_b1.sh <landed kat dir>` is the re-read, minutes per card | this lane, the hour B1 lands |
|
||||
| X-6 | an encoding that halves the per-label critical path for every prover (two-block label, first block independent of `l_{v-1}`) | B3P1 shows 1.6x per GPU instance; it helps a CPU and a specialist the same way, so it is not a GPU lever, and changing the encoding is B1's and B2's call with its own proof review | B1, B2 |
|
||||
| X-7 | 8, 12 and 16 GB cards | not rented; instance counts scale with memory; the tier table below derives them from the measured per-instance rate (derived, not measured) | the fleet lane can rent a 4060/3060-class pod on request |
|
||||
| X-8 | a cheating prover on a GPU (partial labelling, the ex-post-facto graph of [BS25] section 4) | B4's theorem work defines the adversary first; B3 measured the honest prover only | B4, then this lane |
|
||||
| X-9 | the trimmed-tree honest prover (keep only the upper Merkle levels, rebuild sibling subtrees at proof time) | not built; it raises instances in flight by at most about 2x (the tree is half of the state), which moves no row out of the trap | this lane if the panel asks |
|
||||
|
||||
## Consequences for each user tier
|
||||
|
||||
<<TIERS>>
|
||||
|
||||
## Commands
|
||||
|
||||
```
|
||||
tools/mhpow/b3/build.sh # on the pod: cpu_ref, b3_gpu (B3P1), cpu_ref_b1, b3_gpu_b1 (B1)
|
||||
tools/mhpow/b3/test_known_failed_b1.sh <b1-kat-dir> # the oracle chain and its known-failed case
|
||||
tools/mhpow/b3/run_rows_b1.sh <card-label> <b1-kat-dir> # the B1 rows, writes /root/b3/out/<label>/
|
||||
tools/mhpow/b3/test_known_failed.sh; tools/mhpow/b3/run_rows.sh <card-label> # the B3P1 control
|
||||
cd docs/analysis/mhpow/b3/rows && python3 ../../../../../tools/mhpow/b3/parse_rows.py rtx5090-b1 rtx4090-b1
|
||||
```
|
||||
5
docs/analysis/mhpow/b3/rows/rtx4090-b1/cpu.jsonl
Normal file
5
docs/analysis/mhpow/b3/rows/rtx4090-b1/cpu.jsonl
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{"mode":"cpu_time","encoding":"B1","impl":"C port, portable BLAKE2b","n":20,"N":1048576,"k":64,"threads":1,"graph_s_single_thread":0.441,"label_s_mean":0.2553,"merkle_s_mean":0.2298,"prove_s_mean":0.000137,"verify_s_mean":0.000814,"wall_s":0.492,"labels_per_s_per_instance":4107296.4,"labels_per_s_all":2130498.7,"accepted":1}
|
||||
{"mode":"cpu_time","encoding":"B1","impl":"C port, portable BLAKE2b","n":22,"N":4194304,"k":64,"threads":1,"graph_s_single_thread":1.767,"label_s_mean":1.0556,"merkle_s_mean":0.9120,"prove_s_mean":0.000147,"verify_s_mean":0.000896,"wall_s":1.987,"labels_per_s_per_instance":3973250.0,"labels_per_s_all":2110365.2,"accepted":1}
|
||||
{"mode":"cpu_time","encoding":"B1","impl":"C port, portable BLAKE2b","n":24,"N":16777216,"k":64,"threads":1,"graph_s_single_thread":7.097,"label_s_mean":4.4080,"merkle_s_mean":3.6580,"prove_s_mean":0.000182,"verify_s_mean":0.000971,"wall_s":8.144,"labels_per_s_per_instance":3806095.3,"labels_per_s_all":2060189.3,"accepted":1}
|
||||
{"mode":"cpu_time","encoding":"B1","impl":"C port, portable BLAKE2b","n":20,"N":1048576,"k":64,"threads":15,"graph_s_single_thread":0.440,"label_s_mean":0.2609,"merkle_s_mean":0.2324,"prove_s_mean":0.000138,"verify_s_mean":0.000833,"wall_s":0.567,"labels_per_s_per_instance":4018471.6,"labels_per_s_all":27757163.7,"accepted":15}
|
||||
{"mode":"cpu_time","encoding":"B1","impl":"C port, portable BLAKE2b","n":22,"N":4194304,"k":64,"threads":15,"graph_s_single_thread":1.770,"label_s_mean":1.0989,"merkle_s_mean":0.9401,"prove_s_mean":0.000152,"verify_s_mean":0.000921,"wall_s":2.297,"labels_per_s_per_instance":3816752.7,"labels_per_s_all":27388023.6,"accepted":15}
|
||||
1
docs/analysis/mhpow/b3/rows/rtx4090-b1/idle.json
Normal file
1
docs/analysis/mhpow/b3/rows/rtx4090-b1/idle.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"idle_window_unix_ms":[1791538382000,1791538412000]}
|
||||
15
docs/analysis/mhpow/b3/rows/rtx4090-b1/known-failed-b1.log
Normal file
15
docs/analysis/mhpow/b3/rows/rtx4090-b1/known-failed-b1.log
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{"kat":4,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
{"kat":8,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
{"kat":12,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
{"kat":16,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
{"kat":20,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
CASE b1_kat_port PASS
|
||||
{"tag":"known-failed-b1","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B1","n":12,"N":4096,"inst_MiB":0.1,"B":96,"Bmax":69485,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":1,"passes":1,"graph_s":0.0024,"state_alloc_s":0.0004,"label_s_per_pass":0.006761,"labels_per_s":58155382.0,"labels_per_s_per_inst":605785.2,"ns_per_label_per_inst":1650.75,"merkle_s":0.000143,"prove_s":0.005608,"verify_all_s":0.0001,"accepted":0,"checked":4,"lab_bad_inst":4,"tree_bad_inst":4,"root_bad":4,"proof_bad":4,"b1_kat_instance0":0,"check_s":0.02,"oracle":"MISMATCH","label_window_unix_ms":[1791538838416,1791538838423],"free_gib":23.14,"per_inst_MiB":0.3,"proof_bytes_inst0":79981}
|
||||
CASE known_failed_wrong_edge_b1 PASS (oracle fired)
|
||||
{"tag":"known-finished-b1-n8","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B1","n":8,"N":256,"inst_MiB":0.0,"B":96,"Bmax":331078,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":1,"graph_s":0.0008,"state_alloc_s":0.0002,"label_s_per_pass":0.000553,"labels_per_s":44444446.2,"labels_per_s_per_inst":462963.0,"ns_per_label_per_inst":2160.00,"merkle_s":0.000084,"prove_s":0.004329,"verify_all_s":0.0021,"accepted":96,"checked":4,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":0.00,"oracle":"IDENTICAL","label_window_unix_ms":[1791538838737,1791538838738],"free_gib":23.14,"per_inst_MiB":0.1,"proof_bytes_inst0":55405}
|
||||
CASE known_finished_b1_n8 PASS
|
||||
{"tag":"known-finished-b1-n12","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B1","n":12,"N":4096,"inst_MiB":0.1,"B":96,"Bmax":69485,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":1,"graph_s":0.0024,"state_alloc_s":0.0004,"label_s_per_pass":0.007036,"labels_per_s":55887062.1,"labels_per_s_per_inst":582156.9,"ns_per_label_per_inst":1717.75,"merkle_s":0.000139,"prove_s":0.005734,"verify_all_s":0.0033,"accepted":96,"checked":4,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":0.03,"oracle":"IDENTICAL","label_window_unix_ms":[1791538839032,1791538839039],"free_gib":23.14,"per_inst_MiB":0.3,"proof_bytes_inst0":79981}
|
||||
CASE known_finished_b1_n12 PASS
|
||||
{"tag":"known-finished-b1-n16","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B1","n":16,"N":65536,"inst_MiB":2.0,"B":96,"Bmax":5530,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":1,"graph_s":0.0031,"state_alloc_s":0.0005,"label_s_per_pass":0.112919,"labels_per_s":55716740.3,"labels_per_s_per_inst":580382.7,"ns_per_label_per_inst":1723.00,"merkle_s":0.000802,"prove_s":0.007617,"verify_all_s":0.0048,"accepted":96,"checked":4,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":0.39,"oracle":"IDENTICAL","label_window_unix_ms":[1791538839361,1791538839474],"free_gib":23.14,"per_inst_MiB":4.1,"proof_bytes_inst0":104557}
|
||||
CASE known_finished_b1_n16 PASS
|
||||
RESULT test_known_failed_b1 PASS
|
||||
16
docs/analysis/mhpow/b3/rows/rtx4090-b1/meta.txt
Normal file
16
docs/analysis/mhpow/b3/rows/rtx4090-b1/meta.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
label=rtx4090-b1
|
||||
encoding=B1 (tools/mhpow/b1 at build-6 09:26Z: params.py d47b8ff5, drsample.py 4169a5fc, mtp.py c0feed31)
|
||||
src_id_b1=d672d3839ebb45e5
|
||||
2026-10-09T09:33:01Z
|
||||
model name : AMD EPYC 7513 32-Core Processor
|
||||
nproc=64 cgroup_cpus=15
|
||||
16.10 16.82 23.72 16/1143 1605
|
||||
name, driver_version, vbios_version, power.limit [W], power.default_limit [W], clocks.max.sm [MHz], clocks.max.memory [MHz], memory.total [MiB], pcie.link.gen.current, pcie.link.width.current
|
||||
NVIDIA GeForce RTX 4090, 570.153.02, 95.02.47.00.01, 450.00 W, 450.00 W, 3105 MHz, 10501 MHz, 24564 MiB, 1, 16
|
||||
Build cuda_12.8.r12.8/compiler.35583870_0
|
||||
{"kat":4,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
{"kat":8,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
{"kat":12,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
{"kat":16,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
{"kat":20,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
16.16 16.36 20.89 16/1194 2187
|
||||
436
docs/analysis/mhpow/b3/rows/rtx4090-b1/power.csv
Normal file
436
docs/analysis/mhpow/b3/rows/rtx4090-b1/power.csv
Normal file
|
|
@ -0,0 +1,436 @@
|
|||
2026/10/09 09:33:02.617, 15.49, 0, 0, 210, 405, 1, 35
|
||||
2026/10/09 09:33:03.619, 15.50, 0, 0, 210, 405, 1, 35
|
||||
2026/10/09 09:33:04.619, 15.55, 0, 0, 210, 405, 1, 35
|
||||
2026/10/09 09:33:05.619, 15.59, 0, 0, 210, 405, 1, 35
|
||||
2026/10/09 09:33:06.620, 15.61, 0, 0, 210, 405, 1, 35
|
||||
2026/10/09 09:33:07.620, 15.47, 0, 0, 210, 405, 1, 35
|
||||
2026/10/09 09:33:08.620, 15.48, 0, 0, 210, 405, 1, 35
|
||||
2026/10/09 09:33:09.621, 15.51, 0, 0, 210, 405, 1, 35
|
||||
2026/10/09 09:33:10.621, 15.50, 0, 0, 210, 405, 1, 35
|
||||
2026/10/09 09:33:11.621, 15.47, 0, 0, 210, 405, 1, 35
|
||||
2026/10/09 09:33:12.621, 15.46, 0, 0, 210, 405, 1, 35
|
||||
2026/10/09 09:33:13.622, 15.52, 0, 0, 210, 405, 1, 35
|
||||
2026/10/09 09:33:14.622, 15.57, 0, 0, 210, 405, 1, 35
|
||||
2026/10/09 09:33:15.622, 15.66, 0, 0, 210, 405, 1, 35
|
||||
2026/10/09 09:33:16.622, 15.73, 0, 0, 210, 405, 1, 35
|
||||
2026/10/09 09:33:17.623, 15.68, 0, 0, 210, 405, 1, 34
|
||||
2026/10/09 09:33:18.623, 15.65, 0, 0, 210, 405, 1, 34
|
||||
2026/10/09 09:33:19.623, 15.68, 0, 0, 210, 405, 1, 34
|
||||
2026/10/09 09:33:20.624, 15.63, 0, 0, 210, 405, 1, 34
|
||||
2026/10/09 09:33:21.624, 15.58, 0, 0, 210, 405, 1, 34
|
||||
2026/10/09 09:33:22.624, 15.53, 0, 0, 210, 405, 1, 34
|
||||
2026/10/09 09:33:23.624, 15.48, 0, 0, 210, 405, 1, 34
|
||||
2026/10/09 09:33:24.625, 15.48, 0, 0, 210, 405, 1, 34
|
||||
2026/10/09 09:33:25.625, 15.51, 0, 0, 210, 405, 1, 34
|
||||
2026/10/09 09:33:26.625, 15.56, 0, 0, 210, 405, 1, 34
|
||||
2026/10/09 09:33:27.626, 15.60, 0, 0, 210, 405, 1, 34
|
||||
2026/10/09 09:33:28.626, 15.65, 0, 0, 210, 405, 1, 34
|
||||
2026/10/09 09:33:29.626, 15.65, 0, 0, 210, 405, 1, 34
|
||||
2026/10/09 09:33:30.626, 15.65, 0, 0, 210, 405, 1, 34
|
||||
2026/10/09 09:33:31.627, 15.53, 0, 0, 210, 405, 1, 34
|
||||
2026/10/09 09:33:32.627, 15.41, 0, 0, 210, 405, 1, 34
|
||||
2026/10/09 09:33:33.631, 37.19, 3, 0, 2685, 10251, 23042, 37
|
||||
2026/10/09 09:33:34.632, 83.16, 100, 1, 2685, 10251, 23042, 37
|
||||
2026/10/09 09:33:35.632, 83.30, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:36.632, 83.58, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:37.632, 83.50, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:38.633, 83.81, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:39.633, 83.79, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:40.633, 83.76, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:41.633, 84.10, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:42.634, 84.00, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:43.634, 84.14, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:44.634, 84.02, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:45.635, 83.47, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:46.635, 83.28, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:47.635, 83.66, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:48.635, 83.61, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:49.636, 83.88, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:50.636, 84.24, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:51.636, 83.88, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:52.637, 84.41, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:33:53.637, 84.53, 100, 1, 2685, 10251, 23042, 39
|
||||
2026/10/09 09:33:54.637, 92.60, 100, 13, 2670, 10251, 23042, 37
|
||||
2026/10/09 09:33:55.637, 80.95, 0, 0, 2670, 10251, 23042, 37
|
||||
2026/10/09 09:33:56.638, 62.18, 0, 0, 2520, 10251, 23042, 37
|
||||
2026/10/09 09:33:57.638, 60.73, 0, 0, 2520, 10251, 23042, 36
|
||||
2026/10/09 09:33:58.638, 59.44, 0, 0, 2520, 10251, 23042, 36
|
||||
2026/10/09 09:33:59.639, 59.52, 0, 0, 2520, 10251, 23042, 36
|
||||
2026/10/09 09:34:00.639, 59.48, 0, 0, 2520, 10251, 23042, 36
|
||||
2026/10/09 09:34:01.639, 59.50, 0, 0, 2520, 10251, 23042, 36
|
||||
2026/10/09 09:34:02.639, 59.61, 0, 0, 2520, 10251, 23042, 36
|
||||
2026/10/09 09:34:03.640, 59.63, 0, 0, 2520, 10251, 23042, 36
|
||||
2026/10/09 09:34:04.640, 59.60, 0, 0, 2520, 10251, 23042, 36
|
||||
2026/10/09 09:34:05.640, 63.36, 62, 2, 2670, 10251, 23042, 37
|
||||
2026/10/09 09:34:06.641, 68.08, 56, 2, 2670, 10251, 23042, 37
|
||||
2026/10/09 09:34:07.641, 63.63, 0, 0, 2670, 10251, 23042, 37
|
||||
2026/10/09 09:34:08.641, 62.12, 0, 0, 2670, 10251, 23042, 36
|
||||
2026/10/09 09:34:09.642, 61.72, 0, 0, 2520, 10251, 22958, 37
|
||||
2026/10/09 09:34:10.642, 78.89, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:11.642, 79.66, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:12.642, 79.58, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:13.643, 79.55, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:14.643, 79.65, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:15.643, 79.66, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:16.643, 79.67, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:17.644, 79.56, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:18.644, 79.62, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:19.644, 79.61, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:20.645, 79.69, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:21.645, 79.76, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:22.645, 79.82, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:23.645, 79.81, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:24.646, 79.80, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:25.646, 79.85, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:26.646, 79.82, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:27.646, 79.92, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:28.647, 79.84, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:29.647, 79.93, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:30.647, 79.94, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:31.647, 81.98, 100, 0, 2670, 10251, 22958, 38
|
||||
2026/10/09 09:34:32.648, 80.50, 0, 0, 2670, 10251, 22958, 37
|
||||
2026/10/09 09:34:33.648, 62.44, 0, 0, 2520, 10251, 22958, 37
|
||||
2026/10/09 09:34:34.648, 60.96, 0, 0, 2520, 10251, 22958, 37
|
||||
2026/10/09 09:34:35.649, 59.58, 0, 0, 2520, 10251, 22958, 36
|
||||
2026/10/09 09:34:36.649, 59.60, 0, 0, 2520, 10251, 22958, 36
|
||||
2026/10/09 09:34:37.649, 59.67, 0, 0, 2520, 10251, 22958, 36
|
||||
2026/10/09 09:34:38.649, 59.67, 0, 0, 2520, 10251, 22958, 36
|
||||
2026/10/09 09:34:39.650, 59.64, 0, 0, 2520, 10251, 22958, 36
|
||||
2026/10/09 09:34:40.650, 59.60, 0, 0, 2520, 10251, 22958, 36
|
||||
2026/10/09 09:34:41.650, 60.05, 0, 0, 2670, 10251, 22958, 36
|
||||
2026/10/09 09:34:42.651, 68.85, 40, 1, 2670, 10251, 22958, 37
|
||||
2026/10/09 09:34:43.651, 66.58, 60, 2, 2670, 10251, 22958, 37
|
||||
2026/10/09 09:34:44.651, 64.24, 0, 0, 2670, 10251, 22958, 37
|
||||
2026/10/09 09:34:45.651, 62.18, 0, 0, 2520, 10251, 22958, 36
|
||||
2026/10/09 09:34:46.652, 60.74, 0, 0, 2520, 10251, 22958, 36
|
||||
2026/10/09 09:34:47.652, 59.39, 0, 0, 2520, 10251, 22958, 36
|
||||
2026/10/09 09:34:48.652, 59.55, 0, 0, 2520, 10251, 22958, 36
|
||||
2026/10/09 09:34:49.653, 62.47, 0, 0, 2670, 10501, 396, 36
|
||||
2026/10/09 09:34:50.653, 73.11, 100, 8, 2670, 10251, 22998, 37
|
||||
2026/10/09 09:34:51.653, 78.77, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:34:52.653, 78.94, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:34:53.654, 79.01, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:34:54.654, 79.10, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:34:55.654, 79.11, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:34:56.654, 79.21, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:34:57.655, 79.02, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:34:58.655, 79.01, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:34:59.655, 78.91, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:00.655, 78.92, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:01.656, 78.79, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:02.656, 78.69, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:03.656, 78.83, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:04.657, 78.79, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:05.657, 78.93, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:06.657, 79.00, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:07.657, 78.88, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:08.658, 79.03, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:09.658, 79.09, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:10.658, 79.08, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:11.658, 79.00, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:12.659, 78.95, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:13.659, 79.00, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:14.659, 78.76, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:15.660, 78.92, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:16.660, 78.90, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:17.660, 78.85, 100, 0, 2670, 10251, 22998, 38
|
||||
2026/10/09 09:35:18.660, 87.45, 100, 0, 2670, 10251, 22998, 39
|
||||
2026/10/09 09:35:19.661, 80.44, 0, 0, 2670, 10251, 22998, 37
|
||||
2026/10/09 09:35:20.661, 62.46, 0, 0, 2520, 10251, 22998, 37
|
||||
2026/10/09 09:35:21.661, 60.95, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:22.662, 59.55, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:23.662, 59.69, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:24.662, 59.83, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:25.662, 59.73, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:26.663, 59.70, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:27.663, 59.75, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:28.663, 59.72, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:29.664, 62.96, 0, 0, 2670, 10251, 22998, 37
|
||||
2026/10/09 09:35:30.664, 68.93, 62, 2, 2670, 10251, 22998, 37
|
||||
2026/10/09 09:35:31.664, 64.30, 0, 0, 2670, 10251, 22998, 37
|
||||
2026/10/09 09:35:32.664, 62.09, 0, 0, 2670, 10251, 22998, 37
|
||||
2026/10/09 09:35:33.665, 60.82, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:34.665, 59.76, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:35.665, 59.80, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:36.666, 59.80, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:37.666, 59.81, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:38.666, 59.85, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:39.666, 59.84, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:40.667, 59.79, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:41.667, 59.71, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:42.667, 59.73, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:43.667, 59.77, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:44.668, 59.76, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:45.668, 59.73, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:46.668, 59.69, 0, 0, 2520, 10251, 22998, 36
|
||||
2026/10/09 09:35:47.669, 59.69, 0, 0, 2520, 10251, 22998, 35
|
||||
2026/10/09 09:35:48.669, 50.97, 0, 0, 405, 810, 22998, 34
|
||||
2026/10/09 09:35:49.669, 30.95, 0, 0, 255, 405, 22998, 34
|
||||
2026/10/09 09:35:50.670, 15.72, 100, 93, 2685, 10251, 22990, 35
|
||||
2026/10/09 09:35:51.807, 68.38, 100, 1, 2685, 10251, 23042, 37
|
||||
2026/10/09 09:35:52.807, 86.11, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:35:53.807, 85.17, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:35:54.808, 85.08, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:35:55.808, 85.80, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:35:56.808, 85.60, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:35:57.808, 86.32, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:35:58.809, 86.20, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:35:59.809, 85.78, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:36:00.809, 85.34, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:36:01.809, 85.44, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:36:02.810, 85.39, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:36:03.810, 85.52, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:36:04.810, 85.78, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:36:05.811, 86.13, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:36:06.811, 85.59, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:36:07.811, 85.72, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:36:08.811, 85.36, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:36:09.812, 86.00, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:36:10.812, 86.49, 100, 1, 2685, 10251, 23042, 38
|
||||
2026/10/09 09:36:11.812, 102.11, 0, 0, 2670, 10251, 23042, 38
|
||||
2026/10/09 09:36:12.812, 63.59, 0, 0, 2670, 10251, 11694, 38
|
||||
2026/10/09 09:36:13.862, 78.72, 100, 1, 2670, 10251, 23042, 38
|
||||
2026/10/09 09:36:14.862, 84.04, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:15.862, 83.85, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:16.863, 84.33, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:17.863, 84.18, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:18.863, 84.46, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:19.863, 84.51, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:20.864, 84.39, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:21.864, 84.30, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:22.864, 83.77, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:23.865, 83.79, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:24.865, 83.90, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:25.865, 83.96, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:26.865, 84.01, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:27.866, 83.60, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:28.866, 83.96, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:29.866, 83.98, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:30.867, 84.18, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:31.867, 83.92, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:32.867, 83.70, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:33.867, 84.18, 100, 1, 2670, 10251, 23042, 39
|
||||
2026/10/09 09:36:34.868, 90.31, 0, 0, 2670, 10251, 23042, 38
|
||||
2026/10/09 09:36:35.868, 80.69, 0, 0, 2670, 10251, 23042, 37
|
||||
2026/10/09 09:36:36.868, 61.64, 0, 0, 2520, 10251, 23042, 37
|
||||
2026/10/09 09:36:37.869, 60.53, 0, 0, 2520, 10251, 23042, 37
|
||||
2026/10/09 09:36:38.869, 59.39, 0, 0, 2520, 10251, 23042, 36
|
||||
2026/10/09 09:36:39.869, 59.29, 0, 0, 2520, 10251, 23042, 36
|
||||
2026/10/09 09:36:40.869, 59.28, 0, 0, 2520, 10251, 23042, 36
|
||||
2026/10/09 09:36:41.870, 59.16, 0, 0, 2520, 10251, 23042, 36
|
||||
2026/10/09 09:36:42.870, 59.10, 0, 0, 2520, 10251, 23042, 36
|
||||
2026/10/09 09:36:43.870, 59.07, 0, 0, 2520, 10251, 23042, 36
|
||||
2026/10/09 09:36:44.870, 58.99, 0, 0, 2520, 10251, 23042, 36
|
||||
2026/10/09 09:36:45.871, 62.34, 62, 2, 2670, 10251, 23042, 37
|
||||
2026/10/09 09:36:46.871, 68.22, 0, 0, 2670, 10251, 23042, 37
|
||||
2026/10/09 09:36:47.871, 63.63, 0, 0, 2670, 10251, 23042, 37
|
||||
2026/10/09 09:36:48.872, 61.97, 0, 0, 2520, 10251, 23042, 36
|
||||
2026/10/09 09:36:49.872, 61.51, 100, 7, 2670, 10251, 470, 37
|
||||
2026/10/09 09:36:50.872, 77.79, 100, 0, 2670, 10251, 470, 38
|
||||
2026/10/09 09:36:51.872, 77.81, 100, 0, 2670, 10251, 470, 38
|
||||
2026/10/09 09:36:52.873, 78.14, 100, 0, 2670, 10251, 470, 38
|
||||
2026/10/09 09:36:53.873, 78.41, 100, 0, 2670, 10251, 470, 38
|
||||
2026/10/09 09:36:54.873, 78.34, 100, 0, 2670, 10251, 470, 38
|
||||
2026/10/09 09:36:55.874, 78.04, 100, 0, 2670, 10251, 470, 38
|
||||
2026/10/09 09:36:56.874, 78.09, 100, 0, 2670, 10251, 470, 38
|
||||
2026/10/09 09:36:57.874, 78.23, 100, 0, 2670, 10251, 470, 38
|
||||
2026/10/09 09:36:58.874, 78.21, 100, 0, 2670, 10251, 470, 38
|
||||
2026/10/09 09:36:59.875, 78.22, 100, 0, 2670, 10251, 470, 38
|
||||
2026/10/09 09:37:00.875, 66.56, 0, 0, 2670, 10501, 2458, 37
|
||||
2026/10/09 09:37:01.875, 77.75, 100, 0, 2670, 10251, 2458, 38
|
||||
2026/10/09 09:37:02.876, 78.77, 100, 0, 2670, 10251, 2458, 38
|
||||
2026/10/09 09:37:03.876, 78.61, 100, 0, 2670, 10251, 2458, 38
|
||||
2026/10/09 09:37:04.876, 78.39, 100, 0, 2670, 10251, 2458, 38
|
||||
2026/10/09 09:37:05.876, 78.49, 100, 0, 2670, 10251, 2458, 38
|
||||
2026/10/09 09:37:06.877, 78.56, 100, 0, 2670, 10251, 2458, 38
|
||||
2026/10/09 09:37:07.877, 78.58, 100, 0, 2670, 10251, 2458, 38
|
||||
2026/10/09 09:37:08.877, 78.61, 100, 0, 2670, 10251, 2458, 38
|
||||
2026/10/09 09:37:09.878, 78.75, 100, 0, 2670, 10251, 2458, 38
|
||||
2026/10/09 09:37:10.878, 78.58, 100, 0, 2670, 10251, 2458, 38
|
||||
2026/10/09 09:37:11.878, 70.90, 0, 0, 2670, 10251, 2458, 37
|
||||
2026/10/09 09:37:12.878, 63.85, 2, 0, 2670, 10251, 2458, 37
|
||||
2026/10/09 09:37:13.879, 67.10, 3, 0, 2670, 10251, 8614, 37
|
||||
2026/10/09 09:37:14.879, 79.87, 100, 1, 2670, 10251, 8614, 38
|
||||
2026/10/09 09:37:15.879, 79.90, 100, 1, 2670, 10251, 8614, 38
|
||||
2026/10/09 09:37:16.880, 79.87, 100, 1, 2670, 10251, 8614, 38
|
||||
2026/10/09 09:37:17.880, 79.88, 100, 1, 2670, 10251, 8614, 38
|
||||
2026/10/09 09:37:18.880, 79.94, 100, 1, 2670, 10251, 8614, 38
|
||||
2026/10/09 09:37:19.880, 79.87, 100, 1, 2670, 10251, 8614, 38
|
||||
2026/10/09 09:37:20.881, 79.89, 100, 1, 2670, 10251, 8614, 38
|
||||
2026/10/09 09:37:21.881, 79.82, 100, 1, 2670, 10251, 8614, 38
|
||||
2026/10/09 09:37:22.881, 79.80, 100, 1, 2670, 10251, 8614, 38
|
||||
2026/10/09 09:37:23.881, 79.72, 100, 1, 2670, 10251, 8614, 38
|
||||
2026/10/09 09:37:24.882, 72.69, 0, 0, 2670, 10251, 8614, 37
|
||||
2026/10/09 09:37:25.882, 71.18, 0, 0, 2670, 10251, 8614, 37
|
||||
2026/10/09 09:37:26.882, 62.23, 0, 0, 2520, 10251, 8614, 37
|
||||
2026/10/09 09:37:27.883, 59.61, 0, 0, 2520, 10251, 8614, 36
|
||||
2026/10/09 09:37:28.883, 62.49, 53, 2, 2670, 10251, 8614, 37
|
||||
2026/10/09 09:37:29.883, 62.67, 0, 0, 2670, 10251, 23076, 37
|
||||
2026/10/09 09:37:30.883, 317.79, 100, 53, 2580, 10251, 23076, 57
|
||||
2026/10/09 09:37:31.884, 429.04, 100, 53, 2580, 10251, 23076, 62
|
||||
2026/10/09 09:37:32.884, 428.51, 100, 53, 2550, 10251, 23076, 63
|
||||
2026/10/09 09:37:33.884, 428.88, 100, 54, 2535, 10251, 23076, 63
|
||||
2026/10/09 09:37:34.885, 429.42, 100, 54, 2520, 10251, 23076, 63
|
||||
2026/10/09 09:37:35.885, 429.34, 100, 55, 2520, 10251, 23076, 63
|
||||
2026/10/09 09:37:36.885, 429.24, 100, 56, 2505, 10251, 23076, 64
|
||||
2026/10/09 09:37:37.885, 429.59, 100, 56, 2595, 10251, 23076, 62
|
||||
2026/10/09 09:37:38.886, 428.81, 100, 56, 2595, 10251, 23076, 64
|
||||
2026/10/09 09:37:39.886, 428.92, 100, 56, 2595, 10251, 23076, 67
|
||||
2026/10/09 09:37:40.886, 429.18, 100, 56, 2640, 10251, 23076, 67
|
||||
2026/10/09 09:37:41.886, 428.50, 100, 56, 2640, 10251, 23076, 66
|
||||
2026/10/09 09:37:42.887, 429.47, 100, 54, 2595, 10251, 23076, 66
|
||||
2026/10/09 09:37:43.887, 429.65, 100, 53, 2520, 10251, 23076, 66
|
||||
2026/10/09 09:37:44.887, 430.74, 100, 56, 2505, 10251, 23076, 64
|
||||
2026/10/09 09:37:45.887, 428.90, 100, 56, 2595, 10251, 23076, 66
|
||||
2026/10/09 09:37:46.888, 430.20, 100, 55, 2595, 10251, 23076, 69
|
||||
2026/10/09 09:37:47.888, 428.86, 100, 55, 2640, 10251, 23076, 68
|
||||
2026/10/09 09:37:48.888, 430.01, 100, 56, 2640, 10251, 23076, 68
|
||||
2026/10/09 09:37:49.889, 429.54, 100, 55, 2520, 10251, 23076, 68
|
||||
2026/10/09 09:37:50.889, 191.16, 0, 0, 2655, 10251, 23076, 48
|
||||
2026/10/09 09:37:51.889, 126.04, 0, 0, 2655, 10251, 23076, 46
|
||||
2026/10/09 09:37:52.889, 64.80, 0, 0, 2520, 10251, 23076, 44
|
||||
2026/10/09 09:37:53.890, 67.86, 0, 0, 2670, 10251, 23076, 44
|
||||
2026/10/09 09:37:54.890, 67.35, 0, 0, 2670, 10251, 23076, 44
|
||||
2026/10/09 09:37:55.890, 64.56, 0, 0, 2520, 10251, 23076, 43
|
||||
2026/10/09 09:37:56.891, 62.27, 0, 0, 2520, 10251, 23076, 42
|
||||
2026/10/09 09:37:57.891, 60.08, 0, 0, 2520, 10251, 23076, 42
|
||||
2026/10/09 09:37:58.891, 60.03, 0, 0, 2520, 10251, 23076, 42
|
||||
2026/10/09 09:37:59.891, 59.97, 0, 0, 2520, 10251, 23076, 42
|
||||
2026/10/09 09:38:00.892, 59.90, 0, 0, 2520, 10251, 23076, 42
|
||||
2026/10/09 09:38:01.892, 59.85, 0, 0, 2520, 10251, 23076, 41
|
||||
2026/10/09 09:38:02.892, 59.83, 0, 0, 2520, 10251, 23076, 41
|
||||
2026/10/09 09:38:03.893, 59.88, 0, 0, 2520, 10251, 23076, 41
|
||||
2026/10/09 09:38:04.893, 63.89, 61, 2, 2670, 10251, 23076, 41
|
||||
2026/10/09 09:38:05.893, 67.56, 0, 0, 2670, 10251, 23076, 41
|
||||
2026/10/09 09:38:06.894, 65.65, 0, 0, 2670, 10251, 23076, 41
|
||||
2026/10/09 09:38:07.894, 73.98, 59, 4, 2670, 10251, 23070, 41
|
||||
2026/10/09 09:38:08.894, 335.76, 100, 41, 2640, 10251, 23070, 57
|
||||
2026/10/09 09:38:09.894, 357.17, 100, 42, 2640, 10251, 23070, 64
|
||||
2026/10/09 09:38:10.895, 355.14, 100, 40, 2640, 10251, 23070, 61
|
||||
2026/10/09 09:38:11.895, 355.15, 100, 41, 2640, 10251, 23070, 66
|
||||
2026/10/09 09:38:12.895, 358.79, 100, 42, 2640, 10251, 23070, 60
|
||||
2026/10/09 09:38:13.895, 355.33, 100, 41, 2640, 10251, 23070, 66
|
||||
2026/10/09 09:38:14.896, 360.33, 100, 42, 2640, 10251, 23070, 64
|
||||
2026/10/09 09:38:15.896, 355.92, 100, 41, 2640, 10251, 23070, 64
|
||||
2026/10/09 09:38:16.896, 360.98, 100, 42, 2595, 10251, 23070, 65
|
||||
2026/10/09 09:38:17.897, 356.60, 100, 40, 2640, 10251, 23070, 62
|
||||
2026/10/09 09:38:18.897, 358.17, 100, 42, 2640, 10251, 23070, 66
|
||||
2026/10/09 09:38:19.897, 355.51, 100, 40, 2655, 10251, 23070, 63
|
||||
2026/10/09 09:38:20.897, 359.92, 100, 42, 2595, 10251, 23070, 66
|
||||
2026/10/09 09:38:21.898, 356.18, 100, 41, 2640, 10251, 23070, 63
|
||||
2026/10/09 09:38:22.898, 358.86, 100, 42, 2610, 10251, 23070, 67
|
||||
2026/10/09 09:38:23.898, 358.18, 100, 41, 2640, 10251, 23070, 63
|
||||
2026/10/09 09:38:24.899, 359.50, 100, 42, 2640, 10251, 23070, 67
|
||||
2026/10/09 09:38:25.899, 360.27, 100, 41, 2640, 10251, 23070, 63
|
||||
2026/10/09 09:38:26.899, 357.67, 100, 42, 2640, 10251, 23070, 68
|
||||
2026/10/09 09:38:27.899, 359.83, 100, 41, 2640, 10251, 23070, 63
|
||||
2026/10/09 09:38:28.900, 159.80, 0, 0, 2655, 10251, 23070, 48
|
||||
2026/10/09 09:38:29.900, 68.79, 0, 0, 2655, 10251, 23070, 46
|
||||
2026/10/09 09:38:30.900, 68.02, 0, 0, 2520, 10251, 23070, 46
|
||||
2026/10/09 09:38:31.900, 60.80, 0, 0, 2520, 10251, 23070, 45
|
||||
2026/10/09 09:38:32.901, 60.70, 0, 0, 2520, 10251, 23070, 45
|
||||
2026/10/09 09:38:33.901, 60.59, 0, 0, 2520, 10251, 23070, 45
|
||||
2026/10/09 09:38:34.901, 60.47, 0, 0, 2520, 10251, 23070, 44
|
||||
2026/10/09 09:38:35.902, 60.35, 0, 0, 2520, 10251, 23070, 44
|
||||
2026/10/09 09:38:36.902, 60.24, 0, 0, 2520, 10251, 23070, 44
|
||||
2026/10/09 09:38:37.902, 60.04, 0, 0, 2520, 10251, 23070, 44
|
||||
2026/10/09 09:38:38.902, 59.89, 0, 0, 2520, 10251, 23070, 43
|
||||
2026/10/09 09:38:39.903, 59.87, 0, 0, 2520, 10251, 23070, 43
|
||||
2026/10/09 09:38:40.903, 63.86, 42, 1, 2670, 10251, 23070, 44
|
||||
2026/10/09 09:38:41.903, 69.32, 53, 2, 2670, 10251, 23070, 43
|
||||
2026/10/09 09:38:42.903, 65.95, 0, 0, 2670, 10251, 23070, 43
|
||||
2026/10/09 09:38:43.904, 68.73, 0, 0, 2670, 10251, 23072, 47
|
||||
2026/10/09 09:38:44.904, 191.23, 100, 20, 2655, 10251, 23072, 52
|
||||
2026/10/09 09:38:45.904, 216.68, 100, 20, 2655, 10251, 23072, 53
|
||||
2026/10/09 09:38:46.905, 216.62, 100, 20, 2655, 10251, 23072, 53
|
||||
2026/10/09 09:38:47.905, 216.74, 100, 20, 2655, 10251, 23072, 53
|
||||
2026/10/09 09:38:48.905, 216.67, 100, 20, 2655, 10251, 23072, 54
|
||||
2026/10/09 09:38:49.905, 216.90, 100, 20, 2655, 10251, 23072, 54
|
||||
2026/10/09 09:38:50.906, 216.88, 100, 20, 2655, 10251, 23072, 54
|
||||
2026/10/09 09:38:51.906, 217.08, 100, 20, 2655, 10251, 23072, 54
|
||||
2026/10/09 09:38:52.906, 216.88, 100, 20, 2655, 10251, 23072, 54
|
||||
2026/10/09 09:38:53.906, 216.93, 100, 20, 2655, 10251, 23072, 54
|
||||
2026/10/09 09:38:54.907, 216.97, 100, 20, 2655, 10251, 23072, 54
|
||||
2026/10/09 09:38:55.907, 216.85, 100, 20, 2655, 10251, 23072, 54
|
||||
2026/10/09 09:38:56.907, 216.95, 100, 20, 2655, 10251, 23072, 54
|
||||
2026/10/09 09:38:57.908, 217.20, 100, 20, 2655, 10251, 23072, 54
|
||||
2026/10/09 09:38:58.908, 217.17, 100, 20, 2655, 10251, 23072, 54
|
||||
2026/10/09 09:38:59.908, 217.41, 100, 20, 2655, 10251, 23072, 54
|
||||
2026/10/09 09:39:00.908, 217.46, 100, 20, 2655, 10251, 23072, 55
|
||||
2026/10/09 09:39:01.909, 217.33, 100, 20, 2655, 10251, 23072, 55
|
||||
2026/10/09 09:39:02.909, 217.41, 100, 20, 2655, 10251, 23072, 55
|
||||
2026/10/09 09:39:03.909, 217.36, 100, 20, 2655, 10251, 23072, 51
|
||||
2026/10/09 09:39:04.910, 111.20, 0, 0, 2655, 10251, 23072, 46
|
||||
2026/10/09 09:39:05.910, 66.92, 0, 0, 2670, 10251, 23072, 45
|
||||
2026/10/09 09:39:06.910, 63.31, 0, 0, 2520, 10251, 23072, 44
|
||||
2026/10/09 09:39:07.910, 61.49, 0, 0, 2520, 10251, 23072, 44
|
||||
2026/10/09 09:39:08.911, 59.99, 0, 0, 2520, 10251, 23072, 44
|
||||
2026/10/09 09:39:09.911, 59.96, 0, 0, 2520, 10251, 23072, 44
|
||||
2026/10/09 09:39:10.911, 59.94, 0, 0, 2520, 10251, 23072, 43
|
||||
2026/10/09 09:39:11.912, 59.98, 0, 0, 2520, 10251, 23072, 43
|
||||
2026/10/09 09:39:12.912, 60.03, 0, 0, 2520, 10251, 23072, 43
|
||||
2026/10/09 09:39:13.912, 60.06, 0, 0, 2520, 10251, 23072, 43
|
||||
2026/10/09 09:39:14.912, 60.01, 0, 0, 2520, 10251, 23072, 43
|
||||
2026/10/09 09:39:15.913, 64.53, 62, 2, 2670, 10251, 23072, 43
|
||||
2026/10/09 09:39:16.913, 69.60, 62, 2, 2670, 10251, 23072, 43
|
||||
2026/10/09 09:39:17.913, 66.39, 0, 0, 2670, 10251, 23072, 43
|
||||
2026/10/09 09:39:18.914, 68.84, 0, 0, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:39:19.914, 110.65, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:20.914, 117.71, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:21.914, 117.72, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:22.915, 118.11, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:23.915, 117.73, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:24.915, 117.53, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:25.915, 117.31, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:26.916, 117.38, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:27.916, 117.41, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:28.916, 117.23, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:29.917, 117.48, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:30.917, 117.53, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:31.917, 117.24, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:32.917, 117.21, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:33.918, 117.30, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:34.918, 116.64, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:35.918, 117.09, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:36.919, 116.96, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:37.919, 116.68, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:38.919, 117.21, 100, 5, 2670, 10251, 23070, 46
|
||||
2026/10/09 09:39:39.919, 88.35, 80, 48, 2670, 10251, 23070, 43
|
||||
2026/10/09 09:39:40.920, 83.63, 0, 0, 2670, 10251, 23070, 43
|
||||
2026/10/09 09:39:41.920, 64.47, 0, 0, 2520, 10251, 23070, 42
|
||||
2026/10/09 09:39:42.920, 62.11, 0, 0, 2520, 10251, 23070, 42
|
||||
2026/10/09 09:39:43.920, 59.90, 0, 0, 2520, 10251, 23070, 42
|
||||
2026/10/09 09:39:44.921, 59.92, 0, 0, 2520, 10251, 23070, 42
|
||||
2026/10/09 09:39:45.921, 59.90, 0, 0, 2520, 10251, 23070, 41
|
||||
2026/10/09 09:39:46.921, 59.89, 0, 0, 2520, 10251, 23070, 41
|
||||
2026/10/09 09:39:47.922, 59.88, 0, 0, 2520, 10251, 23070, 41
|
||||
2026/10/09 09:39:48.922, 59.89, 0, 0, 2520, 10251, 23070, 41
|
||||
2026/10/09 09:39:49.922, 59.90, 0, 0, 2520, 10251, 23070, 41
|
||||
2026/10/09 09:39:50.922, 67.59, 61, 2, 2670, 10251, 23070, 42
|
||||
2026/10/09 09:39:51.923, 68.33, 0, 0, 2670, 10251, 23070, 42
|
||||
2026/10/09 09:39:52.923, 65.26, 0, 0, 2670, 10251, 23070, 41
|
||||
2026/10/09 09:39:53.923, 66.17, 32, 2, 2670, 10501, 1, 41
|
||||
2026/10/09 09:39:54.924, 66.28, 0, 0, 2670, 10501, 1, 41
|
||||
2026/10/09 09:39:55.924, 58.40, 0, 0, 2670, 10501, 1, 41
|
||||
2026/10/09 09:39:56.924, 42.85, 0, 0, 585, 5001, 1, 40
|
||||
2026/10/09 09:39:57.924, 25.26, 0, 0, 360, 810, 1, 39
|
||||
2026/10/09 09:39:58.925, 20.43, 0, 0, 240, 810, 1, 39
|
||||
2026/10/09 09:39:59.925, 17.04, 0, 0, 210, 405, 1, 39
|
||||
2026/10/09 09:40:00.925, 15.77, 0, 0, 210, 405, 1, 39
|
||||
2026/10/09 09:40:01.925, 15.63, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:40:02.926, 15.58, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:40:03.926, 15.58, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:40:04.926, 15.50, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:40:05.927, 15.49, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:40:06.927, 15.58, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:40:07.927, 15.61, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:40:08.927, 15.59, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:40:09.928, 15.47, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:40:10.928, 15.43, 0, 0, 210, 405, 1, 37
|
||||
2026/10/09 09:40:11.928, 15.53, 0, 0, 210, 405, 1, 37
|
||||
2026/10/09 09:40:12.928, 15.46, 0, 0, 210, 405, 1, 37
|
||||
2026/10/09 09:40:13.929, 15.35, 0, 0, 210, 405, 1, 37
|
||||
2026/10/09 09:40:14.929, 15.42, 0, 0, 210, 405, 1, 37
|
||||
2026/10/09 09:40:15.929, 15.48, 0, 0, 210, 405, 1, 37
|
||||
2026/10/09 09:40:16.930, 15.55, 0, 0, 210, 405, 1, 37
|
||||
2026/10/09 09:40:17.930, 15.56, 0, 0, 210, 405, 1, 37
|
||||
|
13
docs/analysis/mhpow/b3/rows/rtx4090-b1/progress.log
Normal file
13
docs/analysis/mhpow/b3/rows/rtx4090-b1/progress.log
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
row rc=0 --n 20 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n20
|
||||
row rc=0 --n 22 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n22
|
||||
row rc=0 --n 24 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n24
|
||||
row rc=0 --n 20 --layout aos --min-label-s 20 --check 2 --k 64 --tag abl-n20-aos
|
||||
row rc=0 --n 20 --layout soa --min-label-s 20 --check 2 --k 64 --tpb 32 --tag abl-n20-tpb32
|
||||
row rc=0 --n 20 --B 1 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B1
|
||||
row rc=0 --n 20 --B 32 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B32
|
||||
row rc=0 --n 20 --B 128 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B128
|
||||
row rc=0 --n 12 --layout soa --min-label-s 20 --check 2 --k 64 --tag diag-n12
|
||||
row rc=0 --n 14 --layout soa --min-label-s 20 --check 2 --k 64 --tag diag-n14
|
||||
row rc=0 --n 16 --layout soa --min-label-s 20 --check 2 --k 64 --tag diag-n16
|
||||
row rc=0 --n 18 --layout soa --min-label-s 20 --check 2 --k 64 --tag diag-n18
|
||||
DONE 2026-10-09T09:40:18Z
|
||||
12
docs/analysis/mhpow/b3/rows/rtx4090-b1/rows.jsonl
Normal file
12
docs/analysis/mhpow/b3/rows/rtx4090-b1/rows.jsonl
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{"tag":"main-n20","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B1","n":20,"N":1048576,"inst_MiB":32.0,"B":353,"Bmax":353,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":12,"graph_s":0.0359,"state_alloc_s":0.0021,"label_s_per_pass":1.743434,"labels_per_s":212309322.7,"labels_per_s_per_inst":601442.8,"ns_per_label_per_inst":1662.67,"merkle_s":0.038270,"prove_s":0.030658,"verify_all_s":0.0208,"accepted":353,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":15.18,"oracle":"IDENTICAL","label_window_unix_ms":[1791538412826,1791538433763],"free_gib":23.14,"per_inst_MiB":64.1,"proof_bytes_inst0":129133}
|
||||
{"tag":"main-n22","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B1","n":22,"N":4194304,"inst_MiB":128.0,"B":88,"Bmax":88,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":3,"graph_s":0.1390,"state_alloc_s":0.0462,"label_s_per_pass":7.029880,"labels_per_s":52504273.9,"labels_per_s_per_inst":596639.5,"ns_per_label_per_inst":1676.05,"merkle_s":0.038311,"prove_s":0.008842,"verify_all_s":0.0055,"accepted":88,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":-1,"check_s":18.51,"oracle":"IDENTICAL","label_window_unix_ms":[1791538449577,1791538470669],"free_gib":23.14,"per_inst_MiB":256.1,"proof_bytes_inst0":141421}
|
||||
{"tag":"main-n24","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B1","n":24,"N":16777216,"inst_MiB":512.0,"B":22,"Bmax":22,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":1,"graph_s":0.5543,"state_alloc_s":0.0107,"label_s_per_pass":27.902730,"labels_per_s":13228051.4,"labels_per_s_per_inst":601275.1,"ns_per_label_per_inst":1663.13,"merkle_s":0.038241,"prove_s":0.003278,"verify_all_s":0.0020,"accepted":22,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":-1,"check_s":32.05,"oracle":"IDENTICAL","label_window_unix_ms":[1791538490148,1791538518051],"free_gib":23.14,"per_inst_MiB":1024.1,"proof_bytes_inst0":153709}
|
||||
{"tag":"abl-n20-aos","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B1","n":20,"N":1048576,"inst_MiB":32.0,"B":353,"Bmax":353,"layout":"aos","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":11,"graph_s":0.0364,"state_alloc_s":0.1428,"label_s_per_pass":1.837660,"labels_per_s":201423169.4,"labels_per_s_per_inst":570603.9,"ns_per_label_per_inst":1752.53,"merkle_s":0.075806,"prove_s":0.032064,"verify_all_s":0.0220,"accepted":353,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":1.18,"oracle":"IDENTICAL","label_window_unix_ms":[1791538550809,1791538571026],"free_gib":23.14,"per_inst_MiB":64.1,"proof_bytes_inst0":129133}
|
||||
{"tag":"abl-n20-tpb32","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B1","n":20,"N":1048576,"inst_MiB":32.0,"B":353,"Bmax":353,"layout":"soa","kernel":"k1","tpb":32,"k":64,"wrong_edge":0,"passes":12,"graph_s":0.0392,"state_alloc_s":0.1327,"label_s_per_pass":1.746520,"labels_per_s":211934179.9,"labels_per_s_per_inst":600380.1,"ns_per_label_per_inst":1665.61,"merkle_s":0.038295,"prove_s":0.029375,"verify_all_s":0.0200,"accepted":353,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":15.13,"oracle":"IDENTICAL","label_window_unix_ms":[1791538572870,1791538593829],"free_gib":23.14,"per_inst_MiB":64.1,"proof_bytes_inst0":129133}
|
||||
{"tag":"ladder-n20-B1","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B1","n":20,"N":1048576,"inst_MiB":32.0,"B":1,"Bmax":353,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":6,"graph_s":0.0364,"state_alloc_s":0.0077,"label_s_per_pass":1.691684,"labels_per_s":619841.5,"labels_per_s_per_inst":619841.5,"ns_per_label_per_inst":1613.32,"merkle_s":0.000278,"prove_s":0.000323,"verify_all_s":0.0010,"accepted":1,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":0.69,"oracle":"IDENTICAL","label_window_unix_ms":[1791538609451,1791538619618],"free_gib":23.14,"per_inst_MiB":64.1,"proof_bytes_inst0":129133}
|
||||
{"tag":"ladder-n20-B32","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B1","n":20,"N":1048576,"inst_MiB":32.0,"B":32,"Bmax":353,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":6,"graph_s":0.0365,"state_alloc_s":0.0011,"label_s_per_pass":1.722175,"labels_per_s":19483749.8,"labels_per_s_per_inst":608867.2,"ns_per_label_per_inst":1642.39,"merkle_s":0.003623,"prove_s":0.003784,"verify_all_s":0.0025,"accepted":32,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":1.94,"oracle":"IDENTICAL","label_window_unix_ms":[1791538620633,1791538630965],"free_gib":23.14,"per_inst_MiB":64.1,"proof_bytes_inst0":129133}
|
||||
{"tag":"ladder-n20-B128","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B1","n":20,"N":1048576,"inst_MiB":32.0,"B":128,"Bmax":353,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":6,"graph_s":0.0365,"state_alloc_s":0.0014,"label_s_per_pass":1.752064,"labels_per_s":76605486.9,"labels_per_s_per_inst":598480.4,"ns_per_label_per_inst":1670.90,"merkle_s":0.013956,"prove_s":0.011287,"verify_all_s":0.0075,"accepted":128,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":5.78,"oracle":"IDENTICAL","label_window_unix_ms":[1791538633235,1791538643758],"free_gib":23.14,"per_inst_MiB":64.1,"proof_bytes_inst0":129133}
|
||||
{"tag":"diag-n12","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B1","n":12,"N":4096,"inst_MiB":0.1,"B":69485,"Bmax":69485,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":639,"graph_s":0.0024,"state_alloc_s":0.0191,"label_s_per_pass":0.031335,"labels_per_s":9082894292.8,"labels_per_s_per_inst":130717.3,"ns_per_label_per_inst":7650.09,"merkle_s":0.029395,"prove_s":3.232706,"verify_all_s":2.3899,"accepted":69485,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":10.77,"oracle":"IDENTICAL","label_window_unix_ms":[1791538649895,1791538669923],"free_gib":23.14,"per_inst_MiB":0.3,"proof_bytes_inst0":79981}
|
||||
{"tag":"diag-n14","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B1","n":14,"N":16384,"inst_MiB":0.5,"B":20838,"Bmax":20838,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":391,"graph_s":0.0028,"state_alloc_s":0.1831,"label_s_per_pass":0.051174,"labels_per_s":6671484617.4,"labels_per_s_per_inst":320159.5,"ns_per_label_per_inst":3123.44,"merkle_s":0.035525,"prove_s":1.140544,"verify_all_s":0.8231,"accepted":20838,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":-1,"check_s":13.09,"oracle":"IDENTICAL","label_window_unix_ms":[1791538687665,1791538707679],"free_gib":23.14,"per_inst_MiB":1.1,"proof_bytes_inst0":92269}
|
||||
{"tag":"diag-n16","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B1","n":16,"N":65536,"inst_MiB":2.0,"B":5530,"Bmax":5530,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":179,"graph_s":0.0043,"state_alloc_s":0.1744,"label_s_per_pass":0.111756,"labels_per_s":3242908841.3,"labels_per_s_per_inst":586421.1,"ns_per_label_per_inst":1705.26,"merkle_s":0.037597,"prove_s":0.353603,"verify_all_s":0.2521,"accepted":5530,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":13.69,"oracle":"IDENTICAL","label_window_unix_ms":[1791538723581,1791538743587],"free_gib":23.14,"per_inst_MiB":4.1,"proof_bytes_inst0":104557}
|
||||
{"tag":"diag-n18","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B1","n":18,"N":262144,"inst_MiB":8.0,"B":1407,"Bmax":1407,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":46,"graph_s":0.0106,"state_alloc_s":0.1784,"label_s_per_pass":0.440274,"labels_per_s":837743769.3,"labels_per_s_per_inst":595411.3,"ns_per_label_per_inst":1679.51,"merkle_s":0.038097,"prove_s":0.103623,"verify_all_s":0.0729,"accepted":1407,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":-1,"check_s":14.22,"oracle":"IDENTICAL","label_window_unix_ms":[1791538758553,1791538778807],"free_gib":23.14,"per_inst_MiB":16.1,"proof_bytes_inst0":116845}
|
||||
0
docs/analysis/mhpow/b3/rows/rtx4090-b1/stderr.log
Normal file
0
docs/analysis/mhpow/b3/rows/rtx4090-b1/stderr.log
Normal file
5
docs/analysis/mhpow/b3/rows/rtx4090-r1/cpu.jsonl
Normal file
5
docs/analysis/mhpow/b3/rows/rtx4090-r1/cpu.jsonl
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{"mode":"cpu_time","sha":"sha_ni","n":20,"N":1048576,"k":64,"threads":1,"graph_s_single_thread":0.2933,"label_s_mean":0.1085,"merkle_s_mean":0.0835,"prove_s_mean":0.000218,"verify_s_mean":0.001932,"wall_s":0.1996,"labels_per_s_per_instance":9661847.4,"labels_per_s_all":5253938.8,"accepted":1}
|
||||
{"mode":"cpu_time","sha":"sha_ni","n":22,"N":4194304,"k":64,"threads":1,"graph_s_single_thread":1.1713,"label_s_mean":0.4839,"merkle_s_mean":0.3312,"prove_s_mean":0.000283,"verify_s_mean":0.002132,"wall_s":0.8358,"labels_per_s_per_instance":8668221.4,"labels_per_s_all":5018378.8,"accepted":1}
|
||||
{"mode":"cpu_time","sha":"sha_ni","n":24,"N":16777216,"k":64,"threads":1,"graph_s_single_thread":4.6982,"label_s_mean":2.1011,"merkle_s_mean":1.3347,"prove_s_mean":0.000337,"verify_s_mean":0.002312,"wall_s":3.5133,"labels_per_s_per_instance":7984944.5,"labels_per_s_all":4775373.5,"accepted":1}
|
||||
{"mode":"cpu_time","sha":"sha_ni","n":20,"N":1048576,"k":64,"threads":15,"graph_s_single_thread":0.2924,"label_s_mean":0.1153,"merkle_s_mean":0.0844,"prove_s_mean":0.000242,"verify_s_mean":0.001960,"wall_s":0.2713,"labels_per_s_per_instance":9091404.1,"labels_per_s_all":57971435.4,"accepted":15}
|
||||
{"mode":"cpu_time","sha":"sha_ni","n":22,"N":4194304,"k":64,"threads":15,"graph_s_single_thread":1.1749,"label_s_mean":0.5159,"merkle_s_mean":0.3421,"prove_s_mean":0.024082,"verify_s_mean":0.002260,"wall_s":1.1179,"labels_per_s_per_instance":8129893.6,"labels_per_s_all":56279151.1,"accepted":15}
|
||||
1
docs/analysis/mhpow/b3/rows/rtx4090-r1/idle.json
Normal file
1
docs/analysis/mhpow/b3/rows/rtx4090-r1/idle.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"idle_window_unix_ms":[1791537739000,1791537769000]}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
{"mode":"selftest","sha":"sha_ni","sha256_abc_kat_fail":0,"portable_words_mismatch":0,"fast_mismatch":0}
|
||||
CASE cpu_selftest PASS
|
||||
{"tag":"known-failed","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":12,"N":4096,"inst_MiB":0.1,"B":96,"Bmax":78676,"layout":"soa","kernel":"k1","k":32,"wrong_edge":1,"passes":1,"graph_s":0.0008,"state_alloc_s":0.0006,"label_s_per_pass":0.008921,"labels_per_s":44077609.8,"labels_per_s_per_inst":459141.8,"ns_per_label_per_inst":2177.98,"merkle_s":0.000166,"prove_s":0.003143,"verify_all_s":0.0001,"accepted":0,"checked":4,"lab_bad_inst":4,"tree_bad_inst":4,"root_bad":4,"proof_bad":4,"check_s":0.03,"oracle":"MISMATCH","label_window_unix_ms":[1791538840191,1791538840200],"free_gib":23.14,"per_inst_MiB":0.3}
|
||||
CASE known_failed_wrong_edge PASS (oracle fired: MISMATCH, 0 proofs accepted, exit 1)
|
||||
{"tag":"known-finished-k1","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":12,"N":4096,"inst_MiB":0.1,"B":96,"Bmax":78676,"layout":"soa","kernel":"k1","k":32,"wrong_edge":0,"passes":1,"graph_s":0.0008,"state_alloc_s":0.0005,"label_s_per_pass":0.009197,"labels_per_s":42756932.7,"labels_per_s_per_inst":445384.7,"ns_per_label_per_inst":2245.25,"merkle_s":0.000169,"prove_s":0.003388,"verify_all_s":0.0037,"accepted":96,"checked":4,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":0.03,"oracle":"IDENTICAL","label_window_unix_ms":[1791538840515,1791538840525],"free_gib":23.14,"per_inst_MiB":0.3}
|
||||
CASE known_finished_k1 PASS
|
||||
{"tag":"known-finished-k2","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":12,"N":4096,"inst_MiB":0.1,"B":96,"Bmax":78676,"layout":"soa","kernel":"k2","k":32,"wrong_edge":0,"passes":1,"graph_s":0.0008,"state_alloc_s":0.0004,"label_s_per_pass":0.005592,"labels_per_s":70316793.0,"labels_per_s_per_inst":732466.6,"ns_per_label_per_inst":1365.25,"merkle_s":0.000164,"prove_s":0.003324,"verify_all_s":0.0036,"accepted":96,"checked":4,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":0.03,"oracle":"IDENTICAL","label_window_unix_ms":[1791538840850,1791538840856],"free_gib":23.14,"per_inst_MiB":0.3}
|
||||
CASE known_finished_k2 PASS
|
||||
RESULT test_known_failed PASS
|
||||
10
docs/analysis/mhpow/b3/rows/rtx4090-r1/meta.txt
Normal file
10
docs/analysis/mhpow/b3/rows/rtx4090-r1/meta.txt
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
label=rtx4090-r1
|
||||
src_id=2079d0d8ce7eef96
|
||||
2026-10-09T09:22:19Z
|
||||
model name : AMD EPYC 7513 32-Core Processor
|
||||
nproc=15 cgroup_cpus=15
|
||||
15.14 20.21 31.20 16/1136 842
|
||||
name, driver_version, vbios_version, power.limit [W], power.default_limit [W], clocks.max.sm [MHz], clocks.max.memory [MHz], memory.total [MiB], pcie.link.gen.current, pcie.link.width.current
|
||||
NVIDIA GeForce RTX 4090, 570.153.02, 95.02.47.00.01, 450.00 W, 450.00 W, 3105 MHz, 10501 MHz, 24564 MiB, 1, 16
|
||||
Build cuda_12.8.r12.8/compiler.35583870_0
|
||||
17.02 17.06 24.10 16/1138 1433
|
||||
604
docs/analysis/mhpow/b3/rows/rtx4090-r1/power.csv
Normal file
604
docs/analysis/mhpow/b3/rows/rtx4090-r1/power.csv
Normal file
|
|
@ -0,0 +1,604 @@
|
|||
2026/10/09 09:22:19.852, 15.00, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:20.854, 14.93, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:21.854, 15.03, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:22.854, 15.06, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:23.854, 15.02, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:24.855, 15.02, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:25.855, 15.04, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:26.855, 15.03, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:27.856, 15.01, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:28.856, 15.05, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:29.856, 15.08, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:30.856, 15.09, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:31.857, 14.99, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:32.857, 14.89, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:33.857, 14.95, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:34.858, 14.96, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:35.858, 14.90, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:36.858, 14.94, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:37.858, 15.05, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:38.859, 15.10, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:39.859, 15.07, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:40.859, 14.95, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:41.860, 14.92, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:42.860, 15.02, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:43.860, 14.99, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:44.860, 14.94, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:45.861, 14.96, 0, 0, 210, 405, 1, 39
|
||||
2026/10/09 09:22:46.861, 14.98, 0, 0, 210, 405, 1, 39
|
||||
2026/10/09 09:22:47.861, 14.95, 0, 0, 210, 405, 1, 39
|
||||
2026/10/09 09:22:48.862, 14.90, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:49.862, 14.90, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:22:50.867, 33.81, 0, 0, 2670, 10251, 23042, 41
|
||||
2026/10/09 09:22:51.867, 82.88, 100, 1, 2670, 10251, 23042, 42
|
||||
2026/10/09 09:22:52.867, 83.21, 100, 1, 2670, 10251, 23042, 42
|
||||
2026/10/09 09:22:53.867, 83.29, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:22:54.868, 83.69, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:22:55.868, 83.84, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:22:56.868, 84.14, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:22:57.868, 83.86, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:22:58.869, 83.94, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:22:59.869, 83.95, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:23:00.869, 83.63, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:23:01.870, 83.69, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:23:02.870, 84.34, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:23:03.870, 84.49, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:23:04.870, 84.44, 100, 1, 2670, 10251, 23042, 44
|
||||
2026/10/09 09:23:05.871, 84.09, 100, 1, 2670, 10251, 23042, 44
|
||||
2026/10/09 09:23:06.871, 84.06, 100, 1, 2670, 10251, 23042, 44
|
||||
2026/10/09 09:23:07.871, 83.91, 100, 1, 2670, 10251, 23042, 44
|
||||
2026/10/09 09:23:08.871, 83.76, 100, 1, 2670, 10251, 23042, 44
|
||||
2026/10/09 09:23:09.872, 83.99, 100, 1, 2670, 10251, 23042, 44
|
||||
2026/10/09 09:23:10.872, 84.04, 100, 1, 2670, 10251, 23042, 44
|
||||
2026/10/09 09:23:11.872, 84.10, 100, 1, 2655, 10251, 23042, 44
|
||||
2026/10/09 09:23:12.872, 90.46, 0, 0, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:23:13.873, 85.14, 0, 0, 2520, 10251, 23042, 43
|
||||
2026/10/09 09:23:14.873, 62.94, 0, 0, 2520, 10251, 23042, 42
|
||||
2026/10/09 09:23:15.873, 60.88, 0, 0, 2520, 10251, 23042, 42
|
||||
2026/10/09 09:23:16.873, 59.05, 0, 0, 2520, 10251, 23042, 42
|
||||
2026/10/09 09:23:17.874, 59.02, 0, 0, 2520, 10251, 23042, 42
|
||||
2026/10/09 09:23:18.874, 59.05, 0, 0, 2520, 10251, 23042, 42
|
||||
2026/10/09 09:23:19.874, 59.13, 0, 0, 2520, 10251, 23042, 42
|
||||
2026/10/09 09:23:20.875, 59.13, 0, 0, 2520, 10251, 23042, 42
|
||||
2026/10/09 09:23:21.875, 59.11, 0, 0, 2520, 10251, 23042, 42
|
||||
2026/10/09 09:23:22.875, 59.16, 0, 0, 2610, 10251, 23042, 42
|
||||
2026/10/09 09:23:23.876, 62.93, 59, 2, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:23:24.876, 69.61, 62, 2, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:23:25.876, 65.25, 0, 0, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:23:26.876, 63.22, 0, 0, 2520, 10251, 23042, 43
|
||||
2026/10/09 09:23:27.877, 61.24, 0, 0, 2520, 10251, 23042, 43
|
||||
2026/10/09 09:23:28.877, 60.17, 0, 0, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:23:29.877, 86.63, 100, 2, 2670, 10251, 23042, 45
|
||||
2026/10/09 09:23:30.878, 95.49, 100, 2, 2670, 10251, 23042, 45
|
||||
2026/10/09 09:23:31.878, 95.70, 100, 2, 2670, 10251, 23042, 45
|
||||
2026/10/09 09:23:32.878, 95.66, 100, 2, 2670, 10251, 23042, 45
|
||||
2026/10/09 09:23:33.878, 95.69, 100, 2, 2670, 10251, 23042, 45
|
||||
2026/10/09 09:23:34.878, 95.85, 100, 2, 2670, 10251, 23042, 45
|
||||
2026/10/09 09:23:35.879, 95.72, 100, 2, 2670, 10251, 23042, 46
|
||||
2026/10/09 09:23:36.879, 96.13, 100, 2, 2670, 10251, 23042, 46
|
||||
2026/10/09 09:23:37.879, 96.04, 100, 2, 2670, 10251, 23042, 46
|
||||
2026/10/09 09:23:38.879, 95.97, 100, 2, 2670, 10251, 23042, 46
|
||||
2026/10/09 09:23:39.880, 96.37, 100, 2, 2670, 10251, 23042, 46
|
||||
2026/10/09 09:23:40.880, 96.32, 100, 2, 2670, 10251, 23042, 46
|
||||
2026/10/09 09:23:41.880, 96.36, 100, 2, 2670, 10251, 23042, 46
|
||||
2026/10/09 09:23:42.880, 96.00, 100, 2, 2670, 10251, 23042, 46
|
||||
2026/10/09 09:23:43.881, 95.66, 100, 2, 2670, 10251, 23042, 46
|
||||
2026/10/09 09:23:44.881, 96.16, 100, 2, 2670, 10251, 23042, 46
|
||||
2026/10/09 09:23:45.881, 96.35, 100, 2, 2670, 10251, 23042, 46
|
||||
2026/10/09 09:23:46.881, 96.52, 100, 2, 2670, 10251, 23042, 46
|
||||
2026/10/09 09:23:47.882, 95.91, 100, 2, 2670, 10251, 23042, 46
|
||||
2026/10/09 09:23:48.882, 95.83, 100, 2, 2670, 10251, 23042, 46
|
||||
2026/10/09 09:23:49.882, 101.32, 41, 37, 2655, 10251, 23042, 45
|
||||
2026/10/09 09:23:50.882, 87.47, 0, 0, 2655, 10251, 23042, 45
|
||||
2026/10/09 09:23:51.883, 63.80, 0, 0, 2520, 10251, 23042, 45
|
||||
2026/10/09 09:23:52.883, 61.48, 0, 0, 2520, 10251, 23042, 44
|
||||
2026/10/09 09:23:53.883, 59.29, 0, 0, 2520, 10251, 23042, 44
|
||||
2026/10/09 09:23:54.883, 59.27, 0, 0, 2520, 10251, 23042, 44
|
||||
2026/10/09 09:23:55.884, 59.32, 0, 0, 2520, 10251, 23042, 44
|
||||
2026/10/09 09:23:56.884, 59.33, 0, 0, 2520, 10251, 23042, 44
|
||||
2026/10/09 09:23:57.884, 59.31, 0, 0, 2520, 10251, 23042, 44
|
||||
2026/10/09 09:23:58.885, 59.37, 0, 0, 2520, 10251, 23042, 44
|
||||
2026/10/09 09:23:59.885, 59.47, 0, 0, 2520, 10251, 23042, 44
|
||||
2026/10/09 09:24:00.885, 68.01, 60, 2, 2670, 10251, 23042, 45
|
||||
2026/10/09 09:24:01.885, 68.94, 54, 2, 2670, 10251, 23042, 45
|
||||
2026/10/09 09:24:02.886, 66.36, 0, 0, 2670, 10251, 23042, 45
|
||||
2026/10/09 09:24:03.886, 64.14, 0, 0, 2520, 10251, 23042, 45
|
||||
2026/10/09 09:24:04.886, 61.65, 0, 0, 2520, 10251, 23042, 45
|
||||
2026/10/09 09:24:05.887, 65.22, 73, 5, 2670, 10251, 22958, 45
|
||||
2026/10/09 09:24:06.887, 79.81, 100, 0, 2670, 10251, 22958, 46
|
||||
2026/10/09 09:24:07.887, 79.85, 100, 0, 2670, 10251, 22958, 46
|
||||
2026/10/09 09:24:08.887, 79.90, 100, 0, 2670, 10251, 22958, 46
|
||||
2026/10/09 09:24:09.888, 79.82, 100, 0, 2670, 10251, 22958, 46
|
||||
2026/10/09 09:24:10.888, 79.90, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:11.888, 79.98, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:12.888, 79.95, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:13.889, 79.76, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:14.889, 79.91, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:15.889, 79.98, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:16.890, 79.89, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:17.890, 79.94, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:18.890, 79.88, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:19.890, 79.89, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:20.891, 80.02, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:21.891, 79.99, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:22.891, 79.98, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:23.891, 79.86, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:24.892, 79.82, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:25.892, 79.85, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:26.892, 80.00, 100, 0, 2670, 10251, 22958, 47
|
||||
2026/10/09 09:24:27.893, 79.93, 100, 0, 2670, 10251, 22958, 48
|
||||
2026/10/09 09:24:28.893, 79.95, 100, 0, 2670, 10251, 22958, 48
|
||||
2026/10/09 09:24:29.893, 80.02, 100, 0, 2670, 10251, 22958, 48
|
||||
2026/10/09 09:24:30.893, 80.03, 100, 0, 2670, 10251, 22958, 48
|
||||
2026/10/09 09:24:31.894, 80.03, 100, 0, 2670, 10251, 22958, 48
|
||||
2026/10/09 09:24:32.894, 80.04, 100, 0, 2670, 10251, 22958, 48
|
||||
2026/10/09 09:24:33.894, 80.17, 100, 0, 2670, 10251, 22958, 48
|
||||
2026/10/09 09:24:34.894, 97.04, 100, 0, 2655, 10251, 22958, 48
|
||||
2026/10/09 09:24:35.895, 87.18, 0, 0, 2655, 10251, 22958, 47
|
||||
2026/10/09 09:24:36.895, 64.89, 0, 0, 2520, 10251, 22958, 47
|
||||
2026/10/09 09:24:37.895, 62.17, 0, 0, 2520, 10251, 22958, 47
|
||||
2026/10/09 09:24:38.896, 59.64, 0, 0, 2520, 10251, 22958, 46
|
||||
2026/10/09 09:24:39.896, 59.60, 0, 0, 2520, 10251, 22958, 46
|
||||
2026/10/09 09:24:40.896, 59.58, 0, 0, 2520, 10251, 22958, 46
|
||||
2026/10/09 09:24:41.896, 59.62, 0, 0, 2520, 10251, 22958, 46
|
||||
2026/10/09 09:24:42.897, 59.64, 0, 0, 2520, 10251, 22958, 46
|
||||
2026/10/09 09:24:43.897, 59.61, 0, 0, 2520, 10251, 22958, 46
|
||||
2026/10/09 09:24:44.897, 59.64, 0, 0, 2520, 10251, 22958, 46
|
||||
2026/10/09 09:24:45.897, 64.03, 62, 2, 2655, 10251, 22958, 47
|
||||
2026/10/09 09:24:46.898, 70.64, 34, 1, 2655, 10251, 22958, 47
|
||||
2026/10/09 09:24:47.898, 68.45, 0, 0, 2655, 10251, 22958, 47
|
||||
2026/10/09 09:24:48.898, 67.11, 0, 0, 2655, 10251, 22958, 47
|
||||
2026/10/09 09:24:49.899, 64.89, 0, 0, 2520, 10251, 22958, 47
|
||||
2026/10/09 09:24:50.899, 62.14, 0, 0, 2520, 10251, 22958, 47
|
||||
2026/10/09 09:24:51.899, 59.56, 0, 0, 2520, 10251, 22958, 47
|
||||
2026/10/09 09:24:52.899, 59.48, 0, 0, 2520, 10251, 22958, 47
|
||||
2026/10/09 09:24:53.900, 59.47, 0, 0, 2520, 10251, 22958, 47
|
||||
2026/10/09 09:24:54.900, 59.57, 0, 0, 2520, 10251, 22958, 47
|
||||
2026/10/09 09:24:55.900, 59.62, 0, 0, 2520, 10251, 22958, 47
|
||||
2026/10/09 09:24:56.901, 59.63, 0, 0, 2520, 10251, 22958, 47
|
||||
2026/10/09 09:24:57.901, 59.59, 0, 0, 2520, 10251, 2, 47
|
||||
2026/10/09 09:24:58.901, 69.60, 100, 8, 2655, 10251, 22958, 48
|
||||
2026/10/09 09:24:59.902, 81.82, 100, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:00.902, 81.93, 100, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:01.902, 82.14, 100, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:02.902, 81.91, 100, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:03.903, 82.03, 100, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:04.903, 82.11, 100, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:05.903, 82.43, 100, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:06.904, 82.52, 100, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:07.904, 82.22, 100, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:08.904, 82.35, 100, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:09.904, 82.25, 100, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:10.905, 82.28, 100, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:11.905, 82.47, 100, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:12.905, 82.42, 100, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:13.905, 82.52, 100, 0, 2655, 10251, 22958, 50
|
||||
2026/10/09 09:25:14.906, 82.40, 100, 0, 2655, 10251, 22958, 50
|
||||
2026/10/09 09:25:15.906, 82.16, 100, 0, 2655, 10251, 22958, 50
|
||||
2026/10/09 09:25:16.906, 82.24, 100, 0, 2655, 10251, 22958, 50
|
||||
2026/10/09 09:25:17.907, 82.42, 100, 0, 2655, 10251, 22958, 50
|
||||
2026/10/09 09:25:18.907, 82.55, 100, 0, 2655, 10251, 22958, 50
|
||||
2026/10/09 09:25:19.907, 82.58, 100, 0, 2655, 10251, 22958, 50
|
||||
2026/10/09 09:25:20.907, 82.53, 100, 0, 2655, 10251, 22958, 50
|
||||
2026/10/09 09:25:21.908, 82.39, 76, 46, 2655, 10251, 22958, 50
|
||||
2026/10/09 09:25:22.908, 86.80, 0, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:23.908, 65.18, 0, 0, 2520, 10251, 22958, 48
|
||||
2026/10/09 09:25:24.909, 62.38, 0, 0, 2520, 10251, 22958, 48
|
||||
2026/10/09 09:25:25.909, 59.65, 0, 0, 2520, 10251, 22958, 48
|
||||
2026/10/09 09:25:26.909, 59.63, 0, 0, 2520, 10251, 22958, 48
|
||||
2026/10/09 09:25:27.909, 59.65, 0, 0, 2520, 10251, 22958, 48
|
||||
2026/10/09 09:25:28.910, 59.58, 0, 0, 2520, 10251, 22958, 48
|
||||
2026/10/09 09:25:29.910, 59.58, 0, 0, 2520, 10251, 22958, 48
|
||||
2026/10/09 09:25:30.910, 59.61, 0, 0, 2520, 10251, 22958, 48
|
||||
2026/10/09 09:25:31.911, 59.58, 0, 0, 2520, 10251, 22958, 48
|
||||
2026/10/09 09:25:32.911, 59.92, 59, 2, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:33.911, 70.60, 61, 2, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:34.912, 69.48, 0, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:35.912, 67.54, 0, 0, 2655, 10251, 22958, 49
|
||||
2026/10/09 09:25:36.912, 66.02, 0, 0, 2520, 10251, 22958, 49
|
||||
2026/10/09 09:25:37.912, 62.83, 0, 0, 2520, 10251, 22958, 48
|
||||
2026/10/09 09:25:38.913, 59.78, 0, 0, 2520, 10251, 22958, 48
|
||||
2026/10/09 09:25:39.913, 59.75, 0, 0, 2520, 10251, 22958, 48
|
||||
2026/10/09 09:25:40.913, 59.68, 0, 0, 2520, 10251, 22958, 48
|
||||
2026/10/09 09:25:41.914, 59.69, 0, 0, 2520, 10251, 22958, 48
|
||||
2026/10/09 09:25:42.914, 59.72, 0, 0, 2520, 10251, 22958, 49
|
||||
2026/10/09 09:25:43.914, 59.78, 0, 0, 2520, 10251, 22958, 49
|
||||
2026/10/09 09:25:44.914, 59.78, 0, 0, 2520, 10501, 21, 49
|
||||
2026/10/09 09:25:45.915, 66.33, 100, 0, 2655, 10251, 22998, 50
|
||||
2026/10/09 09:25:46.916, 79.04, 100, 0, 2655, 10251, 22998, 50
|
||||
2026/10/09 09:25:47.916, 79.75, 100, 0, 2655, 10251, 22998, 50
|
||||
2026/10/09 09:25:48.916, 79.90, 100, 0, 2655, 10251, 22998, 50
|
||||
2026/10/09 09:25:49.916, 79.69, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:25:50.917, 79.82, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:25:51.917, 79.90, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:25:52.917, 79.90, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:25:53.918, 79.87, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:25:54.918, 79.74, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:25:55.918, 80.00, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:25:56.918, 79.98, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:25:57.919, 80.21, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:25:58.919, 79.90, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:25:59.919, 79.92, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:26:00.919, 79.95, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:26:01.920, 80.15, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:26:02.920, 80.14, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:26:03.920, 80.22, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:26:04.921, 80.06, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:26:05.921, 80.02, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:26:06.921, 80.10, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:26:07.921, 80.24, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:26:08.922, 80.16, 100, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:26:09.922, 80.16, 100, 0, 2655, 10251, 22998, 52
|
||||
2026/10/09 09:26:10.922, 80.27, 100, 0, 2655, 10251, 22998, 52
|
||||
2026/10/09 09:26:11.922, 80.16, 100, 0, 2655, 10251, 22998, 52
|
||||
2026/10/09 09:26:12.923, 80.15, 100, 0, 2655, 10251, 22998, 52
|
||||
2026/10/09 09:26:13.923, 80.15, 100, 0, 2655, 10251, 22998, 52
|
||||
2026/10/09 09:26:14.923, 80.27, 100, 0, 2655, 10251, 22998, 52
|
||||
2026/10/09 09:26:15.924, 80.24, 100, 0, 2655, 10251, 22998, 52
|
||||
2026/10/09 09:26:16.924, 80.24, 100, 0, 2655, 10251, 22998, 52
|
||||
2026/10/09 09:26:17.924, 80.31, 100, 0, 2655, 10251, 22998, 52
|
||||
2026/10/09 09:26:18.924, 80.28, 100, 0, 2655, 10251, 22998, 52
|
||||
2026/10/09 09:26:19.925, 80.31, 100, 0, 2655, 10251, 22998, 52
|
||||
2026/10/09 09:26:20.925, 80.22, 100, 0, 2655, 10251, 22998, 52
|
||||
2026/10/09 09:26:21.925, 80.35, 100, 0, 2655, 10251, 22998, 52
|
||||
2026/10/09 09:26:22.925, 80.25, 100, 0, 2655, 10251, 22998, 52
|
||||
2026/10/09 09:26:23.926, 80.42, 100, 0, 2655, 10251, 22998, 52
|
||||
2026/10/09 09:26:24.926, 92.58, 0, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:26:25.926, 89.34, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:26.926, 68.21, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:27.927, 64.21, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:28.927, 60.18, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:29.927, 60.12, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:30.928, 60.10, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:31.928, 60.12, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:32.928, 60.18, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:33.928, 60.13, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:34.929, 63.21, 62, 2, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:26:35.929, 72.71, 62, 2, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:26:36.929, 69.82, 0, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:26:37.930, 69.07, 0, 0, 2655, 10251, 22998, 51
|
||||
2026/10/09 09:26:38.930, 66.96, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:39.930, 63.49, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:40.930, 60.19, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:41.931, 60.20, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:42.931, 60.26, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:43.931, 60.31, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:44.932, 60.32, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:45.932, 60.25, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:46.932, 60.17, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:47.932, 60.14, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:48.933, 60.14, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:49.933, 60.17, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:50.933, 60.33, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:51.934, 61.28, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:52.934, 61.44, 0, 0, 2520, 10251, 22998, 51
|
||||
2026/10/09 09:26:53.934, 59.93, 0, 0, 510, 810, 22998, 51
|
||||
2026/10/09 09:26:54.935, 25.35, 0, 0, 345, 810, 22998, 49
|
||||
2026/10/09 09:26:55.935, 21.58, 0, 0, 225, 405, 22998, 49
|
||||
2026/10/09 09:26:56.935, 16.91, 0, 0, 210, 405, 22998, 49
|
||||
2026/10/09 09:26:57.936, 16.04, 0, 0, 210, 405, 22998, 49
|
||||
2026/10/09 09:26:58.936, 16.10, 0, 0, 210, 405, 22998, 49
|
||||
2026/10/09 09:26:59.936, 16.12, 0, 0, 210, 405, 22998, 49
|
||||
2026/10/09 09:27:00.937, 16.09, 0, 0, 210, 405, 22998, 48
|
||||
2026/10/09 09:27:01.937, 16.04, 0, 0, 210, 405, 22998, 48
|
||||
2026/10/09 09:27:02.937, 15.98, 0, 0, 210, 405, 22998, 48
|
||||
2026/10/09 09:27:03.937, 15.92, 0, 0, 210, 405, 22998, 48
|
||||
2026/10/09 09:27:04.938, 15.87, 0, 0, 210, 405, 22998, 48
|
||||
2026/10/09 09:27:05.938, 15.84, 0, 0, 210, 405, 22998, 47
|
||||
2026/10/09 09:27:06.938, 15.81, 0, 0, 210, 405, 22998, 47
|
||||
2026/10/09 09:27:07.939, 15.77, 0, 0, 210, 405, 22998, 47
|
||||
2026/10/09 09:27:08.939, 15.79, 0, 0, 210, 405, 22998, 47
|
||||
2026/10/09 09:27:09.939, 15.77, 0, 0, 210, 405, 22998, 47
|
||||
2026/10/09 09:27:10.939, 15.77, 0, 0, 210, 405, 22998, 46
|
||||
2026/10/09 09:27:11.940, 15.81, 0, 0, 210, 405, 22998, 46
|
||||
2026/10/09 09:27:12.940, 15.77, 0, 0, 210, 405, 22998, 46
|
||||
2026/10/09 09:27:13.940, 15.68, 0, 0, 210, 405, 22998, 46
|
||||
2026/10/09 09:27:14.940, 22.26, 100, 8, 2520, 10501, 396, 46
|
||||
2026/10/09 09:27:15.941, 77.00, 100, 0, 2655, 10251, 22998, 48
|
||||
2026/10/09 09:27:16.941, 80.62, 100, 0, 2655, 10251, 22998, 49
|
||||
2026/10/09 09:27:17.941, 80.60, 100, 0, 2655, 10251, 22998, 49
|
||||
2026/10/09 09:27:18.942, 80.53, 100, 0, 2655, 10251, 22998, 49
|
||||
2026/10/09 09:27:19.942, 80.60, 100, 0, 2655, 10251, 22998, 49
|
||||
2026/10/09 09:27:20.942, 80.48, 100, 0, 2655, 10251, 22998, 48
|
||||
2026/10/09 09:27:21.942, 80.53, 100, 0, 2655, 10251, 22998, 48
|
||||
2026/10/09 09:27:22.943, 80.41, 100, 0, 2655, 10251, 22998, 48
|
||||
2026/10/09 09:27:23.943, 80.50, 100, 0, 2655, 10251, 22998, 48
|
||||
2026/10/09 09:27:24.943, 80.45, 100, 0, 2655, 10251, 22998, 48
|
||||
2026/10/09 09:27:25.943, 80.53, 100, 0, 2655, 10251, 22998, 48
|
||||
2026/10/09 09:27:26.944, 80.49, 100, 0, 2655, 10251, 22998, 48
|
||||
2026/10/09 09:27:27.944, 80.55, 100, 0, 2655, 10251, 22998, 48
|
||||
2026/10/09 09:27:28.944, 80.38, 100, 0, 2655, 10251, 22998, 48
|
||||
2026/10/09 09:27:29.944, 80.45, 100, 0, 2655, 10251, 22998, 48
|
||||
2026/10/09 09:27:30.945, 80.60, 100, 0, 2655, 10251, 22998, 48
|
||||
2026/10/09 09:27:31.945, 80.38, 100, 0, 2655, 10251, 22998, 48
|
||||
2026/10/09 09:27:32.945, 80.32, 100, 0, 2655, 10251, 22998, 48
|
||||
2026/10/09 09:27:33.946, 80.42, 100, 0, 2655, 10251, 22998, 47
|
||||
2026/10/09 09:27:34.946, 80.33, 100, 0, 2655, 10251, 22998, 47
|
||||
2026/10/09 09:27:35.946, 80.35, 100, 0, 2655, 10251, 22998, 47
|
||||
2026/10/09 09:27:36.946, 80.45, 100, 0, 2655, 10251, 22998, 47
|
||||
2026/10/09 09:27:37.947, 80.25, 100, 0, 2655, 10251, 22998, 47
|
||||
2026/10/09 09:27:38.947, 88.14, 0, 0, 2655, 10251, 22998, 46
|
||||
2026/10/09 09:27:39.947, 86.87, 0, 0, 2655, 10251, 22998, 46
|
||||
2026/10/09 09:27:40.948, 65.27, 0, 0, 2520, 10251, 22998, 46
|
||||
2026/10/09 09:27:41.948, 62.61, 0, 0, 2520, 10251, 22998, 45
|
||||
2026/10/09 09:27:42.948, 60.06, 0, 0, 2520, 10251, 22998, 45
|
||||
2026/10/09 09:27:43.948, 60.08, 0, 0, 2520, 10251, 22998, 45
|
||||
2026/10/09 09:27:44.949, 60.10, 0, 0, 2520, 10251, 22998, 45
|
||||
2026/10/09 09:27:45.949, 60.05, 0, 0, 2520, 10251, 22998, 45
|
||||
2026/10/09 09:27:46.949, 59.96, 0, 0, 2520, 10251, 22998, 45
|
||||
2026/10/09 09:27:47.949, 59.92, 0, 0, 2520, 10251, 22998, 44
|
||||
2026/10/09 09:27:48.950, 61.24, 62, 2, 2670, 10251, 22998, 44
|
||||
2026/10/09 09:27:49.950, 70.68, 57, 2, 2670, 10251, 22998, 45
|
||||
2026/10/09 09:27:50.950, 67.56, 0, 0, 2670, 10251, 22998, 45
|
||||
2026/10/09 09:27:51.951, 66.73, 0, 0, 2670, 10251, 22998, 45
|
||||
2026/10/09 09:27:52.951, 64.56, 0, 0, 2520, 10251, 22998, 44
|
||||
2026/10/09 09:27:53.951, 62.16, 0, 0, 2520, 10251, 22998, 44
|
||||
2026/10/09 09:27:54.952, 59.84, 0, 0, 2520, 10251, 22998, 44
|
||||
2026/10/09 09:27:55.952, 59.76, 0, 0, 2520, 10251, 22998, 44
|
||||
2026/10/09 09:27:56.952, 59.72, 0, 0, 2520, 10251, 22998, 44
|
||||
2026/10/09 09:27:57.952, 59.76, 0, 0, 2520, 10251, 22998, 44
|
||||
2026/10/09 09:27:58.953, 59.76, 0, 0, 2520, 10251, 22998, 44
|
||||
2026/10/09 09:27:59.953, 59.78, 0, 0, 2520, 10251, 22998, 43
|
||||
2026/10/09 09:28:00.953, 59.81, 0, 0, 2520, 10251, 22998, 43
|
||||
2026/10/09 09:28:01.954, 59.78, 0, 0, 2520, 10251, 22998, 43
|
||||
2026/10/09 09:28:02.954, 59.73, 0, 0, 2520, 10251, 22998, 43
|
||||
2026/10/09 09:28:03.954, 59.73, 0, 0, 2520, 10251, 22998, 43
|
||||
2026/10/09 09:28:04.954, 59.73, 0, 0, 2520, 10251, 22998, 43
|
||||
2026/10/09 09:28:05.955, 59.68, 0, 0, 2520, 10251, 22998, 43
|
||||
2026/10/09 09:28:06.955, 59.70, 0, 0, 2520, 10251, 22998, 43
|
||||
2026/10/09 09:28:07.955, 59.32, 0, 0, 510, 810, 22998, 42
|
||||
2026/10/09 09:28:08.956, 41.08, 0, 0, 315, 405, 22998, 41
|
||||
2026/10/09 09:28:09.956, 19.52, 0, 0, 210, 405, 22998, 41
|
||||
2026/10/09 09:28:10.957, 15.66, 0, 0, 210, 405, 22998, 41
|
||||
2026/10/09 09:28:11.957, 15.53, 0, 0, 210, 405, 22998, 41
|
||||
2026/10/09 09:28:12.957, 15.52, 0, 0, 210, 405, 22998, 41
|
||||
2026/10/09 09:28:13.957, 15.53, 0, 0, 210, 405, 22998, 40
|
||||
2026/10/09 09:28:14.958, 15.52, 0, 0, 210, 405, 22998, 40
|
||||
2026/10/09 09:28:15.958, 15.44, 0, 0, 210, 405, 22998, 40
|
||||
2026/10/09 09:28:16.958, 15.39, 0, 0, 210, 405, 22998, 40
|
||||
2026/10/09 09:28:17.959, 15.45, 0, 0, 210, 405, 22998, 40
|
||||
2026/10/09 09:28:18.959, 15.48, 0, 0, 210, 405, 22998, 40
|
||||
2026/10/09 09:28:19.959, 15.49, 0, 0, 210, 405, 22998, 40
|
||||
2026/10/09 09:28:20.959, 15.57, 0, 0, 210, 405, 22998, 40
|
||||
2026/10/09 09:28:21.960, 15.60, 0, 0, 210, 405, 22998, 40
|
||||
2026/10/09 09:28:22.960, 15.58, 0, 0, 210, 405, 22998, 39
|
||||
2026/10/09 09:28:23.960, 15.57, 0, 0, 210, 405, 22998, 39
|
||||
2026/10/09 09:28:24.960, 15.61, 0, 0, 210, 405, 22998, 39
|
||||
2026/10/09 09:28:25.961, 15.68, 0, 0, 210, 405, 22998, 39
|
||||
2026/10/09 09:28:26.961, 15.71, 0, 0, 210, 405, 22998, 39
|
||||
2026/10/09 09:28:27.961, 15.69, 0, 0, 210, 405, 22998, 39
|
||||
2026/10/09 09:28:28.962, 15.75, 0, 0, 210, 405, 11694, 40
|
||||
2026/10/09 09:28:29.987, 72.43, 100, 1, 2670, 10251, 23042, 42
|
||||
2026/10/09 09:28:30.987, 87.19, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:31.987, 87.34, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:32.987, 86.72, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:33.988, 87.05, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:34.988, 86.92, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:35.988, 86.67, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:36.989, 86.73, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:37.989, 86.80, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:38.989, 86.40, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:39.989, 86.70, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:40.990, 87.21, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:41.990, 86.72, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:42.990, 86.79, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:43.990, 86.68, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:44.991, 87.05, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:45.991, 86.97, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:46.991, 86.47, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:47.992, 86.59, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:48.992, 86.12, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:49.992, 86.32, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:50.992, 86.41, 100, 1, 2670, 10251, 23042, 43
|
||||
2026/10/09 09:28:51.993, 96.41, 0, 0, 2670, 10251, 23042, 41
|
||||
2026/10/09 09:28:52.993, 64.56, 6, 0, 2670, 10251, 23042, 41
|
||||
2026/10/09 09:28:53.993, 64.31, 0, 0, 2520, 10501, 470, 42
|
||||
2026/10/09 09:28:54.993, 81.02, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:28:55.994, 79.83, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:28:56.994, 79.89, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:28:57.994, 79.93, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:28:58.995, 79.84, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:28:59.995, 79.88, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:00.995, 79.89, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:01.995, 79.77, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:02.996, 79.77, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:03.996, 79.79, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:04.996, 79.73, 100, 0, 2670, 10251, 470, 41
|
||||
2026/10/09 09:29:05.996, 67.24, 0, 0, 2670, 10251, 21, 41
|
||||
2026/10/09 09:29:07.015, 72.50, 45, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:08.015, 79.44, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:09.016, 79.41, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:10.016, 79.28, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:11.016, 79.28, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:12.017, 79.30, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:13.017, 79.25, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:14.017, 79.20, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:15.017, 79.14, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:16.018, 79.18, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:17.018, 79.25, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:18.018, 78.49, 100, 0, 2670, 10251, 470, 42
|
||||
2026/10/09 09:29:19.019, 66.43, 0, 0, 2670, 10251, 470, 41
|
||||
2026/10/09 09:29:20.019, 74.06, 0, 0, 2670, 10251, 2458, 42
|
||||
2026/10/09 09:29:21.019, 79.75, 100, 0, 2670, 10251, 2458, 42
|
||||
2026/10/09 09:29:22.019, 79.78, 100, 0, 2670, 10251, 2458, 42
|
||||
2026/10/09 09:29:23.020, 79.79, 100, 0, 2670, 10251, 2458, 42
|
||||
2026/10/09 09:29:24.020, 79.89, 100, 0, 2670, 10251, 2458, 42
|
||||
2026/10/09 09:29:25.020, 79.80, 100, 0, 2670, 10251, 2458, 42
|
||||
2026/10/09 09:29:26.021, 79.83, 100, 0, 2670, 10251, 2458, 42
|
||||
2026/10/09 09:29:27.021, 79.84, 100, 0, 2670, 10251, 2458, 42
|
||||
2026/10/09 09:29:28.021, 79.86, 100, 0, 2670, 10251, 2458, 42
|
||||
2026/10/09 09:29:29.021, 79.78, 100, 0, 2670, 10251, 2458, 42
|
||||
2026/10/09 09:29:30.022, 79.85, 100, 0, 2670, 10251, 2458, 42
|
||||
2026/10/09 09:29:31.022, 76.33, 100, 0, 2670, 10251, 2458, 41
|
||||
2026/10/09 09:29:32.022, 65.11, 0, 0, 2670, 10251, 2458, 41
|
||||
2026/10/09 09:29:33.023, 61.91, 0, 0, 2520, 10251, 1, 40
|
||||
2026/10/09 09:29:34.032, 69.31, 0, 0, 2670, 10251, 2458, 41
|
||||
2026/10/09 09:29:35.032, 79.17, 100, 0, 2670, 10251, 2458, 41
|
||||
2026/10/09 09:29:36.033, 79.22, 100, 0, 2670, 10251, 2458, 41
|
||||
2026/10/09 09:29:37.033, 79.21, 100, 0, 2670, 10251, 2458, 41
|
||||
2026/10/09 09:29:38.033, 79.18, 100, 0, 2670, 10251, 2458, 41
|
||||
2026/10/09 09:29:39.033, 79.19, 100, 0, 2670, 10251, 2458, 41
|
||||
2026/10/09 09:29:40.034, 79.08, 100, 0, 2670, 10251, 2458, 41
|
||||
2026/10/09 09:29:41.034, 78.97, 100, 0, 2670, 10251, 2458, 41
|
||||
2026/10/09 09:29:42.034, 78.99, 100, 0, 2670, 10251, 2458, 41
|
||||
2026/10/09 09:29:43.035, 79.09, 100, 0, 2670, 10251, 2458, 41
|
||||
2026/10/09 09:29:44.035, 79.06, 100, 0, 2670, 10251, 2458, 41
|
||||
2026/10/09 09:29:45.035, 79.14, 100, 0, 2670, 10251, 2458, 41
|
||||
2026/10/09 09:29:46.035, 69.98, 100, 0, 2670, 10251, 2458, 40
|
||||
2026/10/09 09:29:47.036, 64.40, 0, 0, 2670, 10251, 2458, 40
|
||||
2026/10/09 09:29:48.036, 62.18, 0, 0, 2520, 10251, 8614, 40
|
||||
2026/10/09 09:29:49.036, 78.19, 100, 1, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:29:50.037, 80.54, 100, 1, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:29:51.037, 80.46, 100, 1, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:29:52.037, 80.36, 100, 1, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:29:53.037, 80.42, 100, 1, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:29:54.038, 80.43, 100, 1, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:29:55.038, 80.42, 100, 1, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:29:56.038, 80.45, 100, 1, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:29:57.039, 80.53, 100, 1, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:29:58.039, 80.44, 100, 1, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:29:59.039, 73.73, 96, 17, 2670, 10251, 8614, 40
|
||||
2026/10/09 09:30:00.039, 72.28, 0, 0, 2670, 10251, 8614, 40
|
||||
2026/10/09 09:30:01.040, 63.18, 0, 0, 2520, 10251, 8614, 40
|
||||
2026/10/09 09:30:02.040, 59.87, 0, 0, 2520, 10251, 8614, 39
|
||||
2026/10/09 09:30:03.040, 66.09, 62, 2, 2670, 10251, 8614, 40
|
||||
2026/10/09 09:30:04.041, 64.70, 0, 0, 2670, 10251, 8614, 40
|
||||
2026/10/09 09:30:05.041, 69.43, 0, 0, 2670, 10251, 8614, 40
|
||||
2026/10/09 09:30:06.041, 79.90, 100, 0, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:30:07.041, 79.99, 100, 0, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:30:08.042, 79.95, 100, 0, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:30:09.042, 79.90, 100, 0, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:30:10.042, 79.90, 100, 0, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:30:11.042, 79.96, 100, 0, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:30:12.043, 80.01, 100, 0, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:30:13.043, 80.09, 100, 0, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:30:14.043, 80.04, 100, 0, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:30:15.044, 80.05, 100, 0, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:30:16.044, 79.96, 100, 0, 2670, 10251, 8614, 41
|
||||
2026/10/09 09:30:17.044, 81.41, 100, 0, 2670, 10251, 8614, 45
|
||||
2026/10/09 09:30:18.044, 72.72, 0, 0, 2670, 10251, 8614, 40
|
||||
2026/10/09 09:30:19.045, 62.71, 0, 0, 2520, 10251, 8614, 39
|
||||
2026/10/09 09:30:20.045, 61.21, 0, 0, 2520, 10251, 8614, 39
|
||||
2026/10/09 09:30:21.045, 61.49, 0, 0, 2670, 10251, 8614, 39
|
||||
2026/10/09 09:30:22.046, 65.43, 0, 0, 2670, 10251, 8614, 39
|
||||
2026/10/09 09:30:23.046, 64.35, 99, 7, 2520, 10251, 22, 39
|
||||
2026/10/09 09:30:24.046, 253.29, 100, 35, 2655, 10251, 23070, 53
|
||||
2026/10/09 09:30:25.047, 317.02, 100, 28, 2655, 10251, 23070, 58
|
||||
2026/10/09 09:30:26.047, 320.76, 100, 29, 2655, 10251, 23070, 61
|
||||
2026/10/09 09:30:27.047, 319.67, 100, 33, 2655, 10251, 23070, 59
|
||||
2026/10/09 09:30:28.047, 321.51, 100, 25, 2655, 10251, 23070, 62
|
||||
2026/10/09 09:30:29.048, 320.74, 100, 33, 2655, 10251, 23070, 57
|
||||
2026/10/09 09:30:30.048, 318.79, 100, 32, 2655, 10251, 23070, 61
|
||||
2026/10/09 09:30:31.048, 322.72, 100, 26, 2655, 10251, 23070, 63
|
||||
2026/10/09 09:30:32.049, 320.73, 100, 34, 2655, 10251, 23070, 57
|
||||
2026/10/09 09:30:33.049, 322.26, 100, 31, 2655, 10251, 23070, 62
|
||||
2026/10/09 09:30:34.049, 323.12, 100, 26, 2655, 10251, 23070, 63
|
||||
2026/10/09 09:30:35.049, 321.20, 100, 35, 2655, 10251, 23070, 58
|
||||
2026/10/09 09:30:36.050, 320.36, 100, 30, 2655, 10251, 23070, 63
|
||||
2026/10/09 09:30:37.050, 324.21, 100, 27, 2655, 10251, 23070, 65
|
||||
2026/10/09 09:30:38.050, 320.98, 100, 35, 2655, 10251, 23070, 58
|
||||
2026/10/09 09:30:39.051, 320.73, 100, 29, 2655, 10251, 23070, 64
|
||||
2026/10/09 09:30:40.051, 324.10, 100, 28, 2655, 10251, 23070, 62
|
||||
2026/10/09 09:30:41.051, 319.81, 100, 35, 2640, 10251, 23070, 59
|
||||
2026/10/09 09:30:42.051, 319.73, 100, 30, 2640, 10251, 23070, 64
|
||||
2026/10/09 09:30:43.052, 324.18, 100, 26, 2640, 10251, 23070, 66
|
||||
2026/10/09 09:30:44.052, 198.06, 0, 0, 2655, 10251, 23070, 46
|
||||
2026/10/09 09:30:45.052, 67.92, 0, 0, 2655, 10251, 23070, 45
|
||||
2026/10/09 09:30:46.053, 66.94, 0, 0, 2655, 10251, 23070, 45
|
||||
2026/10/09 09:30:47.053, 64.34, 0, 0, 2520, 10251, 23070, 44
|
||||
2026/10/09 09:30:48.053, 62.08, 0, 0, 2520, 10251, 23070, 43
|
||||
2026/10/09 09:30:49.053, 59.98, 0, 0, 2520, 10251, 23070, 43
|
||||
2026/10/09 09:30:50.054, 59.95, 0, 0, 2520, 10251, 23070, 43
|
||||
2026/10/09 09:30:51.054, 59.88, 0, 0, 2520, 10251, 23070, 43
|
||||
2026/10/09 09:30:52.054, 59.80, 0, 0, 2520, 10251, 23070, 42
|
||||
2026/10/09 09:30:53.055, 59.76, 0, 0, 2520, 10251, 23070, 42
|
||||
2026/10/09 09:30:54.055, 59.68, 0, 0, 2520, 10251, 23070, 42
|
||||
2026/10/09 09:30:55.055, 59.64, 0, 0, 2520, 10251, 23070, 42
|
||||
2026/10/09 09:30:56.055, 59.63, 0, 0, 2520, 10251, 23070, 42
|
||||
2026/10/09 09:30:57.056, 64.30, 62, 2, 2670, 10251, 23070, 42
|
||||
2026/10/09 09:30:58.056, 69.06, 0, 0, 2670, 10251, 23070, 42
|
||||
2026/10/09 09:30:59.056, 65.91, 0, 0, 2670, 10251, 23070, 42
|
||||
2026/10/09 09:31:00.057, 68.25, 86, 9, 2670, 10251, 23072, 47
|
||||
2026/10/09 09:31:01.057, 179.33, 100, 15, 2655, 10251, 23072, 50
|
||||
2026/10/09 09:31:02.057, 197.90, 100, 15, 2655, 10251, 23072, 51
|
||||
2026/10/09 09:31:03.057, 198.35, 100, 15, 2655, 10251, 23072, 51
|
||||
2026/10/09 09:31:04.058, 198.71, 100, 15, 2655, 10251, 23072, 51
|
||||
2026/10/09 09:31:05.058, 198.50, 100, 15, 2655, 10251, 23072, 52
|
||||
2026/10/09 09:31:06.058, 198.66, 100, 15, 2655, 10251, 23072, 52
|
||||
2026/10/09 09:31:07.059, 198.52, 100, 15, 2655, 10251, 23072, 52
|
||||
2026/10/09 09:31:08.059, 198.71, 100, 15, 2655, 10251, 23072, 52
|
||||
2026/10/09 09:31:09.059, 198.60, 100, 15, 2655, 10251, 23072, 52
|
||||
2026/10/09 09:31:10.059, 198.79, 100, 15, 2655, 10251, 23072, 52
|
||||
2026/10/09 09:31:11.060, 198.85, 100, 15, 2655, 10251, 23072, 52
|
||||
2026/10/09 09:31:12.060, 198.80, 100, 15, 2655, 10251, 23072, 52
|
||||
2026/10/09 09:31:13.060, 198.66, 100, 15, 2655, 10251, 23072, 52
|
||||
2026/10/09 09:31:14.061, 198.77, 100, 15, 2655, 10251, 23072, 52
|
||||
2026/10/09 09:31:15.061, 198.40, 100, 15, 2655, 10251, 23072, 52
|
||||
2026/10/09 09:31:16.061, 198.27, 100, 15, 2655, 10251, 23072, 52
|
||||
2026/10/09 09:31:17.061, 198.50, 100, 15, 2655, 10251, 23072, 52
|
||||
2026/10/09 09:31:18.062, 199.08, 100, 15, 2655, 10251, 23072, 53
|
||||
2026/10/09 09:31:19.062, 199.29, 100, 15, 2655, 10251, 23072, 53
|
||||
2026/10/09 09:31:20.062, 198.94, 100, 15, 2655, 10251, 23072, 53
|
||||
2026/10/09 09:31:21.062, 117.09, 0, 0, 2670, 10251, 23072, 45
|
||||
2026/10/09 09:31:22.063, 66.38, 0, 0, 2670, 10251, 23072, 44
|
||||
2026/10/09 09:31:23.063, 62.98, 0, 0, 2520, 10251, 23072, 43
|
||||
2026/10/09 09:31:24.063, 61.35, 0, 0, 2520, 10251, 23072, 43
|
||||
2026/10/09 09:31:25.064, 60.01, 0, 0, 2520, 10251, 23072, 43
|
||||
2026/10/09 09:31:26.064, 60.01, 0, 0, 2520, 10251, 23072, 43
|
||||
2026/10/09 09:31:27.064, 59.97, 0, 0, 2520, 10251, 23072, 42
|
||||
2026/10/09 09:31:28.065, 59.93, 0, 0, 2520, 10251, 23072, 42
|
||||
2026/10/09 09:31:29.065, 59.93, 0, 0, 2520, 10251, 23072, 42
|
||||
2026/10/09 09:31:30.065, 59.94, 0, 0, 2520, 10251, 23072, 42
|
||||
2026/10/09 09:31:31.066, 59.99, 0, 0, 2520, 10251, 23072, 42
|
||||
2026/10/09 09:31:32.066, 62.99, 61, 2, 2670, 10251, 23072, 42
|
||||
2026/10/09 09:31:33.066, 70.17, 61, 2, 2670, 10251, 23072, 42
|
||||
2026/10/09 09:31:34.066, 66.30, 0, 0, 2670, 10251, 23072, 42
|
||||
2026/10/09 09:31:35.067, 64.64, 100, 7, 2520, 10251, 11654, 42
|
||||
2026/10/09 09:31:36.102, 94.93, 100, 3, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:37.102, 111.44, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:38.102, 111.81, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:39.103, 111.75, 100, 3, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:40.103, 111.68, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:41.103, 112.03, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:42.103, 111.63, 100, 3, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:43.104, 111.67, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:44.104, 111.63, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:45.104, 111.82, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:46.105, 111.56, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:47.105, 111.63, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:48.105, 111.07, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:49.106, 111.18, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:50.106, 111.23, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:51.106, 111.25, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:52.106, 111.24, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:53.107, 110.97, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:54.107, 110.42, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:55.107, 110.77, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:56.108, 112.36, 100, 4, 2670, 10251, 23070, 45
|
||||
2026/10/09 09:31:57.108, 67.65, 0, 0, 2670, 10251, 23070, 42
|
||||
2026/10/09 09:31:58.108, 63.90, 0, 0, 2520, 10251, 23070, 42
|
||||
2026/10/09 09:31:59.108, 61.85, 0, 0, 2520, 10251, 23070, 42
|
||||
2026/10/09 09:32:00.109, 59.94, 0, 0, 2520, 10251, 23070, 41
|
||||
2026/10/09 09:32:01.109, 59.94, 0, 0, 2520, 10251, 23070, 41
|
||||
2026/10/09 09:32:02.109, 59.90, 0, 0, 2520, 10251, 23070, 41
|
||||
2026/10/09 09:32:03.109, 59.87, 0, 0, 2520, 10251, 23070, 41
|
||||
2026/10/09 09:32:04.110, 59.88, 0, 0, 2520, 10251, 23070, 41
|
||||
2026/10/09 09:32:05.110, 59.86, 0, 0, 2520, 10251, 23070, 41
|
||||
2026/10/09 09:32:06.110, 59.83, 0, 0, 2520, 10251, 23070, 41
|
||||
2026/10/09 09:32:07.111, 64.11, 0, 0, 2670, 10251, 23070, 41
|
||||
2026/10/09 09:32:08.111, 69.77, 55, 2, 2670, 10251, 23070, 41
|
||||
2026/10/09 09:32:09.111, 65.86, 59, 2, 2670, 10251, 23070, 41
|
||||
2026/10/09 09:32:10.111, 65.37, 0, 0, 2670, 10251, 23070, 41
|
||||
2026/10/09 09:32:11.112, 65.17, 0, 0, 2670, 10501, 1, 41
|
||||
2026/10/09 09:32:12.112, 67.37, 0, 0, 2670, 10501, 1, 41
|
||||
2026/10/09 09:32:13.112, 61.96, 0, 0, 540, 5001, 1, 41
|
||||
2026/10/09 09:32:14.112, 44.49, 0, 0, 345, 810, 1, 40
|
||||
2026/10/09 09:32:15.113, 24.88, 0, 0, 225, 810, 1, 39
|
||||
2026/10/09 09:32:16.113, 19.96, 0, 0, 210, 405, 1, 39
|
||||
2026/10/09 09:32:17.113, 16.51, 0, 0, 210, 405, 1, 39
|
||||
2026/10/09 09:32:18.114, 15.51, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:32:19.114, 15.47, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:32:20.114, 15.51, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:32:21.115, 15.56, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:32:22.115, 15.48, 0, 0, 210, 405, 1, 38
|
||||
2026/10/09 09:32:23.115, 15.49, 0, 0, 210, 405, 1, 38
|
||||
|
17
docs/analysis/mhpow/b3/rows/rtx4090-r1/progress.log
Normal file
17
docs/analysis/mhpow/b3/rows/rtx4090-r1/progress.log
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
row rc=0 --n 20 --kernel 1 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n20-k1
|
||||
row rc=0 --n 20 --kernel 2 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n20-k2
|
||||
row rc=0 --n 22 --kernel 1 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n22-k1
|
||||
row rc=0 --n 22 --kernel 2 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n22-k2
|
||||
row rc=0 --n 24 --kernel 1 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n24-k1
|
||||
row rc=0 --n 24 --kernel 2 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n24-k2
|
||||
row rc=0 --n 20 --kernel 1 --layout aos --min-label-s 20 --check 2 --k 64 --tag abl-n20-k1-aos
|
||||
row rc=0 --n 20 --B 1 --kernel 2 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B1-k2
|
||||
row rc=0 --n 20 --B 1 --kernel 1 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B1-k1
|
||||
row rc=0 --n 20 --B 32 --kernel 2 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B32-k2
|
||||
row rc=0 --n 20 --B 32 --kernel 1 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B32-k1
|
||||
row rc=0 --n 20 --B 128 --kernel 2 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B128-k2
|
||||
row rc=0 --n 20 --B 128 --kernel 1 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B128-k1
|
||||
row rc=0 --n 14 --kernel 1 --layout soa --min-label-s 20 --check 2 --k 64 --tag diag-n14-k1
|
||||
row rc=0 --n 16 --kernel 1 --layout soa --min-label-s 20 --check 2 --k 64 --tag diag-n16-k1
|
||||
row rc=0 --n 18 --kernel 1 --layout soa --min-label-s 20 --check 2 --k 64 --tag diag-n18-k1
|
||||
DONE 2026-10-09T09:32:24Z
|
||||
16
docs/analysis/mhpow/b3/rows/rtx4090-r1/rows.jsonl
Normal file
16
docs/analysis/mhpow/b3/rows/rtx4090-r1/rows.jsonl
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{"tag":"main-n20-k1","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":353,"Bmax":353,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":9,"graph_s":0.0243,"state_alloc_s":0.0022,"label_s_per_pass":2.399227,"labels_per_s":154277760.0,"labels_per_s_per_inst":437047.5,"ns_per_label_per_inst":2288.08,"merkle_s":0.048111,"prove_s":0.028913,"verify_all_s":0.0470,"accepted":353,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":16.44,"oracle":"IDENTICAL","label_window_unix_ms":[1791537770051,1791537791657],"free_gib":23.14,"per_inst_MiB":64.1}
|
||||
{"tag":"main-n20-k2","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":353,"Bmax":353,"layout":"soa","kernel":"k2","k":64,"wrong_edge":0,"passes":14,"graph_s":0.0244,"state_alloc_s":0.1633,"label_s_per_pass":1.434892,"labels_per_s":257961822.7,"labels_per_s_per_inst":730770.0,"ns_per_label_per_inst":1368.42,"merkle_s":0.047834,"prove_s":0.029520,"verify_all_s":0.0489,"accepted":353,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":16.09,"oracle":"IDENTICAL","label_window_unix_ms":[1791537808762,1791537828851],"free_gib":23.14,"per_inst_MiB":64.1}
|
||||
{"tag":"main-n22-k1","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":22,"N":4194304,"inst_MiB":128.0,"B":88,"Bmax":88,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":3,"graph_s":0.0934,"state_alloc_s":0.0926,"label_s_per_pass":9.618606,"labels_per_s":38373414.4,"labels_per_s_per_inst":436061.5,"ns_per_label_per_inst":2293.25,"merkle_s":0.047710,"prove_s":0.009508,"verify_all_s":0.0131,"accepted":88,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":23.18,"oracle":"IDENTICAL","label_window_unix_ms":[1791537845612,1791537874470],"free_gib":23.14,"per_inst_MiB":256.1}
|
||||
{"tag":"main-n22-k2","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":22,"N":4194304,"inst_MiB":128.0,"B":88,"Bmax":88,"layout":"soa","kernel":"k2","k":64,"wrong_edge":0,"passes":4,"graph_s":0.0938,"state_alloc_s":0.0940,"label_s_per_pass":5.800857,"labels_per_s":63628313.2,"labels_per_s_per_inst":723049.0,"ns_per_label_per_inst":1383.03,"merkle_s":0.048206,"prove_s":0.009367,"verify_all_s":0.0129,"accepted":88,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":23.11,"oracle":"IDENTICAL","label_window_unix_ms":[1791537898256,1791537921459],"free_gib":23.14,"per_inst_MiB":256.1}
|
||||
{"tag":"main-n24-k1","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":24,"N":16777216,"inst_MiB":512.0,"B":22,"Bmax":22,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":1,"graph_s":0.3730,"state_alloc_s":0.0106,"label_s_per_pass":38.473902,"labels_per_s":9593483.6,"labels_per_s_per_inst":436067.4,"ns_per_label_per_inst":2293.22,"merkle_s":0.047788,"prove_s":0.003201,"verify_all_s":0.0047,"accepted":22,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":50.37,"oracle":"IDENTICAL","label_window_unix_ms":[1791537945377,1791537983852],"free_gib":23.14,"per_inst_MiB":1024.1}
|
||||
{"tag":"main-n24-k2","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":24,"N":16777216,"inst_MiB":512.0,"B":22,"Bmax":22,"layout":"soa","kernel":"k2","k":64,"wrong_edge":0,"passes":1,"graph_s":0.3740,"state_alloc_s":0.0158,"label_s_per_pass":22.737664,"labels_per_s":16232923.1,"labels_per_s_per_inst":737860.1,"ns_per_label_per_inst":1355.27,"merkle_s":0.047969,"prove_s":0.002959,"verify_all_s":0.0047,"accepted":22,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":50.37,"oracle":"IDENTICAL","label_window_unix_ms":[1791538035170,1791538057908],"free_gib":23.14,"per_inst_MiB":1024.1}
|
||||
{"tag":"abl-n20-k1-aos","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":353,"Bmax":353,"layout":"aos","kernel":"k1","k":64,"wrong_edge":0,"passes":9,"graph_s":0.0242,"state_alloc_s":0.1368,"label_s_per_pass":2.423669,"labels_per_s":152721908.4,"labels_per_s_per_inst":432640.0,"ns_per_label_per_inst":2311.39,"merkle_s":0.083527,"prove_s":0.031405,"verify_all_s":0.0466,"accepted":353,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":2.25,"oracle":"IDENTICAL","label_window_unix_ms":[1791538108995,1791538130808],"free_gib":23.14,"per_inst_MiB":64.1}
|
||||
{"tag":"ladder-n20-B1-k2","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":1,"Bmax":353,"layout":"soa","kernel":"k2","k":64,"wrong_edge":0,"passes":8,"graph_s":0.0244,"state_alloc_s":0.0071,"label_s_per_pass":1.375263,"labels_per_s":762454.9,"labels_per_s_per_inst":762454.9,"ns_per_label_per_inst":1311.55,"merkle_s":0.000319,"prove_s":0.000326,"verify_all_s":0.0022,"accepted":1,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":1.17,"oracle":"IDENTICAL","label_window_unix_ms":[1791538133617,1791538144632],"free_gib":23.14,"per_inst_MiB":64.1}
|
||||
{"tag":"ladder-n20-B1-k1","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":1,"Bmax":353,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":5,"graph_s":0.0278,"state_alloc_s":0.0009,"label_s_per_pass":2.337456,"labels_per_s":448597.2,"labels_per_s_per_inst":448597.2,"ns_per_label_per_inst":2229.17,"merkle_s":0.000327,"prove_s":0.000347,"verify_all_s":0.0020,"accepted":1,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":1.17,"oracle":"IDENTICAL","label_window_unix_ms":[1791538146119,1791538157807],"free_gib":23.14,"per_inst_MiB":64.1}
|
||||
{"tag":"ladder-n20-B32-k2","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":32,"Bmax":353,"layout":"soa","kernel":"k2","k":64,"wrong_edge":0,"passes":8,"graph_s":0.0241,"state_alloc_s":0.0010,"label_s_per_pass":1.399720,"labels_per_s":23972248.8,"labels_per_s_per_inst":749132.8,"ns_per_label_per_inst":1334.88,"merkle_s":0.004549,"prove_s":0.003421,"verify_all_s":0.0059,"accepted":32,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":2.40,"oracle":"IDENTICAL","label_window_unix_ms":[1791538159287,1791538170484],"free_gib":23.14,"per_inst_MiB":64.1}
|
||||
{"tag":"ladder-n20-B32-k1","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":32,"Bmax":353,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":5,"graph_s":0.0242,"state_alloc_s":0.0011,"label_s_per_pass":2.370587,"labels_per_s":14154479.6,"labels_per_s_per_inst":442327.5,"ns_per_label_per_inst":2260.77,"merkle_s":0.004549,"prove_s":0.003840,"verify_all_s":0.0058,"accepted":32,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":2.41,"oracle":"IDENTICAL","label_window_unix_ms":[1791538173222,1791538185082],"free_gib":23.14,"per_inst_MiB":64.1}
|
||||
{"tag":"ladder-n20-B128-k2","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":128,"Bmax":353,"layout":"soa","kernel":"k2","k":64,"wrong_edge":0,"passes":7,"graph_s":0.0240,"state_alloc_s":0.0014,"label_s_per_pass":1.442714,"labels_per_s":93031413.9,"labels_per_s_per_inst":726807.9,"ns_per_label_per_inst":1375.88,"merkle_s":0.017440,"prove_s":0.010995,"verify_all_s":0.0195,"accepted":128,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":6.24,"oracle":"IDENTICAL","label_window_unix_ms":[1791538187818,1791538197925],"free_gib":23.14,"per_inst_MiB":64.1}
|
||||
{"tag":"ladder-n20-B128-k1","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":128,"Bmax":353,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":5,"graph_s":0.0243,"state_alloc_s":0.0015,"label_s_per_pass":2.398947,"labels_per_s":55948600.3,"labels_per_s_per_inst":437098.4,"ns_per_label_per_inst":2287.81,"merkle_s":0.017464,"prove_s":0.011916,"verify_all_s":0.0192,"accepted":128,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":6.17,"oracle":"IDENTICAL","label_window_unix_ms":[1791538204552,1791538216547],"free_gib":23.14,"per_inst_MiB":64.1}
|
||||
{"tag":"diag-n14-k1","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":14,"N":16384,"inst_MiB":0.5,"B":20838,"Bmax":20838,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":287,"graph_s":0.0011,"state_alloc_s":0.0124,"label_s_per_pass":0.069711,"labels_per_s":4897508138.0,"labels_per_s_per_inst":235027.7,"ns_per_label_per_inst":4254.82,"merkle_s":0.044716,"prove_s":1.091650,"verify_all_s":1.9567,"accepted":20838,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":12.77,"oracle":"IDENTICAL","label_window_unix_ms":[1791538223095,1791538243109],"free_gib":23.14,"per_inst_MiB":1.1}
|
||||
{"tag":"diag-n16-k1","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":16,"N":65536,"inst_MiB":2.0,"B":5530,"Bmax":5530,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":132,"graph_s":0.0024,"state_alloc_s":0.1885,"label_s_per_pass":0.152132,"labels_per_s":2382239545.4,"labels_per_s_per_inst":430784.7,"ns_per_label_per_inst":2321.35,"merkle_s":0.046818,"prove_s":0.343418,"verify_all_s":0.5917,"accepted":5530,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":13.62,"oracle":"IDENTICAL","label_window_unix_ms":[1791538259789,1791538279871],"free_gib":23.14,"per_inst_MiB":4.1}
|
||||
{"tag":"diag-n18-k1","gpu":"NVIDIA GeForce RTX 4090","sm":"8.9","sms":128,"encoding":"B3P1","n":18,"N":262144,"inst_MiB":8.0,"B":1407,"Bmax":1407,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":34,"graph_s":0.0067,"state_alloc_s":0.1751,"label_s_per_pass":0.601714,"labels_per_s":612976879.2,"labels_per_s_per_inst":435662.3,"ns_per_label_per_inst":2295.36,"merkle_s":0.047299,"prove_s":0.098035,"verify_all_s":0.1728,"accepted":1407,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":14.42,"oracle":"IDENTICAL","label_window_unix_ms":[1791538295105,1791538315564],"free_gib":23.14,"per_inst_MiB":16.1}
|
||||
0
docs/analysis/mhpow/b3/rows/rtx4090-r1/stderr.log
Normal file
0
docs/analysis/mhpow/b3/rows/rtx4090-r1/stderr.log
Normal file
5
docs/analysis/mhpow/b3/rows/rtx5090-b1/cpu.jsonl
Normal file
5
docs/analysis/mhpow/b3/rows/rtx5090-b1/cpu.jsonl
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{"mode":"cpu_time","encoding":"B1","impl":"C port, portable BLAKE2b","n":20,"N":1048576,"k":64,"threads":1,"graph_s_single_thread":0.523,"label_s_mean":0.2823,"merkle_s_mean":0.2621,"prove_s_mean":0.000172,"verify_s_mean":0.000903,"wall_s":0.554,"labels_per_s_per_instance":3714159.6,"labels_per_s_all":1892158.4,"accepted":1}
|
||||
{"mode":"cpu_time","encoding":"B1","impl":"C port, portable BLAKE2b","n":22,"N":4194304,"k":64,"threads":1,"graph_s_single_thread":2.059,"label_s_mean":1.2048,"merkle_s_mean":1.0615,"prove_s_mean":0.000215,"verify_s_mean":0.001018,"wall_s":2.301,"labels_per_s_per_instance":3481409.4,"labels_per_s_all":1822422.8,"accepted":1}
|
||||
{"mode":"cpu_time","encoding":"B1","impl":"C port, portable BLAKE2b","n":24,"N":16777216,"k":64,"threads":1,"graph_s_single_thread":8.284,"label_s_mean":4.9108,"merkle_s_mean":4.2930,"prove_s_mean":0.000254,"verify_s_mean":0.001082,"wall_s":9.337,"labels_per_s_per_instance":3416412.1,"labels_per_s_all":1796877.3,"accepted":1}
|
||||
{"mode":"cpu_time","encoding":"B1","impl":"C port, portable BLAKE2b","n":20,"N":1048576,"k":64,"threads":26,"graph_s_single_thread":0.515,"label_s_mean":0.2851,"merkle_s_mean":0.2651,"prove_s_mean":0.000175,"verify_s_mean":0.000929,"wall_s":0.787,"labels_per_s_per_instance":3678200.1,"labels_per_s_all":34653203.8,"accepted":26}
|
||||
{"mode":"cpu_time","encoding":"B1","impl":"C port, portable BLAKE2b","n":22,"N":4194304,"k":64,"threads":26,"graph_s_single_thread":2.065,"label_s_mean":1.2021,"merkle_s_mean":1.0632,"prove_s_mean":0.000235,"verify_s_mean":0.001000,"wall_s":3.196,"labels_per_s_per_instance":3489061.0,"labels_per_s_all":34117134.4,"accepted":26}
|
||||
1
docs/analysis/mhpow/b3/rows/rtx5090-b1/idle.json
Normal file
1
docs/analysis/mhpow/b3/rows/rtx5090-b1/idle.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"idle_window_unix_ms":[1791538470000,1791538500000]}
|
||||
15
docs/analysis/mhpow/b3/rows/rtx5090-b1/known-failed-b1.log
Normal file
15
docs/analysis/mhpow/b3/rows/rtx5090-b1/known-failed-b1.log
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{"kat":4,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
{"kat":8,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
{"kat":12,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
{"kat":16,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
{"kat":20,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
CASE b1_kat_port PASS
|
||||
{"tag":"known-failed-b1","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B1","n":12,"N":4096,"inst_MiB":0.1,"B":96,"Bmax":93706,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":1,"passes":1,"graph_s":0.0043,"state_alloc_s":0.0008,"label_s_per_pass":0.005726,"labels_per_s":68669142.3,"labels_per_s_per_inst":715303.6,"ns_per_label_per_inst":1398.01,"merkle_s":0.000138,"prove_s":0.009103,"verify_all_s":0.0001,"accepted":0,"checked":4,"lab_bad_inst":4,"tree_bad_inst":4,"root_bad":4,"proof_bad":4,"b1_kat_instance0":0,"check_s":0.03,"oracle":"MISMATCH","label_window_unix_ms":[1791539079246,1791539079252],"free_gib":30.86,"per_inst_MiB":0.3,"proof_bytes_inst0":79981}
|
||||
CASE known_failed_wrong_edge_b1 PASS (oracle fired)
|
||||
{"tag":"known-finished-b1-n8","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B1","n":8,"N":256,"inst_MiB":0.0,"B":96,"Bmax":446484,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":1,"graph_s":0.0025,"state_alloc_s":0.0004,"label_s_per_pass":0.000464,"labels_per_s":52932662.9,"labels_per_s_per_inst":551381.9,"ns_per_label_per_inst":1813.62,"merkle_s":0.000085,"prove_s":0.006601,"verify_all_s":0.0051,"accepted":96,"checked":4,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":0.00,"oracle":"IDENTICAL","label_window_unix_ms":[1791539079670,1791539079670],"free_gib":30.86,"per_inst_MiB":0.1,"proof_bytes_inst0":55405}
|
||||
CASE known_finished_b1_n8 PASS
|
||||
{"tag":"known-finished-b1-n12","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B1","n":12,"N":4096,"inst_MiB":0.1,"B":96,"Bmax":93706,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":1,"graph_s":0.0043,"state_alloc_s":0.0007,"label_s_per_pass":0.005717,"labels_per_s":68775219.1,"labels_per_s_per_inst":716408.5,"ns_per_label_per_inst":1395.85,"merkle_s":0.000138,"prove_s":0.008832,"verify_all_s":0.0042,"accepted":96,"checked":4,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":0.04,"oracle":"IDENTICAL","label_window_unix_ms":[1791539080051,1791539080057],"free_gib":30.86,"per_inst_MiB":0.3,"proof_bytes_inst0":79981}
|
||||
CASE known_finished_b1_n12 PASS
|
||||
{"tag":"known-finished-b1-n16","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B1","n":16,"N":65536,"inst_MiB":2.0,"B":96,"Bmax":7457,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":1,"graph_s":0.0073,"state_alloc_s":0.0009,"label_s_per_pass":0.091218,"labels_per_s":68971954.3,"labels_per_s_per_inst":718457.9,"ns_per_label_per_inst":1391.87,"merkle_s":0.000633,"prove_s":0.011245,"verify_all_s":0.0072,"accepted":96,"checked":4,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":0.47,"oracle":"IDENTICAL","label_window_unix_ms":[1791539080484,1791539080576],"free_gib":30.86,"per_inst_MiB":4.1,"proof_bytes_inst0":104557}
|
||||
CASE known_finished_b1_n16 PASS
|
||||
RESULT test_known_failed_b1 PASS
|
||||
16
docs/analysis/mhpow/b3/rows/rtx5090-b1/meta.txt
Normal file
16
docs/analysis/mhpow/b3/rows/rtx5090-b1/meta.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
label=rtx5090-b1
|
||||
encoding=B1 (tools/mhpow/b1 at build-6 09:26Z: params.py d47b8ff5, drsample.py 4169a5fc, mtp.py c0feed31)
|
||||
src_id_b1=d672d3839ebb45e5
|
||||
2026-10-09T09:34:29Z
|
||||
model name : AMD EPYC 7K62 48-Core Processor
|
||||
nproc=192 cgroup_cpus=26
|
||||
7.79 12.11 23.04 7/6975 2532
|
||||
name, driver_version, vbios_version, power.limit [W], power.default_limit [W], clocks.max.sm [MHz], clocks.max.memory [MHz], memory.total [MiB], pcie.link.gen.current, pcie.link.width.current
|
||||
NVIDIA GeForce RTX 5090, 580.126.09, 98.02.2E.80.39, 480.00 W, 600.00 W, 3105 MHz, 14001 MHz, 32607 MiB, 4, 16
|
||||
Build cuda_12.8.r12.8/compiler.35583870_0
|
||||
{"kat":4,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
{"kat":8,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
{"kat":12,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
{"kat":16,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
{"kat":20,"chi":1,"graph":1,"labels":1,"tau":1,"proof_sha":1,"proof_bin":1,"verify":1,"verdict":"IDENTICAL"}
|
||||
11.67 12.19 17.72 7/7006 3389
|
||||
575
docs/analysis/mhpow/b3/rows/rtx5090-b1/power.csv
Normal file
575
docs/analysis/mhpow/b3/rows/rtx5090-b1/power.csv
Normal file
|
|
@ -0,0 +1,575 @@
|
|||
2026/10/09 09:34:30.706, 6.64, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:31.736, 7.91, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:32.737, 5.75, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:33.738, 5.94, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:34.738, 5.98, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:35.739, 6.31, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:36.740, 5.64, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:37.741, 5.18, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:38.741, 5.49, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:39.741, 5.46, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:40.742, 5.78, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:41.743, 5.94, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:42.743, 6.07, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:43.744, 6.11, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:44.744, 6.27, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:45.745, 6.50, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:46.745, 7.64, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:47.746, 7.00, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:48.746, 6.76, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:49.747, 6.13, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:50.747, 6.38, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:51.747, 6.44, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:52.748, 6.02, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:53.748, 6.21, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:54.749, 5.62, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:55.749, 5.48, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:56.750, 5.61, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:57.750, 5.60, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:58.751, 5.99, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:34:59.751, 5.39, 0, 0, 195, 405, 1, 40
|
||||
2026/10/09 09:35:00.752, 5.39, 0, 0, 195, 405, 2, 40
|
||||
2026/10/09 09:35:01.787, 54.46, 100, 1, 2917, 13801, 31044, 43
|
||||
2026/10/09 09:35:02.788, 117.73, 100, 2, 2917, 13801, 31044, 43
|
||||
2026/10/09 09:35:03.788, 118.21, 100, 2, 2917, 13801, 31044, 43
|
||||
2026/10/09 09:35:04.789, 118.04, 100, 2, 2917, 13801, 31044, 43
|
||||
2026/10/09 09:35:05.789, 118.12, 100, 2, 2917, 13801, 31044, 43
|
||||
2026/10/09 09:35:06.789, 118.32, 100, 2, 2917, 13801, 31044, 43
|
||||
2026/10/09 09:35:07.790, 118.12, 100, 2, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:35:08.790, 118.47, 100, 2, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:35:09.791, 118.66, 100, 2, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:35:10.792, 118.95, 100, 2, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:35:11.792, 118.65, 100, 2, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:35:12.792, 118.73, 100, 2, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:35:13.793, 118.39, 100, 2, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:35:14.794, 118.43, 100, 2, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:35:15.794, 118.76, 100, 2, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:35:16.795, 118.75, 100, 2, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:35:17.795, 119.08, 100, 2, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:35:18.796, 118.78, 100, 1, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:35:19.796, 118.96, 100, 2, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:35:20.797, 118.95, 100, 2, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:35:21.797, 118.67, 90, 40, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:35:22.798, 81.72, 0, 0, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:35:23.798, 68.77, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:24.800, 58.05, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:25.800, 58.13, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:26.800, 58.30, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:27.801, 58.73, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:28.801, 58.23, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:29.802, 58.52, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:30.802, 58.25, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:31.802, 58.30, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:32.803, 58.31, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:33.803, 57.78, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:34.803, 58.05, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:35.804, 59.08, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:36.806, 58.38, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:37.807, 58.67, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:38.807, 51.06, 0, 0, 502, 810, 31044, 42
|
||||
2026/10/09 09:35:39.808, 28.27, 0, 0, 427, 810, 31044, 42
|
||||
2026/10/09 09:35:40.809, 15.59, 0, 0, 262, 405, 31044, 42
|
||||
2026/10/09 09:35:41.809, 12.99, 0, 0, 195, 405, 31044, 42
|
||||
2026/10/09 09:35:42.809, 7.29, 0, 0, 195, 405, 31044, 42
|
||||
2026/10/09 09:35:43.810, 14.20, 0, 0, 2460, 13801, 31044, 43
|
||||
2026/10/09 09:35:44.810, 65.39, 15, 0, 2880, 13801, 31044, 44
|
||||
2026/10/09 09:35:45.811, 86.94, 46, 1, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:35:46.812, 87.16, 46, 1, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:35:47.813, 84.60, 38, 1, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:35:48.814, 82.12, 0, 0, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:35:49.814, 63.34, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:50.815, 58.46, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:51.816, 57.97, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:52.816, 58.36, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:35:53.818, 63.52, 0, 0, 2542, 14001, 510, 44
|
||||
2026/10/09 09:35:54.844, 94.53, 100, 0, 2902, 13801, 31014, 45
|
||||
2026/10/09 09:35:55.872, 105.84, 100, 0, 2902, 13801, 31014, 45
|
||||
2026/10/09 09:35:56.896, 105.97, 100, 0, 2902, 13801, 31014, 45
|
||||
2026/10/09 09:35:57.918, 106.31, 100, 0, 2902, 13801, 31014, 45
|
||||
2026/10/09 09:35:58.936, 106.44, 100, 0, 2902, 13801, 31014, 45
|
||||
2026/10/09 09:35:59.953, 106.57, 100, 0, 2902, 13801, 31014, 45
|
||||
2026/10/09 09:36:00.968, 107.12, 100, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:01.980, 107.12, 100, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:02.992, 107.15, 100, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:04.002, 106.89, 100, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:05.010, 106.91, 100, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:06.018, 106.82, 100, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:07.026, 107.11, 100, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:08.033, 107.32, 100, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:09.038, 107.10, 100, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:10.044, 107.10, 100, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:11.049, 107.59, 100, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:12.053, 107.25, 100, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:13.057, 107.44, 100, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:14.061, 107.48, 100, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:15.064, 107.43, 100, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:16.067, 107.40, 100, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:17.070, 107.36, 100, 0, 2902, 13801, 31014, 47
|
||||
2026/10/09 09:36:18.074, 107.43, 100, 0, 2902, 13801, 31014, 47
|
||||
2026/10/09 09:36:19.076, 123.11, 100, 0, 2835, 13801, 31014, 47
|
||||
2026/10/09 09:36:20.078, 103.07, 0, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:21.081, 79.11, 0, 0, 2580, 13801, 31014, 45
|
||||
2026/10/09 09:36:22.083, 59.35, 0, 0, 2542, 13801, 31014, 45
|
||||
2026/10/09 09:36:23.085, 59.54, 0, 0, 2542, 13801, 31014, 45
|
||||
2026/10/09 09:36:24.086, 59.62, 0, 0, 2542, 13801, 31014, 45
|
||||
2026/10/09 09:36:25.088, 59.30, 0, 0, 2542, 13801, 31014, 45
|
||||
2026/10/09 09:36:26.088, 59.23, 0, 0, 2542, 13801, 31014, 45
|
||||
2026/10/09 09:36:27.089, 59.39, 0, 0, 2542, 13801, 31014, 45
|
||||
2026/10/09 09:36:28.089, 59.09, 0, 0, 2542, 13801, 31014, 45
|
||||
2026/10/09 09:36:29.089, 59.08, 0, 0, 2542, 13801, 31014, 45
|
||||
2026/10/09 09:36:30.090, 59.74, 0, 0, 2542, 13801, 31014, 45
|
||||
2026/10/09 09:36:31.090, 59.12, 0, 0, 2542, 13801, 31014, 45
|
||||
2026/10/09 09:36:32.091, 59.73, 0, 0, 2542, 13801, 31014, 45
|
||||
2026/10/09 09:36:33.091, 59.91, 0, 0, 2542, 13801, 31014, 45
|
||||
2026/10/09 09:36:34.091, 59.81, 0, 0, 2542, 13801, 31014, 45
|
||||
2026/10/09 09:36:35.092, 60.02, 0, 0, 2542, 13801, 31014, 45
|
||||
2026/10/09 09:36:36.092, 52.67, 0, 0, 502, 810, 31014, 45
|
||||
2026/10/09 09:36:37.093, 26.96, 0, 0, 427, 810, 31014, 44
|
||||
2026/10/09 09:36:38.093, 18.37, 0, 0, 270, 405, 31014, 44
|
||||
2026/10/09 09:36:39.093, 11.11, 0, 0, 195, 405, 31014, 44
|
||||
2026/10/09 09:36:40.094, 9.13, 0, 0, 195, 405, 31014, 44
|
||||
2026/10/09 09:36:41.094, 6.49, 0, 0, 195, 405, 31014, 44
|
||||
2026/10/09 09:36:42.094, 60.25, 46, 1, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:43.095, 87.13, 46, 1, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:44.095, 85.67, 11, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:45.095, 89.14, 46, 1, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:46.096, 84.78, 0, 0, 2902, 13801, 31014, 46
|
||||
2026/10/09 09:36:47.100, 79.81, 0, 0, 2580, 13801, 31014, 46
|
||||
2026/10/09 09:36:48.101, 59.13, 0, 0, 2542, 13801, 31014, 45
|
||||
2026/10/09 09:36:49.101, 59.24, 0, 0, 2542, 13801, 31014, 46
|
||||
2026/10/09 09:36:50.102, 59.84, 0, 0, 2542, 13801, 31014, 46
|
||||
2026/10/09 09:36:51.102, 59.71, 0, 0, 2542, 13801, 31014, 46
|
||||
2026/10/09 09:36:52.102, 59.91, 0, 0, 2542, 13801, 31014, 46
|
||||
2026/10/09 09:36:53.104, 60.21, 0, 0, 2542, 13801, 31014, 46
|
||||
2026/10/09 09:36:54.105, 60.28, 0, 0, 2542, 13801, 31014, 46
|
||||
2026/10/09 09:36:55.105, 70.33, 79, 0, 2692, 13801, 30282, 46
|
||||
2026/10/09 09:36:56.105, 103.78, 100, 0, 2902, 13801, 30282, 47
|
||||
2026/10/09 09:36:57.106, 105.13, 100, 0, 2902, 13801, 30282, 47
|
||||
2026/10/09 09:36:58.106, 105.37, 100, 0, 2902, 13801, 30282, 47
|
||||
2026/10/09 09:36:59.107, 105.49, 100, 0, 2902, 13801, 30282, 47
|
||||
2026/10/09 09:37:00.108, 105.29, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:01.110, 105.36, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:02.112, 105.61, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:03.113, 105.45, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:04.115, 105.50, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:05.116, 105.57, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:06.117, 105.23, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:07.118, 105.38, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:08.120, 105.40, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:09.120, 105.83, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:10.120, 106.09, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:11.121, 106.34, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:12.121, 106.62, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:13.121, 106.77, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:14.122, 106.78, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:15.122, 106.35, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:16.122, 106.50, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:17.123, 106.61, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:18.123, 106.39, 100, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:19.124, 106.71, 100, 0, 2902, 13801, 30282, 49
|
||||
2026/10/09 09:37:20.124, 116.23, 0, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:21.124, 88.97, 0, 0, 2902, 13801, 30282, 48
|
||||
2026/10/09 09:37:22.125, 77.67, 0, 0, 2542, 13801, 30282, 47
|
||||
2026/10/09 09:37:23.125, 65.46, 0, 0, 2542, 13801, 30282, 47
|
||||
2026/10/09 09:37:24.126, 64.89, 0, 0, 2542, 13801, 30282, 47
|
||||
2026/10/09 09:37:25.126, 63.99, 0, 0, 2542, 13801, 30282, 47
|
||||
2026/10/09 09:37:26.126, 63.61, 0, 0, 2542, 13801, 30282, 47
|
||||
2026/10/09 09:37:27.126, 63.59, 0, 0, 2542, 13801, 30282, 47
|
||||
2026/10/09 09:37:28.127, 64.28, 0, 0, 2542, 13801, 30282, 47
|
||||
2026/10/09 09:37:29.127, 64.22, 0, 0, 2542, 13801, 30282, 47
|
||||
2026/10/09 09:37:30.127, 64.58, 0, 0, 2542, 13801, 30282, 47
|
||||
2026/10/09 09:37:31.128, 65.12, 0, 0, 2542, 13801, 30282, 47
|
||||
2026/10/09 09:37:32.128, 65.21, 0, 0, 2542, 13801, 30282, 47
|
||||
2026/10/09 09:37:33.128, 65.15, 0, 0, 2542, 13801, 30282, 46
|
||||
2026/10/09 09:37:34.129, 63.94, 0, 0, 2542, 13801, 30282, 46
|
||||
2026/10/09 09:37:35.129, 63.72, 0, 0, 2542, 13801, 30282, 46
|
||||
2026/10/09 09:37:36.129, 63.97, 0, 0, 2542, 13801, 30282, 46
|
||||
2026/10/09 09:37:37.130, 38.19, 0, 0, 420, 810, 30282, 45
|
||||
2026/10/09 09:37:38.130, 30.69, 0, 0, 420, 810, 30282, 45
|
||||
2026/10/09 09:37:39.131, 20.11, 0, 0, 255, 405, 30282, 45
|
||||
2026/10/09 09:37:40.131, 40.60, 34, 1, 2542, 13801, 30282, 46
|
||||
2026/10/09 09:37:41.131, 67.37, 10, 0, 2542, 13801, 30282, 46
|
||||
2026/10/09 09:37:42.132, 63.74, 9, 0, 2542, 13801, 30282, 46
|
||||
2026/10/09 09:37:43.132, 63.90, 20, 1, 2542, 13801, 30282, 46
|
||||
2026/10/09 09:37:44.133, 68.41, 24, 1, 2542, 13801, 30282, 46
|
||||
2026/10/09 09:37:45.134, 63.85, 0, 0, 2542, 13801, 30282, 45
|
||||
2026/10/09 09:37:46.134, 63.01, 0, 0, 2542, 13801, 30282, 45
|
||||
2026/10/09 09:37:47.135, 63.12, 0, 0, 2542, 13801, 30282, 45
|
||||
2026/10/09 09:37:48.135, 62.73, 0, 0, 2542, 13801, 30282, 45
|
||||
2026/10/09 09:37:49.135, 62.60, 0, 0, 2542, 13801, 30282, 45
|
||||
2026/10/09 09:37:50.136, 62.75, 0, 0, 2542, 13801, 30282, 45
|
||||
2026/10/09 09:37:51.136, 63.04, 0, 0, 2542, 13801, 30282, 45
|
||||
2026/10/09 09:37:52.137, 63.22, 0, 0, 2542, 13801, 30282, 45
|
||||
2026/10/09 09:37:53.138, 64.31, 0, 0, 2542, 13801, 30282, 45
|
||||
2026/10/09 09:37:54.138, 64.34, 0, 0, 2542, 13801, 30282, 45
|
||||
2026/10/09 09:37:55.139, 63.70, 0, 0, 2542, 13801, 30282, 45
|
||||
2026/10/09 09:37:56.139, 63.02, 0, 0, 2542, 13801, 30282, 45
|
||||
2026/10/09 09:37:57.139, 61.78, 0, 0, 2542, 13801, 30282, 45
|
||||
2026/10/09 09:37:58.140, 61.72, 0, 0, 2542, 13801, 30282, 45
|
||||
2026/10/09 09:37:59.140, 62.46, 0, 0, 2542, 13801, 30282, 45
|
||||
2026/10/09 09:38:00.141, 62.69, 0, 0, 2542, 13801, 30282, 44
|
||||
2026/10/09 09:38:01.142, 37.19, 0, 0, 420, 810, 30282, 44
|
||||
2026/10/09 09:38:02.142, 32.83, 0, 0, 420, 810, 30282, 43
|
||||
2026/10/09 09:38:03.143, 20.57, 0, 0, 255, 405, 30282, 43
|
||||
2026/10/09 09:38:04.143, 17.54, 0, 0, 195, 405, 30282, 43
|
||||
2026/10/09 09:38:05.144, 11.94, 0, 0, 195, 405, 30282, 43
|
||||
2026/10/09 09:38:06.144, 9.13, 0, 0, 195, 405, 30282, 43
|
||||
2026/10/09 09:38:07.145, 7.04, 0, 0, 195, 405, 30282, 43
|
||||
2026/10/09 09:38:08.145, 7.31, 0, 0, 195, 405, 30282, 43
|
||||
2026/10/09 09:38:09.146, 7.71, 0, 0, 195, 405, 30282, 43
|
||||
2026/10/09 09:38:10.146, 6.38, 0, 0, 195, 405, 30282, 43
|
||||
2026/10/09 09:38:11.147, 14.91, 100, 93, 930, 810, 2, 43
|
||||
2026/10/09 09:38:12.147, 111.96, 100, 2, 2902, 13801, 31044, 46
|
||||
2026/10/09 09:38:13.148, 127.65, 100, 1, 2902, 13801, 31044, 46
|
||||
2026/10/09 09:38:14.148, 127.62, 100, 2, 2902, 13801, 31044, 46
|
||||
2026/10/09 09:38:15.148, 127.49, 100, 2, 2902, 13801, 31044, 46
|
||||
2026/10/09 09:38:16.149, 127.99, 100, 2, 2902, 13801, 31044, 46
|
||||
2026/10/09 09:38:17.149, 127.46, 100, 2, 2902, 13801, 31044, 46
|
||||
2026/10/09 09:38:18.150, 127.76, 100, 2, 2902, 13801, 31044, 46
|
||||
2026/10/09 09:38:19.150, 128.28, 100, 2, 2902, 13801, 31044, 46
|
||||
2026/10/09 09:38:20.153, 127.71, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:21.153, 128.05, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:22.154, 128.17, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:23.154, 128.00, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:24.154, 128.42, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:25.155, 128.42, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:26.155, 128.30, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:27.156, 128.67, 100, 1, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:28.156, 128.79, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:29.157, 131.04, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:30.157, 132.09, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:31.158, 132.60, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:32.158, 147.45, 0, 0, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:33.159, 87.84, 0, 0, 2902, 13801, 31044, 46
|
||||
2026/10/09 09:38:34.159, 107.99, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:35.160, 126.15, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:36.160, 126.57, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:37.161, 126.36, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:38.161, 127.07, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:39.162, 127.66, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:40.162, 127.34, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:41.163, 126.51, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:42.163, 125.89, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:43.163, 125.68, 100, 1, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:44.164, 126.18, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:45.164, 126.18, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:46.165, 126.10, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:47.165, 126.03, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:48.165, 126.17, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:49.166, 126.23, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:50.166, 125.43, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:51.167, 125.10, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:52.167, 126.14, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:53.168, 126.37, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:54.168, 127.08, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:55.168, 125.85, 100, 2, 2902, 13801, 31044, 47
|
||||
2026/10/09 09:38:56.169, 118.07, 0, 0, 2902, 13801, 31044, 46
|
||||
2026/10/09 09:38:57.169, 86.36, 0, 0, 2902, 13801, 31044, 46
|
||||
2026/10/09 09:38:58.169, 67.52, 0, 0, 2542, 13801, 31044, 45
|
||||
2026/10/09 09:38:59.170, 63.17, 0, 0, 2542, 13801, 31044, 45
|
||||
2026/10/09 09:39:00.170, 63.57, 0, 0, 2542, 13801, 31044, 45
|
||||
2026/10/09 09:39:01.171, 63.27, 0, 0, 2542, 13801, 31044, 45
|
||||
2026/10/09 09:39:02.171, 64.00, 0, 0, 2542, 13801, 31044, 45
|
||||
2026/10/09 09:39:03.172, 63.61, 0, 0, 2542, 13801, 31044, 45
|
||||
2026/10/09 09:39:04.172, 63.22, 0, 0, 2542, 13801, 31044, 45
|
||||
2026/10/09 09:39:05.173, 63.11, 0, 0, 2542, 13801, 31044, 45
|
||||
2026/10/09 09:39:06.173, 62.54, 0, 0, 2542, 13801, 31044, 45
|
||||
2026/10/09 09:39:07.173, 62.62, 0, 0, 2542, 13801, 31044, 44
|
||||
2026/10/09 09:39:08.174, 62.97, 0, 0, 2542, 13801, 31044, 44
|
||||
2026/10/09 09:39:09.174, 63.05, 0, 0, 2542, 13801, 31044, 44
|
||||
2026/10/09 09:39:10.175, 62.95, 0, 0, 2542, 13801, 31044, 44
|
||||
2026/10/09 09:39:11.175, 63.08, 0, 0, 2542, 13801, 31044, 44
|
||||
2026/10/09 09:39:12.181, 63.15, 0, 0, 2542, 13801, 31044, 44
|
||||
2026/10/09 09:39:13.208, 36.92, 0, 0, 435, 810, 31044, 43
|
||||
2026/10/09 09:39:14.232, 29.23, 0, 0, 435, 810, 31044, 43
|
||||
2026/10/09 09:39:15.253, 18.82, 0, 0, 262, 405, 31044, 43
|
||||
2026/10/09 09:39:16.271, 17.47, 0, 0, 195, 405, 31044, 43
|
||||
2026/10/09 09:39:17.288, 10.34, 0, 0, 195, 405, 31044, 42
|
||||
2026/10/09 09:39:18.302, 11.22, 0, 0, 195, 405, 31044, 42
|
||||
2026/10/09 09:39:19.314, 49.04, 45, 1, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:39:20.326, 89.76, 10, 0, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:39:21.336, 88.25, 46, 1, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:39:22.344, 91.52, 49, 1, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:39:23.352, 87.50, 0, 0, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:39:24.359, 85.26, 0, 0, 2730, 13801, 31044, 44
|
||||
2026/10/09 09:39:25.366, 63.94, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:39:26.372, 63.71, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:39:27.377, 63.20, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:39:28.383, 61.95, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:39:29.388, 67.14, 55, 37, 2542, 14001, 584, 43
|
||||
2026/10/09 09:39:30.391, 96.87, 100, 0, 2902, 13801, 584, 45
|
||||
2026/10/09 09:39:31.395, 105.35, 100, 0, 2902, 13801, 584, 45
|
||||
2026/10/09 09:39:32.398, 105.62, 100, 0, 2902, 13801, 584, 45
|
||||
2026/10/09 09:39:33.402, 105.61, 100, 0, 2902, 13801, 584, 45
|
||||
2026/10/09 09:39:34.404, 105.65, 100, 0, 2902, 13801, 584, 45
|
||||
2026/10/09 09:39:35.407, 105.04, 100, 0, 2902, 13801, 584, 45
|
||||
2026/10/09 09:39:36.409, 104.89, 100, 0, 2902, 13801, 584, 45
|
||||
2026/10/09 09:39:37.412, 104.61, 100, 0, 2902, 13801, 584, 45
|
||||
2026/10/09 09:39:38.414, 104.90, 100, 0, 2902, 13801, 584, 45
|
||||
2026/10/09 09:39:39.417, 105.22, 100, 0, 2902, 13801, 584, 45
|
||||
2026/10/09 09:39:40.419, 94.36, 0, 0, 2902, 13801, 2, 44
|
||||
2026/10/09 09:39:41.421, 96.08, 100, 0, 2902, 13801, 2572, 45
|
||||
2026/10/09 09:39:42.422, 105.14, 100, 0, 2902, 13801, 2572, 45
|
||||
2026/10/09 09:39:43.425, 105.28, 100, 0, 2902, 13801, 2572, 45
|
||||
2026/10/09 09:39:44.426, 105.71, 100, 0, 2902, 13801, 2572, 45
|
||||
2026/10/09 09:39:45.428, 105.87, 100, 0, 2902, 13801, 2572, 45
|
||||
2026/10/09 09:39:46.429, 106.50, 100, 0, 2902, 13801, 2572, 45
|
||||
2026/10/09 09:39:47.430, 107.10, 100, 0, 2902, 13801, 2572, 45
|
||||
2026/10/09 09:39:48.433, 106.96, 100, 0, 2902, 13801, 2572, 45
|
||||
2026/10/09 09:39:49.435, 106.56, 100, 0, 2902, 13801, 2572, 45
|
||||
2026/10/09 09:39:50.436, 105.59, 100, 0, 2902, 13801, 2572, 45
|
||||
2026/10/09 09:39:51.437, 104.71, 100, 0, 2902, 13801, 2572, 45
|
||||
2026/10/09 09:39:52.439, 89.98, 0, 0, 2902, 13801, 2572, 44
|
||||
2026/10/09 09:39:53.441, 84.90, 0, 0, 2722, 13801, 2572, 43
|
||||
2026/10/09 09:39:54.442, 64.71, 0, 0, 2542, 14001, 8728, 43
|
||||
2026/10/09 09:39:55.443, 100.03, 100, 0, 2902, 13801, 8728, 44
|
||||
2026/10/09 09:39:56.445, 110.55, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:39:57.447, 110.36, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:39:58.450, 110.08, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:39:59.451, 109.37, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:40:00.453, 109.35, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:40:01.454, 109.70, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:40:02.456, 109.91, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:40:03.458, 109.97, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:40:04.460, 109.72, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:40:05.461, 111.28, 0, 0, 2887, 13801, 8728, 44
|
||||
2026/10/09 09:40:06.463, 85.88, 0, 0, 2902, 13801, 8728, 44
|
||||
2026/10/09 09:40:07.465, 79.55, 0, 0, 2542, 13801, 8728, 43
|
||||
2026/10/09 09:40:08.467, 62.88, 0, 0, 2542, 13801, 8728, 43
|
||||
2026/10/09 09:40:09.468, 63.27, 0, 0, 2542, 13801, 8728, 43
|
||||
2026/10/09 09:40:10.470, 64.06, 0, 0, 2542, 13801, 8728, 43
|
||||
2026/10/09 09:40:11.471, 65.09, 44, 1, 2542, 13801, 8728, 43
|
||||
2026/10/09 09:40:12.473, 85.28, 0, 0, 2917, 13801, 8728, 43
|
||||
2026/10/09 09:40:13.476, 85.61, 0, 0, 2917, 13801, 8728, 43
|
||||
2026/10/09 09:40:14.477, 73.61, 0, 0, 2550, 13801, 508, 43
|
||||
2026/10/09 09:40:15.479, 320.90, 100, 60, 2565, 13801, 31092, 55
|
||||
2026/10/09 09:40:16.480, 480.67, 100, 60, 2542, 13801, 31092, 56
|
||||
2026/10/09 09:40:17.482, 480.13, 100, 59, 2527, 13801, 31092, 56
|
||||
2026/10/09 09:40:18.484, 480.07, 100, 58, 2527, 13801, 31092, 57
|
||||
2026/10/09 09:40:19.486, 480.09, 100, 58, 2535, 13801, 31092, 57
|
||||
2026/10/09 09:40:20.487, 479.88, 100, 59, 2535, 13801, 31092, 57
|
||||
2026/10/09 09:40:21.489, 479.41, 100, 60, 2542, 13801, 31092, 57
|
||||
2026/10/09 09:40:22.490, 479.90, 100, 60, 2535, 13801, 31092, 57
|
||||
2026/10/09 09:40:23.492, 479.98, 100, 59, 2535, 13801, 31092, 58
|
||||
2026/10/09 09:40:24.493, 480.04, 100, 59, 2535, 13801, 31092, 58
|
||||
2026/10/09 09:40:25.495, 480.16, 100, 59, 2527, 13801, 31092, 58
|
||||
2026/10/09 09:40:26.497, 480.00, 100, 59, 2535, 13801, 31092, 59
|
||||
2026/10/09 09:40:27.499, 479.98, 100, 59, 2535, 13801, 31092, 59
|
||||
2026/10/09 09:40:28.500, 480.17, 100, 59, 2527, 13801, 31092, 59
|
||||
2026/10/09 09:40:29.502, 479.89, 100, 59, 2527, 13801, 31092, 59
|
||||
2026/10/09 09:40:30.503, 479.88, 100, 59, 2527, 13801, 31092, 59
|
||||
2026/10/09 09:40:31.505, 480.00, 100, 59, 2527, 13801, 31092, 60
|
||||
2026/10/09 09:40:32.506, 480.02, 100, 58, 2512, 13801, 31092, 60
|
||||
2026/10/09 09:40:33.508, 479.79, 100, 59, 2505, 13801, 31092, 60
|
||||
2026/10/09 09:40:34.509, 479.94, 100, 59, 2520, 13801, 31092, 61
|
||||
2026/10/09 09:40:35.511, 284.51, 0, 0, 2902, 13801, 31092, 50
|
||||
2026/10/09 09:40:36.512, 90.81, 0, 0, 2902, 13801, 31092, 49
|
||||
2026/10/09 09:40:37.514, 73.50, 0, 0, 2542, 13801, 31092, 48
|
||||
2026/10/09 09:40:38.515, 65.98, 0, 0, 2542, 13801, 31092, 48
|
||||
2026/10/09 09:40:39.516, 65.61, 0, 0, 2542, 13801, 31092, 48
|
||||
2026/10/09 09:40:40.518, 67.59, 37, 1, 2542, 13801, 31092, 48
|
||||
2026/10/09 09:40:41.519, 67.49, 0, 0, 2542, 13801, 31092, 48
|
||||
2026/10/09 09:40:42.521, 65.41, 0, 0, 2542, 13801, 31092, 47
|
||||
2026/10/09 09:40:43.522, 65.10, 0, 0, 2542, 13801, 31092, 47
|
||||
2026/10/09 09:40:44.524, 64.55, 0, 0, 2542, 13801, 31092, 47
|
||||
2026/10/09 09:40:45.525, 64.54, 0, 0, 2542, 13801, 31092, 47
|
||||
2026/10/09 09:40:46.526, 64.65, 0, 0, 2542, 13801, 31092, 47
|
||||
2026/10/09 09:40:47.528, 65.12, 0, 0, 2542, 13801, 31092, 47
|
||||
2026/10/09 09:40:48.529, 65.19, 0, 0, 2542, 13801, 31092, 47
|
||||
2026/10/09 09:40:49.530, 64.31, 0, 0, 2542, 13801, 31092, 47
|
||||
2026/10/09 09:40:50.530, 63.77, 0, 0, 2542, 13801, 31092, 46
|
||||
2026/10/09 09:40:51.530, 63.28, 0, 0, 2542, 13801, 31092, 46
|
||||
2026/10/09 09:40:52.530, 63.48, 0, 0, 2542, 13801, 31092, 46
|
||||
2026/10/09 09:40:53.531, 63.95, 0, 0, 2542, 13801, 31092, 46
|
||||
2026/10/09 09:40:54.531, 64.60, 0, 0, 2542, 13801, 31092, 46
|
||||
2026/10/09 09:40:55.532, 64.97, 0, 0, 2542, 13801, 31092, 46
|
||||
2026/10/09 09:40:56.532, 65.83, 0, 0, 2542, 13801, 31092, 46
|
||||
2026/10/09 09:40:57.533, 65.51, 0, 0, 2542, 13801, 31092, 46
|
||||
2026/10/09 09:40:58.533, 46.88, 36, 1, 2160, 13801, 31092, 46
|
||||
2026/10/09 09:40:59.534, 68.13, 37, 1, 2542, 13801, 31092, 46
|
||||
2026/10/09 09:41:00.534, 67.97, 33, 1, 2542, 13801, 31092, 46
|
||||
2026/10/09 09:41:01.535, 65.63, 0, 0, 2542, 13801, 31092, 46
|
||||
2026/10/09 09:41:02.535, 64.04, 0, 0, 2542, 13801, 31092, 45
|
||||
2026/10/09 09:41:03.535, 63.91, 0, 0, 2542, 13801, 31092, 45
|
||||
2026/10/09 09:41:04.536, 64.09, 0, 0, 2542, 13801, 31092, 45
|
||||
2026/10/09 09:41:05.536, 64.50, 0, 0, 2550, 13801, 1, 45
|
||||
2026/10/09 09:41:06.537, 175.29, 100, 48, 2752, 13801, 31088, 53
|
||||
2026/10/09 09:41:07.537, 459.95, 100, 47, 2737, 13801, 31088, 58
|
||||
2026/10/09 09:41:08.537, 454.86, 100, 48, 2745, 13801, 31088, 55
|
||||
2026/10/09 09:41:09.538, 460.96, 100, 47, 2737, 13801, 31088, 59
|
||||
2026/10/09 09:41:10.538, 456.24, 100, 48, 2745, 13801, 31088, 56
|
||||
2026/10/09 09:41:11.538, 461.29, 100, 47, 2737, 13801, 31088, 60
|
||||
2026/10/09 09:41:12.539, 456.60, 100, 48, 2737, 13801, 31088, 57
|
||||
2026/10/09 09:41:13.541, 460.51, 100, 48, 2745, 13801, 31088, 60
|
||||
2026/10/09 09:41:14.541, 458.23, 100, 48, 2745, 13801, 31088, 58
|
||||
2026/10/09 09:41:15.541, 460.86, 100, 48, 2737, 13801, 31088, 61
|
||||
2026/10/09 09:41:16.542, 458.03, 100, 47, 2737, 13801, 31088, 58
|
||||
2026/10/09 09:41:17.542, 460.49, 100, 48, 2745, 13801, 31088, 61
|
||||
2026/10/09 09:41:18.542, 460.16, 100, 47, 2730, 13801, 31088, 59
|
||||
2026/10/09 09:41:19.543, 460.32, 100, 48, 2737, 13801, 31088, 61
|
||||
2026/10/09 09:41:20.546, 454.14, 100, 48, 2737, 13801, 31088, 61
|
||||
2026/10/09 09:41:21.546, 460.31, 100, 47, 2737, 13801, 31088, 60
|
||||
2026/10/09 09:41:22.547, 460.64, 100, 48, 2745, 13801, 31088, 62
|
||||
2026/10/09 09:41:23.547, 460.12, 100, 47, 2730, 13801, 31088, 60
|
||||
2026/10/09 09:41:24.547, 459.73, 100, 48, 2730, 13801, 31088, 62
|
||||
2026/10/09 09:41:25.548, 462.76, 100, 47, 2722, 13801, 31088, 63
|
||||
2026/10/09 09:41:26.548, 396.10, 0, 0, 2880, 13801, 31088, 54
|
||||
2026/10/09 09:41:27.548, 93.83, 0, 0, 2902, 13801, 31088, 51
|
||||
2026/10/09 09:41:28.549, 93.76, 0, 0, 2902, 13801, 31088, 51
|
||||
2026/10/09 09:41:29.549, 91.43, 0, 0, 2902, 13801, 31088, 51
|
||||
2026/10/09 09:41:30.551, 74.27, 0, 0, 2542, 13801, 31088, 50
|
||||
2026/10/09 09:41:31.552, 66.28, 0, 0, 2542, 13801, 31088, 49
|
||||
2026/10/09 09:41:32.552, 66.74, 0, 0, 2542, 13801, 31088, 49
|
||||
2026/10/09 09:41:33.553, 67.17, 0, 0, 2542, 13801, 31088, 49
|
||||
2026/10/09 09:41:34.553, 66.25, 0, 0, 2542, 13801, 31088, 49
|
||||
2026/10/09 09:41:35.554, 65.93, 0, 0, 2542, 13801, 31088, 49
|
||||
2026/10/09 09:41:36.556, 65.23, 0, 0, 2542, 13801, 31088, 48
|
||||
2026/10/09 09:41:37.557, 65.28, 0, 0, 2542, 13801, 31088, 48
|
||||
2026/10/09 09:41:38.559, 65.38, 0, 0, 2542, 13801, 31088, 48
|
||||
2026/10/09 09:41:39.560, 65.73, 0, 0, 2542, 13801, 31088, 48
|
||||
2026/10/09 09:41:40.562, 66.49, 0, 0, 2542, 13801, 31088, 48
|
||||
2026/10/09 09:41:41.563, 67.03, 0, 0, 2542, 13801, 31088, 48
|
||||
2026/10/09 09:41:42.565, 66.68, 0, 0, 2542, 13801, 31088, 48
|
||||
2026/10/09 09:41:43.566, 66.08, 0, 0, 2542, 13801, 31088, 47
|
||||
2026/10/09 09:41:44.568, 65.02, 0, 0, 2542, 13801, 31088, 47
|
||||
2026/10/09 09:41:45.569, 39.50, 0, 0, 427, 810, 31088, 46
|
||||
2026/10/09 09:41:46.570, 27.48, 0, 0, 382, 810, 31088, 46
|
||||
2026/10/09 09:41:47.572, 20.71, 0, 0, 232, 405, 31088, 46
|
||||
2026/10/09 09:41:48.573, 17.02, 0, 0, 195, 405, 31088, 46
|
||||
2026/10/09 09:41:49.575, 12.73, 0, 0, 195, 405, 31088, 46
|
||||
2026/10/09 09:41:50.576, 29.95, 9, 0, 2542, 13801, 31088, 46
|
||||
2026/10/09 09:41:51.577, 66.31, 45, 1, 2542, 13801, 31088, 46
|
||||
2026/10/09 09:41:52.579, 88.71, 47, 1, 2902, 13801, 31088, 47
|
||||
2026/10/09 09:41:53.580, 91.56, 45, 1, 2902, 13801, 31088, 47
|
||||
2026/10/09 09:41:54.581, 91.75, 45, 1, 2902, 13801, 31088, 47
|
||||
2026/10/09 09:41:55.583, 89.73, 0, 0, 2902, 13801, 31088, 47
|
||||
2026/10/09 09:41:56.584, 86.75, 0, 0, 2722, 13801, 31088, 47
|
||||
2026/10/09 09:41:57.585, 64.56, 0, 0, 2542, 13801, 31088, 46
|
||||
2026/10/09 09:41:58.587, 63.62, 0, 0, 2542, 13801, 31088, 46
|
||||
2026/10/09 09:41:59.588, 63.60, 0, 0, 2542, 13801, 31088, 46
|
||||
2026/10/09 09:42:00.590, 89.87, 88, 23, 2730, 13801, 31086, 49
|
||||
2026/10/09 09:42:01.591, 336.23, 100, 26, 2895, 13801, 31086, 53
|
||||
2026/10/09 09:42:02.593, 337.03, 100, 26, 2887, 13801, 31086, 54
|
||||
2026/10/09 09:42:03.596, 337.48, 100, 26, 2887, 13801, 31086, 54
|
||||
2026/10/09 09:42:04.598, 338.37, 100, 26, 2887, 13801, 31086, 54
|
||||
2026/10/09 09:42:05.600, 338.53, 100, 26, 2887, 13801, 31086, 54
|
||||
2026/10/09 09:42:06.601, 337.99, 100, 26, 2887, 13801, 31086, 54
|
||||
2026/10/09 09:42:07.602, 337.30, 100, 26, 2887, 13801, 31086, 55
|
||||
2026/10/09 09:42:08.604, 337.68, 100, 26, 2887, 13801, 31086, 55
|
||||
2026/10/09 09:42:09.605, 338.44, 100, 26, 2887, 13801, 31086, 55
|
||||
2026/10/09 09:42:10.607, 338.49, 100, 26, 2887, 13801, 31086, 55
|
||||
2026/10/09 09:42:11.608, 339.06, 100, 26, 2887, 13801, 31086, 55
|
||||
2026/10/09 09:42:12.610, 339.69, 100, 26, 2887, 13801, 31086, 55
|
||||
2026/10/09 09:42:13.611, 340.12, 100, 26, 2887, 13801, 31086, 56
|
||||
2026/10/09 09:42:14.613, 339.99, 100, 26, 2887, 13801, 31086, 56
|
||||
2026/10/09 09:42:15.615, 339.81, 100, 26, 2887, 13801, 31086, 56
|
||||
2026/10/09 09:42:16.616, 339.23, 100, 26, 2887, 13801, 31086, 56
|
||||
2026/10/09 09:42:17.618, 339.70, 100, 26, 2887, 13801, 31086, 56
|
||||
2026/10/09 09:42:18.619, 340.10, 100, 26, 2887, 13801, 31086, 56
|
||||
2026/10/09 09:42:19.621, 340.47, 100, 26, 2887, 13801, 31086, 56
|
||||
2026/10/09 09:42:20.622, 346.83, 100, 51, 2820, 13801, 31086, 54
|
||||
2026/10/09 09:42:21.624, 127.09, 0, 0, 2902, 13801, 31086, 50
|
||||
2026/10/09 09:42:22.625, 88.70, 0, 0, 2722, 13801, 31086, 49
|
||||
2026/10/09 09:42:23.626, 66.86, 0, 0, 2542, 13801, 31086, 49
|
||||
2026/10/09 09:42:24.628, 66.36, 0, 0, 2542, 13801, 31086, 49
|
||||
2026/10/09 09:42:25.629, 66.40, 0, 0, 2542, 13801, 31086, 48
|
||||
2026/10/09 09:42:26.631, 66.78, 0, 0, 2542, 13801, 31086, 48
|
||||
2026/10/09 09:42:27.632, 67.73, 0, 0, 2542, 13801, 31086, 48
|
||||
2026/10/09 09:42:28.634, 67.63, 0, 0, 2542, 13801, 31086, 48
|
||||
2026/10/09 09:42:29.636, 66.49, 0, 0, 2542, 13801, 31086, 48
|
||||
2026/10/09 09:42:30.637, 65.55, 0, 0, 2542, 13801, 31086, 48
|
||||
2026/10/09 09:42:31.639, 65.46, 0, 0, 2542, 13801, 31086, 48
|
||||
2026/10/09 09:42:32.640, 65.00, 0, 0, 2542, 13801, 31086, 48
|
||||
2026/10/09 09:42:33.642, 65.36, 0, 0, 2542, 13801, 31086, 48
|
||||
2026/10/09 09:42:34.643, 65.62, 0, 0, 2542, 13801, 31086, 47
|
||||
2026/10/09 09:42:35.644, 66.06, 0, 0, 2542, 13801, 31086, 47
|
||||
2026/10/09 09:42:36.646, 65.25, 0, 0, 2542, 13801, 31086, 47
|
||||
2026/10/09 09:42:37.647, 64.62, 0, 0, 2542, 13801, 31086, 47
|
||||
2026/10/09 09:42:38.649, 64.56, 0, 0, 2542, 13801, 31086, 47
|
||||
2026/10/09 09:42:39.650, 39.18, 0, 0, 420, 810, 31086, 46
|
||||
2026/10/09 09:42:40.652, 23.52, 0, 0, 330, 13801, 31086, 46
|
||||
2026/10/09 09:42:41.653, 48.99, 37, 1, 2542, 13801, 31086, 47
|
||||
2026/10/09 09:42:42.655, 70.20, 37, 1, 2542, 13801, 31086, 47
|
||||
2026/10/09 09:42:43.656, 69.94, 37, 1, 2542, 13801, 31086, 47
|
||||
2026/10/09 09:42:44.657, 66.66, 0, 0, 2542, 13801, 31086, 46
|
||||
2026/10/09 09:42:45.659, 64.13, 0, 0, 2542, 13801, 31086, 46
|
||||
2026/10/09 09:42:46.660, 64.17, 0, 0, 2542, 13801, 31086, 46
|
||||
2026/10/09 09:42:47.662, 63.84, 0, 0, 2542, 13801, 31086, 46
|
||||
2026/10/09 09:42:48.663, 70.77, 3, 2, 2542, 14001, 31078, 46
|
||||
2026/10/09 09:42:49.664, 137.50, 100, 7, 2902, 13801, 31078, 49
|
||||
2026/10/09 09:42:50.666, 172.24, 100, 6, 2902, 13801, 31078, 49
|
||||
2026/10/09 09:42:51.667, 171.55, 100, 6, 2902, 13801, 31078, 49
|
||||
2026/10/09 09:42:52.669, 170.73, 100, 7, 2902, 13801, 31078, 49
|
||||
2026/10/09 09:42:53.670, 170.15, 100, 6, 2902, 13801, 31078, 49
|
||||
2026/10/09 09:42:54.672, 170.66, 100, 7, 2902, 13801, 31078, 49
|
||||
2026/10/09 09:42:55.673, 171.34, 100, 6, 2902, 13801, 31078, 49
|
||||
2026/10/09 09:42:56.675, 171.82, 100, 7, 2902, 13801, 31078, 50
|
||||
2026/10/09 09:42:57.676, 171.95, 100, 7, 2902, 13801, 31078, 49
|
||||
2026/10/09 09:42:58.677, 171.76, 100, 6, 2902, 13801, 31078, 50
|
||||
2026/10/09 09:42:59.679, 171.34, 100, 7, 2902, 13801, 31078, 50
|
||||
2026/10/09 09:43:00.680, 171.30, 100, 6, 2902, 13801, 31078, 50
|
||||
2026/10/09 09:43:01.682, 170.95, 100, 7, 2902, 13801, 31078, 50
|
||||
2026/10/09 09:43:02.682, 171.30, 100, 6, 2902, 13801, 31078, 50
|
||||
2026/10/09 09:43:03.684, 171.83, 100, 7, 2902, 13801, 31078, 50
|
||||
2026/10/09 09:43:04.688, 172.13, 100, 7, 2902, 13801, 31078, 50
|
||||
2026/10/09 09:43:05.689, 171.82, 100, 6, 2902, 13801, 31078, 50
|
||||
2026/10/09 09:43:06.691, 171.23, 100, 7, 2902, 13801, 31078, 50
|
||||
2026/10/09 09:43:07.692, 171.32, 100, 6, 2902, 13801, 31078, 50
|
||||
2026/10/09 09:43:08.698, 185.53, 100, 7, 2827, 13801, 31078, 49
|
||||
2026/10/09 09:43:09.699, 90.08, 0, 0, 2902, 13801, 31078, 47
|
||||
2026/10/09 09:43:10.701, 85.71, 0, 0, 2580, 13801, 31078, 47
|
||||
2026/10/09 09:43:11.702, 65.62, 0, 0, 2542, 13801, 31078, 46
|
||||
2026/10/09 09:43:12.703, 66.02, 0, 0, 2542, 13801, 31078, 46
|
||||
2026/10/09 09:43:13.707, 65.79, 0, 0, 2542, 13801, 31078, 46
|
||||
2026/10/09 09:43:14.709, 65.23, 0, 0, 2542, 13801, 31078, 46
|
||||
2026/10/09 09:43:15.711, 64.57, 0, 0, 2542, 13801, 31078, 46
|
||||
2026/10/09 09:43:16.712, 64.43, 0, 0, 2542, 13801, 31078, 46
|
||||
2026/10/09 09:43:17.714, 64.66, 0, 0, 2542, 13801, 31078, 46
|
||||
2026/10/09 09:43:18.717, 65.34, 0, 0, 2542, 13801, 31078, 46
|
||||
2026/10/09 09:43:19.718, 65.49, 0, 0, 2542, 13801, 31078, 46
|
||||
2026/10/09 09:43:20.721, 65.20, 0, 0, 2542, 13801, 31078, 46
|
||||
2026/10/09 09:43:21.723, 64.68, 0, 0, 2542, 13801, 31078, 46
|
||||
2026/10/09 09:43:22.724, 64.11, 0, 0, 2542, 13801, 31078, 45
|
||||
2026/10/09 09:43:23.725, 63.94, 0, 0, 2542, 13801, 31078, 45
|
||||
2026/10/09 09:43:24.727, 63.42, 0, 0, 2542, 13801, 31078, 45
|
||||
2026/10/09 09:43:25.728, 56.93, 0, 0, 645, 810, 31078, 45
|
||||
2026/10/09 09:43:26.729, 30.20, 0, 0, 375, 810, 31078, 44
|
||||
2026/10/09 09:43:27.731, 19.88, 0, 0, 232, 405, 31078, 44
|
||||
2026/10/09 09:43:28.736, 17.28, 0, 0, 1590, 13801, 31078, 45
|
||||
2026/10/09 09:43:29.738, 64.82, 11, 0, 2542, 13801, 31078, 45
|
||||
2026/10/09 09:43:30.740, 67.52, 37, 1, 2542, 13801, 31078, 45
|
||||
2026/10/09 09:43:31.740, 67.83, 37, 1, 2542, 13801, 31078, 45
|
||||
2026/10/09 09:43:32.742, 66.57, 37, 1, 2542, 13801, 31078, 45
|
||||
2026/10/09 09:43:33.743, 64.00, 0, 0, 2542, 13801, 31078, 45
|
||||
2026/10/09 09:43:34.744, 64.29, 0, 0, 2542, 13801, 31078, 45
|
||||
2026/10/09 09:43:35.746, 64.74, 0, 0, 2542, 13801, 31078, 45
|
||||
2026/10/09 09:43:36.748, 64.57, 0, 0, 2542, 13801, 31078, 44
|
||||
2026/10/09 09:43:37.750, 68.09, 0, 0, 2542, 14001, 1, 44
|
||||
2026/10/09 09:43:38.751, 67.31, 0, 0, 2542, 14001, 1, 44
|
||||
2026/10/09 09:43:39.753, 47.67, 0, 0, 1110, 7001, 1, 44
|
||||
2026/10/09 09:43:40.755, 39.07, 0, 0, 697, 7001, 1, 43
|
||||
2026/10/09 09:43:41.756, 28.18, 0, 0, 442, 810, 1, 43
|
||||
2026/10/09 09:43:42.758, 26.70, 0, 0, 285, 810, 1, 43
|
||||
2026/10/09 09:43:43.760, 20.66, 0, 0, 195, 405, 1, 43
|
||||
2026/10/09 09:43:44.761, 14.24, 0, 0, 187, 405, 1, 43
|
||||
2026/10/09 09:43:45.763, 13.60, 0, 0, 195, 405, 1, 43
|
||||
2026/10/09 09:43:46.764, 11.56, 0, 0, 195, 405, 1, 42
|
||||
2026/10/09 09:43:47.766, 10.77, 0, 0, 195, 405, 1, 42
|
||||
2026/10/09 09:43:48.767, 11.75, 0, 0, 195, 405, 1, 42
|
||||
2026/10/09 09:43:49.769, 13.01, 0, 0, 195, 405, 1, 42
|
||||
2026/10/09 09:43:50.770, 12.13, 0, 0, 195, 405, 1, 42
|
||||
2026/10/09 09:43:51.772, 10.90, 0, 0, 195, 405, 1, 42
|
||||
2026/10/09 09:43:52.773, 9.52, 0, 0, 195, 405, 1, 42
|
||||
2026/10/09 09:43:53.775, 9.49, 0, 0, 195, 405, 1, 42
|
||||
2026/10/09 09:43:54.776, 9.82, 0, 0, 195, 405, 1, 42
|
||||
2026/10/09 09:43:55.776, 10.98, 0, 0, 195, 405, 1, 42
|
||||
2026/10/09 09:43:56.776, 11.04, 0, 0, 195, 405, 1, 42
|
||||
2026/10/09 09:43:57.777, 6.53, 0, 0, 187, 405, 1, 42
|
||||
2026/10/09 09:43:58.777, 7.22, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:43:59.778, 6.87, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:44:00.778, 6.91, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:44:01.779, 7.08, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:44:02.779, 6.98, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:44:03.780, 6.82, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:44:04.780, 6.89, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:44:05.781, 8.17, 0, 0, 195, 405, 1, 41
|
||||
|
13
docs/analysis/mhpow/b3/rows/rtx5090-b1/progress.log
Normal file
13
docs/analysis/mhpow/b3/rows/rtx5090-b1/progress.log
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
row rc=0 --n 20 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n20
|
||||
row rc=0 --n 22 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n22
|
||||
row rc=0 --n 24 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n24
|
||||
row rc=0 --n 20 --layout aos --min-label-s 20 --check 2 --k 64 --tag abl-n20-aos
|
||||
row rc=0 --n 20 --layout soa --min-label-s 20 --check 2 --k 64 --tpb 32 --tag abl-n20-tpb32
|
||||
row rc=0 --n 20 --B 1 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B1
|
||||
row rc=0 --n 20 --B 32 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B32
|
||||
row rc=0 --n 20 --B 128 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B128
|
||||
row rc=0 --n 12 --layout soa --min-label-s 20 --check 2 --k 64 --tag diag-n12
|
||||
row rc=0 --n 14 --layout soa --min-label-s 20 --check 2 --k 64 --tag diag-n14
|
||||
row rc=0 --n 16 --layout soa --min-label-s 20 --check 2 --k 64 --tag diag-n16
|
||||
row rc=0 --n 18 --layout soa --min-label-s 20 --check 2 --k 64 --tag diag-n18
|
||||
DONE 2026-10-09T09:44:06Z
|
||||
12
docs/analysis/mhpow/b3/rows/rtx5090-b1/rows.jsonl
Normal file
12
docs/analysis/mhpow/b3/rows/rtx5090-b1/rows.jsonl
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{"tag":"main-n20","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B1","n":20,"N":1048576,"inst_MiB":32.0,"B":476,"Bmax":476,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":13,"graph_s":0.0398,"state_alloc_s":0.0042,"label_s_per_pass":1.542732,"labels_per_s":323531288.9,"labels_per_s_per_inst":679687.6,"ns_per_label_per_inst":1471.26,"merkle_s":0.039813,"prove_s":0.052700,"verify_all_s":0.0348,"accepted":476,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":32.16,"oracle":"IDENTICAL","label_window_unix_ms":[1791538501040,1791538521096],"free_gib":30.86,"per_inst_MiB":64.1,"proof_bytes_inst0":129133}
|
||||
{"tag":"main-n22","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B1","n":22,"N":4194304,"inst_MiB":128.0,"B":119,"Bmax":119,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":4,"graph_s":0.1164,"state_alloc_s":0.0061,"label_s_per_pass":6.174518,"labels_per_s":80835817.5,"labels_per_s_per_inst":679292.6,"ns_per_label_per_inst":1472.12,"merkle_s":0.039964,"prove_s":0.019030,"verify_all_s":0.0077,"accepted":119,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":-1,"check_s":35.22,"oracle":"IDENTICAL","label_window_unix_ms":[1791538553910,1791538578843],"free_gib":30.86,"per_inst_MiB":256.1,"proof_bytes_inst0":141421}
|
||||
{"tag":"main-n24","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B1","n":24,"N":16777216,"inst_MiB":512.0,"B":29,"Bmax":29,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":1,"graph_s":0.4549,"state_alloc_s":0.0107,"label_s_per_pass":24.638883,"labels_per_s":19746807.0,"labels_per_s_per_inst":680924.4,"ns_per_label_per_inst":1468.59,"merkle_s":0.039104,"prove_s":0.007084,"verify_all_s":0.0037,"accepted":29,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":-1,"check_s":50.67,"oracle":"IDENTICAL","label_window_unix_ms":[1791538614989,1791538639625],"free_gib":30.86,"per_inst_MiB":1024.1,"proof_bytes_inst0":153709}
|
||||
{"tag":"abl-n20-aos","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B1","n":20,"N":1048576,"inst_MiB":32.0,"B":476,"Bmax":476,"layout":"aos","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":13,"graph_s":0.0406,"state_alloc_s":0.0042,"label_s_per_pass":1.559065,"labels_per_s":320141969.3,"labels_per_s_per_inst":672567.2,"ns_per_label_per_inst":1486.84,"merkle_s":0.065504,"prove_s":0.062077,"verify_all_s":0.0370,"accepted":476,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":1.38,"oracle":"IDENTICAL","label_window_unix_ms":[1791538691377,1791538711638],"free_gib":30.86,"per_inst_MiB":64.1,"proof_bytes_inst0":129133}
|
||||
{"tag":"abl-n20-tpb32","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B1","n":20,"N":1048576,"inst_MiB":32.0,"B":476,"Bmax":476,"layout":"soa","kernel":"k1","tpb":32,"k":64,"wrong_edge":0,"passes":14,"graph_s":0.0393,"state_alloc_s":0.0043,"label_s_per_pass":1.548229,"labels_per_s":322382709.2,"labels_per_s_per_inst":677274.6,"ns_per_label_per_inst":1476.51,"merkle_s":0.040048,"prove_s":0.058053,"verify_all_s":0.0364,"accepted":476,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":33.57,"oracle":"IDENTICAL","label_window_unix_ms":[1791538713628,1791538735158],"free_gib":30.86,"per_inst_MiB":64.1,"proof_bytes_inst0":129133}
|
||||
{"tag":"ladder-n20-B1","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B1","n":20,"N":1048576,"inst_MiB":32.0,"B":1,"Bmax":476,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":7,"graph_s":0.0391,"state_alloc_s":0.0013,"label_s_per_pass":1.443471,"labels_per_s":726426.9,"labels_per_s_per_inst":726426.9,"ns_per_label_per_inst":1376.60,"merkle_s":0.000406,"prove_s":0.001079,"verify_all_s":0.0010,"accepted":1,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":0.80,"oracle":"IDENTICAL","label_window_unix_ms":[1791538769321,1791538779445],"free_gib":30.86,"per_inst_MiB":64.1,"proof_bytes_inst0":129133}
|
||||
{"tag":"ladder-n20-B32","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B1","n":20,"N":1048576,"inst_MiB":32.0,"B":32,"Bmax":476,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":7,"graph_s":0.0414,"state_alloc_s":0.0026,"label_s_per_pass":1.505308,"labels_per_s":22290745.7,"labels_per_s_per_inst":696585.8,"ns_per_label_per_inst":1435.57,"merkle_s":0.002977,"prove_s":0.006635,"verify_all_s":0.0033,"accepted":32,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":2.66,"oracle":"IDENTICAL","label_window_unix_ms":[1791538780645,1791538791186],"free_gib":30.86,"per_inst_MiB":64.1,"proof_bytes_inst0":129133}
|
||||
{"tag":"ladder-n20-B128","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B1","n":20,"N":1048576,"inst_MiB":32.0,"B":128,"Bmax":476,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":7,"graph_s":0.0387,"state_alloc_s":0.0022,"label_s_per_pass":1.528175,"labels_per_s":87828739.8,"labels_per_s_per_inst":686162.0,"ns_per_label_per_inst":1457.38,"merkle_s":0.011431,"prove_s":0.017750,"verify_all_s":0.0096,"accepted":128,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":9.08,"oracle":"IDENTICAL","label_window_unix_ms":[1791538794255,1791538804954],"free_gib":30.86,"per_inst_MiB":64.1,"proof_bytes_inst0":129133}
|
||||
{"tag":"diag-n12","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B1","n":12,"N":4096,"inst_MiB":0.1,"B":93706,"Bmax":93706,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":621,"graph_s":0.0066,"state_alloc_s":0.0291,"label_s_per_pass":0.032221,"labels_per_s":11912239216.4,"labels_per_s_per_inst":127123.5,"ns_per_label_per_inst":7866.36,"merkle_s":0.034377,"prove_s":6.447307,"verify_all_s":2.0544,"accepted":93706,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":20.15,"oracle":"IDENTICAL","label_window_unix_ms":[1791538814518,1791538834540],"free_gib":30.86,"per_inst_MiB":0.3,"proof_bytes_inst0":79981}
|
||||
{"tag":"diag-n14","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B1","n":14,"N":16384,"inst_MiB":0.5,"B":28102,"Bmax":28102,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":410,"graph_s":0.0084,"state_alloc_s":0.0104,"label_s_per_pass":0.048846,"labels_per_s":9426017100.7,"labels_per_s_per_inst":335421.6,"ns_per_label_per_inst":2981.32,"merkle_s":0.038570,"prove_s":2.039850,"verify_all_s":0.7426,"accepted":28102,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":-1,"check_s":30.11,"oracle":"IDENTICAL","label_window_unix_ms":[1791538865805,1791538885853],"free_gib":30.86,"per_inst_MiB":1.1,"proof_bytes_inst0":92269}
|
||||
{"tag":"diag-n16","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B1","n":16,"N":65536,"inst_MiB":2.0,"B":7457,"Bmax":7457,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":205,"graph_s":0.0088,"state_alloc_s":0.0052,"label_s_per_pass":0.097815,"labels_per_s":4996208280.0,"labels_per_s_per_inst":670002.5,"ns_per_label_per_inst":1492.53,"merkle_s":0.040285,"prove_s":0.660960,"verify_all_s":0.2275,"accepted":7457,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":1,"check_s":26.60,"oracle":"IDENTICAL","label_window_unix_ms":[1791538920021,1791538940081],"free_gib":30.86,"per_inst_MiB":4.1,"proof_bytes_inst0":104557}
|
||||
{"tag":"diag-n18","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B1","n":18,"N":262144,"inst_MiB":8.0,"B":1897,"Bmax":1897,"layout":"soa","kernel":"k1","tpb":128,"k":64,"wrong_edge":0,"passes":52,"graph_s":0.0195,"state_alloc_s":0.0251,"label_s_per_pass":0.387782,"labels_per_s":1282387942.5,"labels_per_s_per_inst":676008.4,"ns_per_label_per_inst":1479.27,"merkle_s":0.040299,"prove_s":0.193505,"verify_all_s":0.0802,"accepted":1897,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"b1_kat_instance0":-1,"check_s":27.80,"oracle":"IDENTICAL","label_window_unix_ms":[1791538968395,1791538988568],"free_gib":30.86,"per_inst_MiB":16.1,"proof_bytes_inst0":116845}
|
||||
0
docs/analysis/mhpow/b3/rows/rtx5090-b1/stderr.log
Normal file
0
docs/analysis/mhpow/b3/rows/rtx5090-b1/stderr.log
Normal file
5
docs/analysis/mhpow/b3/rows/rtx5090-r1/cpu.jsonl
Normal file
5
docs/analysis/mhpow/b3/rows/rtx5090-r1/cpu.jsonl
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{"mode":"cpu_time","sha":"sha_ni","n":20,"N":1048576,"k":64,"threads":1,"graph_s_single_thread":0.3492,"label_s_mean":0.1293,"merkle_s_mean":0.0943,"prove_s_mean":0.000277,"verify_s_mean":0.002238,"wall_s":0.2342,"labels_per_s_per_instance":8111504.0,"labels_per_s_all":4478139.8,"accepted":1}
|
||||
{"mode":"cpu_time","sha":"sha_ni","n":22,"N":4194304,"k":64,"threads":1,"graph_s_single_thread":1.3670,"label_s_mean":0.5443,"merkle_s_mean":0.3727,"prove_s_mean":0.000453,"verify_s_mean":0.002461,"wall_s":0.9520,"labels_per_s_per_instance":7705689.3,"labels_per_s_all":4405672.7,"accepted":1}
|
||||
{"mode":"cpu_time","sha":"sha_ni","n":24,"N":16777216,"k":64,"threads":1,"graph_s_single_thread":5.4652,"label_s_mean":2.3266,"merkle_s_mean":1.5502,"prove_s_mean":0.000698,"verify_s_mean":0.002686,"wall_s":4.0082,"labels_per_s_per_instance":7211107.0,"labels_per_s_all":4185749.5,"accepted":1}
|
||||
{"mode":"cpu_time","sha":"sha_ni","n":20,"N":1048576,"k":64,"threads":26,"graph_s_single_thread":0.3506,"label_s_mean":0.1358,"merkle_s_mean":0.0968,"prove_s_mean":0.000339,"verify_s_mean":0.002254,"wall_s":0.4568,"labels_per_s_per_instance":7723278.4,"labels_per_s_all":59687957.7,"accepted":26}
|
||||
{"mode":"cpu_time","sha":"sha_ni","n":22,"N":4194304,"k":64,"threads":26,"graph_s_single_thread":1.3755,"label_s_mean":0.5606,"merkle_s_mean":0.3901,"prove_s_mean":0.157581,"verify_s_mean":0.002884,"wall_s":2.0500,"labels_per_s_per_instance":7481489.0,"labels_per_s_all":53194915.4,"accepted":26}
|
||||
1
docs/analysis/mhpow/b3/rows/rtx5090-r1/idle.json
Normal file
1
docs/analysis/mhpow/b3/rows/rtx5090-r1/idle.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"idle_window_unix_ms":[1791537591000,1791537621000]}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
{"mode":"selftest","sha":"sha_ni","sha256_abc_kat_fail":0,"portable_words_mismatch":0,"fast_mismatch":0}
|
||||
CASE cpu_selftest PASS
|
||||
{"tag":"known-failed","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":12,"N":4096,"inst_MiB":0.1,"B":96,"Bmax":106101,"layout":"soa","kernel":"k1","k":32,"wrong_edge":1,"passes":1,"graph_s":0.0026,"state_alloc_s":0.0008,"label_s_per_pass":0.008546,"labels_per_s":46009891.5,"labels_per_s_per_inst":479269.7,"ns_per_label_per_inst":2086.51,"merkle_s":0.000158,"prove_s":0.005535,"verify_all_s":0.0003,"accepted":0,"checked":4,"lab_bad_inst":4,"tree_bad_inst":4,"root_bad":4,"proof_bad":4,"check_s":0.04,"oracle":"MISMATCH","label_window_unix_ms":[1791539081499,1791539081507],"free_gib":30.86,"per_inst_MiB":0.3}
|
||||
CASE known_failed_wrong_edge PASS (oracle fired: MISMATCH, 0 proofs accepted, exit 1)
|
||||
{"tag":"known-finished-k1","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":12,"N":4096,"inst_MiB":0.1,"B":96,"Bmax":106101,"layout":"soa","kernel":"k1","k":32,"wrong_edge":0,"passes":1,"graph_s":0.0025,"state_alloc_s":0.0007,"label_s_per_pass":0.008864,"labels_per_s":44360532.0,"labels_per_s_per_inst":462088.9,"ns_per_label_per_inst":2164.09,"merkle_s":0.000155,"prove_s":0.004310,"verify_all_s":0.0054,"accepted":96,"checked":4,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":0.04,"oracle":"IDENTICAL","label_window_unix_ms":[1791539081908,1791539081917],"free_gib":30.86,"per_inst_MiB":0.3}
|
||||
CASE known_finished_k1 PASS
|
||||
{"tag":"known-finished-k2","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":12,"N":4096,"inst_MiB":0.1,"B":96,"Bmax":106101,"layout":"soa","kernel":"k2","k":32,"wrong_edge":0,"passes":1,"graph_s":0.0026,"state_alloc_s":0.0007,"label_s_per_pass":0.005429,"labels_per_s":72434039.1,"labels_per_s_per_inst":754521.2,"ns_per_label_per_inst":1325.34,"merkle_s":0.000159,"prove_s":0.005180,"verify_all_s":0.0063,"accepted":96,"checked":4,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":0.04,"oracle":"IDENTICAL","label_window_unix_ms":[1791539082308,1791539082313],"free_gib":30.86,"per_inst_MiB":0.3}
|
||||
CASE known_finished_k2 PASS
|
||||
RESULT test_known_failed PASS
|
||||
10
docs/analysis/mhpow/b3/rows/rtx5090-r1/meta.txt
Normal file
10
docs/analysis/mhpow/b3/rows/rtx5090-r1/meta.txt
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
label=rtx5090-r1
|
||||
src_id=2079d0d8ce7eef96
|
||||
2026-10-09T09:19:51Z
|
||||
model name : AMD EPYC 7K62 48-Core Processor
|
||||
nproc=26 cgroup_cpus=26
|
||||
81.29 45.78 37.93 17/7832 1532
|
||||
name, driver_version, vbios_version, power.limit [W], power.default_limit [W], clocks.max.sm [MHz], clocks.max.memory [MHz], memory.total [MiB], pcie.link.gen.current, pcie.link.width.current
|
||||
NVIDIA GeForce RTX 5090, 580.126.09, 98.02.2E.80.39, 480.00 W, 600.00 W, 3105 MHz, 14001 MHz, 32607 MiB, 4, 16
|
||||
Build cuda_12.8.r12.8/compiler.35583870_0
|
||||
11.88 14.12 24.80 5/6965 2238
|
||||
782
docs/analysis/mhpow/b3/rows/rtx5090-r1/power.csv
Normal file
782
docs/analysis/mhpow/b3/rows/rtx5090-r1/power.csv
Normal file
|
|
@ -0,0 +1,782 @@
|
|||
2026/10/09 09:19:51.244, 5.65, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:19:52.258, 5.64, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:19:53.259, 5.97, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:19:54.260, 5.78, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:19:55.262, 6.72, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:19:56.263, 6.36, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:19:57.265, 6.10, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:19:58.266, 6.26, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:19:59.268, 5.36, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:00.269, 5.24, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:01.274, 5.32, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:02.275, 5.43, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:03.276, 5.38, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:04.278, 5.40, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:05.280, 5.43, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:06.281, 6.49, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:07.283, 6.16, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:08.284, 6.03, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:09.286, 6.23, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:10.287, 5.66, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:11.289, 5.95, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:12.289, 5.88, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:13.290, 6.38, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:14.292, 6.01, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:15.292, 6.36, 0, 0, 187, 405, 1, 38
|
||||
2026/10/09 09:20:16.294, 6.14, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:17.295, 5.91, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:18.297, 5.63, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:19.297, 5.13, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:20.298, 5.44, 0, 0, 195, 405, 1, 38
|
||||
2026/10/09 09:20:21.299, 5.39, 0, 0, 195, 405, 2, 38
|
||||
2026/10/09 09:20:22.334, 41.49, 100, 1, 2917, 13801, 31044, 40
|
||||
2026/10/09 09:20:23.335, 110.68, 100, 1, 2917, 13801, 31044, 41
|
||||
2026/10/09 09:20:24.336, 110.98, 100, 1, 2917, 13801, 31044, 41
|
||||
2026/10/09 09:20:25.337, 111.05, 100, 1, 2917, 13801, 31044, 41
|
||||
2026/10/09 09:20:26.338, 111.15, 100, 1, 2917, 13801, 31044, 41
|
||||
2026/10/09 09:20:27.339, 111.48, 100, 1, 2917, 13801, 31044, 41
|
||||
2026/10/09 09:20:28.340, 111.47, 100, 1, 2917, 13801, 31044, 41
|
||||
2026/10/09 09:20:29.340, 111.33, 100, 1, 2917, 13801, 31044, 41
|
||||
2026/10/09 09:20:30.341, 111.33, 100, 1, 2917, 13801, 31044, 41
|
||||
2026/10/09 09:20:31.342, 111.64, 100, 1, 2917, 13801, 31044, 42
|
||||
2026/10/09 09:20:32.342, 111.78, 100, 1, 2917, 13801, 31044, 42
|
||||
2026/10/09 09:20:33.343, 111.89, 100, 1, 2917, 13801, 31044, 42
|
||||
2026/10/09 09:20:34.344, 111.83, 100, 1, 2917, 13801, 31044, 42
|
||||
2026/10/09 09:20:35.345, 111.96, 100, 1, 2917, 13801, 31044, 42
|
||||
2026/10/09 09:20:36.345, 112.26, 100, 1, 2917, 13801, 31044, 42
|
||||
2026/10/09 09:20:37.346, 112.33, 100, 1, 2917, 13801, 31044, 42
|
||||
2026/10/09 09:20:38.347, 112.13, 100, 1, 2917, 13801, 31044, 42
|
||||
2026/10/09 09:20:39.348, 112.21, 100, 1, 2917, 13801, 31044, 42
|
||||
2026/10/09 09:20:40.349, 112.56, 100, 1, 2917, 13801, 31044, 42
|
||||
2026/10/09 09:20:41.350, 112.57, 100, 1, 2917, 13801, 31044, 42
|
||||
2026/10/09 09:20:42.351, 112.58, 100, 1, 2917, 13801, 31044, 43
|
||||
2026/10/09 09:20:43.352, 129.16, 100, 38, 2917, 13801, 31044, 43
|
||||
2026/10/09 09:20:44.354, 88.13, 0, 0, 2917, 13801, 31044, 42
|
||||
2026/10/09 09:20:45.354, 76.04, 0, 0, 2797, 13801, 31044, 41
|
||||
2026/10/09 09:20:46.355, 56.58, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:20:47.357, 56.65, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:20:48.357, 56.85, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:20:49.357, 57.19, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:20:50.358, 56.94, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:20:51.358, 56.97, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:20:52.358, 57.11, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:20:53.358, 57.11, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:20:54.359, 56.97, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:20:55.359, 56.96, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:20:56.360, 56.81, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:20:57.360, 57.15, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:20:58.360, 57.04, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:20:59.361, 56.84, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:21:00.361, 56.47, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:21:01.361, 32.98, 0, 0, 472, 810, 31044, 40
|
||||
2026/10/09 09:21:02.362, 21.74, 0, 0, 420, 810, 31044, 40
|
||||
2026/10/09 09:21:03.362, 24.60, 9, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:21:04.363, 60.76, 35, 1, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:21:05.363, 61.54, 35, 1, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:21:06.364, 61.40, 35, 1, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:21:07.364, 59.04, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:21:08.365, 57.08, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:21:09.365, 56.94, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:21:10.365, 57.12, 0, 0, 2542, 13801, 31044, 41
|
||||
2026/10/09 09:21:11.366, 56.72, 0, 0, 2542, 13801, 31044, 42
|
||||
2026/10/09 09:21:12.366, 57.25, 0, 0, 2542, 13801, 31044, 42
|
||||
2026/10/09 09:21:13.367, 62.29, 55, 36, 2542, 14001, 31044, 42
|
||||
2026/10/09 09:21:14.367, 108.58, 100, 2, 2910, 13801, 31044, 44
|
||||
2026/10/09 09:21:15.368, 125.03, 100, 2, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:21:16.368, 125.49, 100, 2, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:21:17.370, 124.96, 100, 2, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:21:18.370, 125.14, 100, 2, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:21:19.370, 125.40, 100, 2, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:21:20.371, 125.85, 100, 2, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:21:21.371, 126.00, 100, 2, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:21:22.371, 126.49, 100, 2, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:21:23.372, 126.34, 100, 2, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:21:24.372, 126.40, 100, 2, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:21:25.372, 126.51, 100, 2, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:21:26.373, 126.85, 100, 2, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:21:27.373, 127.50, 100, 2, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:21:28.374, 129.60, 100, 2, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:21:29.374, 129.35, 100, 2, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:21:30.375, 128.97, 100, 2, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:21:31.375, 129.16, 100, 2, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:21:32.375, 129.80, 100, 2, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:21:33.376, 130.43, 100, 2, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:21:34.376, 136.49, 0, 0, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:21:35.376, 86.41, 0, 0, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:21:36.377, 71.82, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:21:37.377, 61.56, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:21:38.377, 61.34, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:21:39.378, 60.80, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:21:40.378, 60.75, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:21:41.378, 61.37, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:21:42.378, 61.54, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:21:43.379, 61.54, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:21:44.379, 61.35, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:21:45.380, 61.01, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:21:46.380, 60.51, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:21:47.380, 60.78, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:21:48.381, 60.81, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:21:49.381, 61.59, 0, 0, 2542, 13801, 31044, 43
|
||||
2026/10/09 09:21:50.382, 61.24, 0, 0, 2542, 13801, 31044, 42
|
||||
2026/10/09 09:21:51.382, 37.40, 0, 0, 487, 810, 31044, 42
|
||||
2026/10/09 09:21:52.382, 25.75, 0, 0, 420, 810, 31044, 42
|
||||
2026/10/09 09:21:53.383, 23.98, 9, 0, 1702, 13801, 31044, 42
|
||||
2026/10/09 09:21:54.383, 63.66, 34, 1, 2542, 13801, 31044, 42
|
||||
2026/10/09 09:21:55.384, 64.48, 34, 1, 2542, 13801, 31044, 42
|
||||
2026/10/09 09:21:56.384, 65.37, 34, 1, 2542, 13801, 31044, 42
|
||||
2026/10/09 09:21:57.385, 64.88, 0, 0, 2542, 13801, 31044, 42
|
||||
2026/10/09 09:21:58.385, 61.99, 0, 0, 2542, 13801, 31044, 42
|
||||
2026/10/09 09:21:59.386, 61.08, 0, 0, 2542, 13801, 31044, 42
|
||||
2026/10/09 09:22:00.386, 60.54, 0, 0, 2542, 13801, 31044, 42
|
||||
2026/10/09 09:22:01.387, 59.61, 0, 0, 2542, 13801, 31044, 42
|
||||
2026/10/09 09:22:02.387, 59.74, 0, 0, 2542, 13801, 31044, 42
|
||||
2026/10/09 09:22:03.387, 60.49, 0, 0, 2542, 13801, 31044, 42
|
||||
2026/10/09 09:22:04.388, 67.36, 1, 0, 2542, 13801, 31014, 42
|
||||
2026/10/09 09:22:05.388, 103.82, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:22:06.389, 107.14, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:22:07.389, 107.34, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:22:08.390, 107.06, 100, 0, 2917, 13801, 31014, 44
|
||||
2026/10/09 09:22:09.390, 106.56, 100, 0, 2917, 13801, 31014, 44
|
||||
2026/10/09 09:22:10.391, 106.57, 100, 0, 2917, 13801, 31014, 44
|
||||
2026/10/09 09:22:11.391, 107.26, 100, 0, 2917, 13801, 31014, 44
|
||||
2026/10/09 09:22:12.392, 108.01, 100, 0, 2917, 13801, 31014, 44
|
||||
2026/10/09 09:22:13.392, 107.32, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:14.392, 106.63, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:15.393, 106.03, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:16.394, 105.86, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:17.394, 105.98, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:18.394, 106.71, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:19.395, 107.57, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:20.395, 108.16, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:21.395, 108.24, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:22.396, 107.61, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:23.396, 106.89, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:24.397, 106.62, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:25.397, 107.13, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:26.398, 106.81, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:27.398, 107.10, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:28.399, 107.50, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:29.399, 107.60, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:30.400, 107.22, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:31.401, 106.79, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:32.401, 106.00, 100, 0, 2902, 13801, 31014, 44
|
||||
2026/10/09 09:22:33.401, 120.86, 0, 0, 2895, 13801, 31014, 43
|
||||
2026/10/09 09:22:34.402, 84.61, 0, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:22:35.402, 70.85, 0, 0, 2542, 13801, 31014, 42
|
||||
2026/10/09 09:22:36.403, 60.86, 0, 0, 2542, 13801, 31014, 42
|
||||
2026/10/09 09:22:37.403, 60.53, 0, 0, 2542, 13801, 31014, 42
|
||||
2026/10/09 09:22:38.404, 60.58, 0, 0, 2542, 13801, 31014, 42
|
||||
2026/10/09 09:22:39.404, 59.60, 0, 0, 2542, 13801, 31014, 42
|
||||
2026/10/09 09:22:40.405, 59.74, 0, 0, 2542, 13801, 31014, 42
|
||||
2026/10/09 09:22:41.405, 61.23, 0, 0, 2542, 13801, 31014, 42
|
||||
2026/10/09 09:22:42.405, 61.14, 0, 0, 2542, 13801, 31014, 42
|
||||
2026/10/09 09:22:43.406, 61.30, 0, 0, 2542, 13801, 31014, 42
|
||||
2026/10/09 09:22:44.406, 61.68, 0, 0, 2542, 13801, 31014, 42
|
||||
2026/10/09 09:22:45.407, 60.51, 0, 0, 2542, 13801, 31014, 42
|
||||
2026/10/09 09:22:46.407, 59.92, 0, 0, 2542, 13801, 31014, 42
|
||||
2026/10/09 09:22:47.407, 59.83, 0, 0, 2542, 13801, 31014, 42
|
||||
2026/10/09 09:22:48.408, 59.80, 0, 0, 2542, 13801, 31014, 42
|
||||
2026/10/09 09:22:49.408, 60.27, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:22:50.408, 37.60, 0, 0, 465, 810, 31014, 41
|
||||
2026/10/09 09:22:51.409, 26.32, 0, 0, 412, 810, 31014, 41
|
||||
2026/10/09 09:22:52.409, 18.11, 0, 0, 255, 405, 31014, 40
|
||||
2026/10/09 09:22:53.410, 25.19, 37, 1, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:22:54.410, 64.97, 37, 1, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:22:55.410, 62.30, 37, 1, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:22:56.411, 64.84, 34, 1, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:22:57.411, 62.15, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:22:58.412, 61.37, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:22:59.412, 60.64, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:00.413, 60.44, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:01.414, 60.54, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:02.415, 60.62, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:03.415, 60.97, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:04.416, 61.25, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:05.416, 61.83, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:06.416, 62.31, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:07.417, 61.91, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:08.417, 60.80, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:09.417, 59.81, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:10.418, 59.71, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:11.418, 59.89, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:12.419, 60.68, 0, 0, 2542, 13801, 4, 41
|
||||
2026/10/09 09:23:13.419, 81.40, 100, 0, 2850, 13801, 31014, 42
|
||||
2026/10/09 09:23:14.420, 109.56, 100, 0, 2917, 13801, 31014, 42
|
||||
2026/10/09 09:23:15.420, 109.37, 100, 0, 2917, 13801, 31014, 42
|
||||
2026/10/09 09:23:16.421, 109.37, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:17.421, 108.92, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:18.421, 109.00, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:19.422, 109.62, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:20.422, 109.93, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:21.422, 110.17, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:22.423, 109.36, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:23.423, 109.04, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:24.424, 109.05, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:25.424, 109.36, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:26.425, 109.75, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:27.425, 110.32, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:28.426, 111.04, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:29.426, 111.42, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:30.427, 110.72, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:31.427, 109.50, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:32.428, 108.86, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:33.428, 108.85, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:34.429, 109.33, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:35.429, 109.71, 100, 0, 2917, 13801, 31014, 43
|
||||
2026/10/09 09:23:36.430, 132.39, 68, 43, 2917, 13801, 31014, 50
|
||||
2026/10/09 09:23:37.430, 85.72, 0, 0, 2917, 13801, 31014, 42
|
||||
2026/10/09 09:23:38.430, 80.54, 0, 0, 2797, 13801, 31014, 42
|
||||
2026/10/09 09:23:39.431, 60.16, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:40.431, 59.61, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:41.432, 59.67, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:42.432, 60.87, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:43.433, 61.56, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:44.433, 61.53, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:45.434, 60.73, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:46.434, 60.52, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:47.435, 60.33, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:48.435, 60.39, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:49.436, 60.68, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:50.436, 61.35, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:51.437, 61.84, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:52.437, 60.73, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:53.437, 60.34, 0, 0, 2542, 13801, 31014, 41
|
||||
2026/10/09 09:23:54.439, 36.69, 0, 0, 465, 810, 31014, 40
|
||||
2026/10/09 09:23:55.439, 24.98, 0, 0, 435, 810, 31014, 40
|
||||
2026/10/09 09:23:56.439, 17.30, 0, 0, 255, 405, 31014, 40
|
||||
2026/10/09 09:23:57.440, 15.19, 0, 0, 195, 405, 31014, 39
|
||||
2026/10/09 09:23:58.440, 11.20, 0, 0, 195, 405, 31014, 39
|
||||
2026/10/09 09:23:59.441, 14.97, 14, 0, 502, 13801, 31014, 40
|
||||
2026/10/09 09:24:00.441, 74.07, 88, 1, 2917, 13801, 31014, 41
|
||||
2026/10/09 09:24:01.442, 89.86, 88, 1, 2917, 13801, 31014, 41
|
||||
2026/10/09 09:24:02.442, 89.95, 89, 1, 2917, 13801, 31014, 41
|
||||
2026/10/09 09:24:03.443, 86.60, 0, 0, 2917, 13801, 31014, 41
|
||||
2026/10/09 09:24:04.443, 83.77, 0, 0, 2917, 13801, 31014, 41
|
||||
2026/10/09 09:24:05.443, 64.98, 0, 0, 2542, 13801, 31014, 40
|
||||
2026/10/09 09:24:06.444, 60.65, 0, 0, 2542, 13801, 31014, 40
|
||||
2026/10/09 09:24:07.444, 60.74, 0, 0, 2542, 13801, 31014, 40
|
||||
2026/10/09 09:24:08.446, 60.49, 0, 0, 2542, 13801, 31014, 40
|
||||
2026/10/09 09:24:09.446, 60.17, 0, 0, 2542, 13801, 31014, 40
|
||||
2026/10/09 09:24:10.447, 60.63, 0, 0, 2542, 13801, 31014, 40
|
||||
2026/10/09 09:24:11.449, 60.86, 0, 0, 2542, 13801, 31014, 40
|
||||
2026/10/09 09:24:12.449, 61.31, 0, 0, 2542, 13801, 31014, 40
|
||||
2026/10/09 09:24:13.449, 61.55, 0, 0, 2542, 13801, 31014, 40
|
||||
2026/10/09 09:24:14.450, 61.93, 0, 0, 2542, 13801, 31014, 40
|
||||
2026/10/09 09:24:15.450, 61.43, 0, 0, 2542, 13801, 31014, 40
|
||||
2026/10/09 09:24:16.451, 60.64, 0, 0, 2542, 13801, 31014, 40
|
||||
2026/10/09 09:24:17.451, 59.92, 0, 0, 2542, 13801, 31014, 40
|
||||
2026/10/09 09:24:18.451, 59.71, 0, 0, 2542, 13801, 31014, 40
|
||||
2026/10/09 09:24:19.453, 65.52, 0, 0, 2542, 14001, 510, 40
|
||||
2026/10/09 09:24:20.454, 82.43, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:21.454, 102.96, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:22.454, 103.34, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:23.455, 103.55, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:24.455, 102.95, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:25.455, 102.64, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:26.456, 103.10, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:27.456, 103.11, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:28.457, 103.84, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:29.457, 104.07, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:30.458, 103.57, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:31.458, 102.97, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:32.459, 103.05, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:33.459, 103.12, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:34.460, 103.80, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:35.460, 104.34, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:36.460, 104.53, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:37.461, 105.31, 100, 0, 2910, 13801, 30282, 42
|
||||
2026/10/09 09:24:38.461, 104.70, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:39.461, 104.02, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:40.461, 103.64, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:41.462, 103.30, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:42.463, 103.07, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:43.463, 103.35, 100, 0, 2910, 13801, 30282, 42
|
||||
2026/10/09 09:24:44.464, 103.55, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:45.464, 103.95, 100, 0, 2910, 13801, 30282, 42
|
||||
2026/10/09 09:24:46.465, 104.04, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:47.466, 103.94, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:48.466, 103.54, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:49.467, 103.61, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:50.467, 103.82, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:51.468, 103.96, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:52.468, 104.24, 100, 0, 2910, 13801, 30282, 42
|
||||
2026/10/09 09:24:53.468, 103.94, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:54.469, 103.38, 100, 0, 2910, 13801, 30282, 42
|
||||
2026/10/09 09:24:55.469, 103.36, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:56.469, 103.49, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:57.470, 103.88, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:58.470, 112.81, 0, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:24:59.471, 85.09, 0, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:25:00.471, 64.84, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:25:01.472, 61.64, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:25:02.473, 60.78, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:25:03.474, 60.04, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:25:04.474, 60.23, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:25:05.474, 60.42, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:25:06.475, 60.67, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:25:07.475, 60.86, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:25:08.476, 60.86, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:25:09.476, 60.69, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:25:10.476, 59.78, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:11.477, 58.81, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:25:12.477, 59.21, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:13.477, 60.10, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:14.478, 60.40, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:15.478, 54.96, 0, 0, 2055, 810, 30282, 40
|
||||
2026/10/09 09:25:16.479, 25.10, 0, 0, 412, 810, 30282, 40
|
||||
2026/10/09 09:25:17.479, 16.52, 0, 0, 247, 405, 30282, 39
|
||||
2026/10/09 09:25:18.479, 14.05, 0, 0, 195, 405, 30282, 39
|
||||
2026/10/09 09:25:19.480, 8.65, 0, 0, 195, 405, 30282, 39
|
||||
2026/10/09 09:25:20.485, 30.23, 85, 1, 2662, 13801, 30282, 41
|
||||
2026/10/09 09:25:21.486, 89.20, 85, 1, 2917, 13801, 30282, 41
|
||||
2026/10/09 09:25:22.486, 89.71, 70, 1, 2917, 13801, 30282, 41
|
||||
2026/10/09 09:25:23.487, 89.28, 0, 0, 2917, 13801, 30282, 41
|
||||
2026/10/09 09:25:24.487, 84.36, 0, 0, 2917, 13801, 30282, 41
|
||||
2026/10/09 09:25:25.488, 75.01, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:26.488, 59.43, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:27.489, 59.66, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:28.489, 60.24, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:29.489, 60.00, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:30.490, 60.29, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:31.490, 60.57, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:32.490, 60.75, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:33.491, 60.36, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:34.491, 60.24, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:35.491, 59.89, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:36.491, 60.16, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:37.492, 60.38, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:38.492, 60.24, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:39.492, 59.58, 0, 0, 2542, 13801, 30282, 40
|
||||
2026/10/09 09:25:40.493, 35.40, 0, 0, 465, 810, 30282, 39
|
||||
2026/10/09 09:25:41.493, 24.09, 0, 0, 420, 810, 30282, 39
|
||||
2026/10/09 09:25:42.493, 16.38, 0, 0, 255, 405, 30282, 39
|
||||
2026/10/09 09:25:43.494, 13.72, 0, 0, 195, 405, 30282, 39
|
||||
2026/10/09 09:25:44.494, 11.84, 0, 0, 195, 405, 30282, 39
|
||||
2026/10/09 09:25:45.495, 7.59, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:25:46.495, 7.03, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:25:47.496, 8.02, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:25:48.496, 7.06, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:25:49.497, 6.02, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:25:50.500, 5.97, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:25:51.500, 6.39, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:25:52.501, 6.11, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:25:53.501, 5.93, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:25:54.501, 5.34, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:25:55.502, 5.58, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:25:56.502, 5.57, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:25:57.502, 5.57, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:25:58.503, 5.73, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:25:59.503, 6.07, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:26:00.503, 6.07, 0, 0, 187, 405, 30282, 38
|
||||
2026/10/09 09:26:01.504, 5.82, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:26:02.504, 5.59, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:26:03.504, 5.50, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:26:04.505, 5.44, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:26:05.505, 6.05, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:26:06.505, 5.71, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:26:07.506, 5.81, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:26:08.506, 5.71, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:26:09.506, 5.13, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:26:10.507, 5.00, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:26:11.507, 4.92, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:26:12.507, 5.37, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:26:13.507, 5.57, 0, 0, 187, 405, 30282, 38
|
||||
2026/10/09 09:26:14.508, 5.38, 0, 0, 195, 405, 30282, 38
|
||||
2026/10/09 09:26:15.508, 5.80, 0, 0, 195, 405, 30281, 38
|
||||
2026/10/09 09:26:16.509, 14.49, 100, 91, 855, 14001, 510, 39
|
||||
2026/10/09 09:26:17.509, 78.72, 100, 0, 2917, 13801, 30282, 41
|
||||
2026/10/09 09:26:18.509, 100.97, 100, 0, 2917, 13801, 30282, 41
|
||||
2026/10/09 09:26:19.510, 100.94, 100, 0, 2917, 13801, 30282, 41
|
||||
2026/10/09 09:26:20.510, 101.08, 100, 0, 2917, 13801, 30282, 41
|
||||
2026/10/09 09:26:21.510, 101.54, 100, 0, 2917, 13801, 30282, 41
|
||||
2026/10/09 09:26:22.511, 101.14, 100, 0, 2917, 13801, 30282, 41
|
||||
2026/10/09 09:26:23.511, 101.12, 100, 0, 2910, 13801, 30282, 42
|
||||
2026/10/09 09:26:24.511, 101.08, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:26:25.512, 101.53, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:26:26.514, 101.61, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:26:27.514, 101.79, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:26:28.517, 101.44, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:26:29.517, 101.37, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:26:30.518, 101.46, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:26:31.518, 101.21, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:26:32.518, 101.59, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:26:33.518, 102.12, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:26:34.519, 102.17, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:26:35.519, 102.20, 100, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:26:36.520, 102.05, 100, 0, 2917, 13801, 30282, 43
|
||||
2026/10/09 09:26:37.520, 102.24, 100, 0, 2917, 13801, 30282, 43
|
||||
2026/10/09 09:26:38.520, 102.58, 100, 0, 2917, 13801, 30282, 43
|
||||
2026/10/09 09:26:39.521, 102.44, 100, 0, 2917, 13801, 30282, 43
|
||||
2026/10/09 09:26:40.521, 109.61, 0, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:26:41.522, 81.34, 0, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:26:42.522, 57.87, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:26:43.522, 57.60, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:26:44.523, 57.29, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:26:45.523, 56.88, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:26:46.523, 57.25, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:26:47.525, 57.18, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:26:48.526, 56.98, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:26:49.526, 57.34, 0, 0, 2542, 13801, 30282, 41
|
||||
2026/10/09 09:26:50.527, 57.39, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:26:51.527, 57.35, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:26:52.528, 57.19, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:26:53.528, 57.29, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:26:54.529, 57.45, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:26:55.529, 57.34, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:26:56.530, 57.25, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:26:57.530, 33.99, 0, 0, 472, 810, 30282, 41
|
||||
2026/10/09 09:26:58.531, 22.65, 0, 0, 420, 810, 30282, 41
|
||||
2026/10/09 09:26:59.531, 16.42, 0, 0, 255, 405, 30282, 41
|
||||
2026/10/09 09:27:00.531, 13.00, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:01.532, 8.23, 0, 0, 195, 405, 30282, 40
|
||||
2026/10/09 09:27:02.533, 11.22, 89, 1, 495, 13801, 30282, 41
|
||||
2026/10/09 09:27:03.533, 84.05, 81, 1, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:27:04.534, 84.25, 11, 0, 2917, 13801, 30282, 42
|
||||
2026/10/09 09:27:05.534, 84.19, 81, 1, 2917, 13801, 30282, 43
|
||||
2026/10/09 09:27:06.534, 86.34, 81, 1, 2917, 13801, 30282, 43
|
||||
2026/10/09 09:27:07.535, 81.81, 0, 0, 2917, 13801, 30282, 43
|
||||
2026/10/09 09:27:08.535, 77.34, 0, 0, 2797, 13801, 30282, 42
|
||||
2026/10/09 09:27:09.536, 58.29, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:27:10.537, 57.37, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:27:11.540, 58.22, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:27:12.540, 57.90, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:27:13.540, 57.67, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:27:14.541, 57.50, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:27:15.541, 57.76, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:27:16.541, 57.93, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:27:17.542, 58.07, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:27:18.542, 57.77, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:27:19.542, 58.06, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:27:20.544, 57.99, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:27:21.544, 58.09, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:27:22.544, 58.42, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:27:23.545, 58.10, 0, 0, 2542, 13801, 30282, 42
|
||||
2026/10/09 09:27:24.545, 34.90, 0, 0, 472, 810, 30282, 42
|
||||
2026/10/09 09:27:25.546, 26.85, 0, 0, 405, 810, 30282, 41
|
||||
2026/10/09 09:27:26.546, 13.94, 0, 0, 247, 405, 30282, 41
|
||||
2026/10/09 09:27:27.547, 11.60, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:28.547, 8.12, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:29.548, 6.17, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:30.548, 5.99, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:31.549, 5.87, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:32.549, 5.76, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:33.550, 5.71, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:34.551, 5.71, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:35.551, 5.68, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:36.551, 5.94, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:37.552, 5.68, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:38.552, 6.28, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:39.552, 6.11, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:40.553, 6.16, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:41.553, 6.50, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:42.553, 6.03, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:43.554, 6.15, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:44.554, 5.92, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:45.555, 5.72, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:46.555, 6.22, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:47.556, 5.79, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:48.556, 7.42, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:49.556, 6.87, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:50.557, 6.55, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:51.557, 6.81, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:52.557, 6.15, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:53.558, 6.24, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:54.558, 7.68, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:55.559, 6.92, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:56.559, 5.24, 0, 0, 195, 405, 30282, 41
|
||||
2026/10/09 09:27:57.559, 5.52, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:27:58.800, 64.95, 43, 32, 2865, 13801, 31044, 43
|
||||
2026/10/09 09:27:59.801, 121.17, 100, 1, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:28:00.801, 121.17, 100, 1, 2917, 13801, 31044, 44
|
||||
2026/10/09 09:28:01.802, 120.89, 100, 1, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:28:02.802, 120.83, 100, 1, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:28:03.802, 119.90, 100, 1, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:28:04.803, 120.52, 100, 1, 2902, 13801, 31044, 44
|
||||
2026/10/09 09:28:05.803, 119.46, 100, 1, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:28:06.803, 120.91, 100, 1, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:28:07.803, 120.60, 100, 1, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:28:08.804, 122.03, 100, 1, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:28:09.804, 121.86, 100, 1, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:28:10.805, 121.26, 100, 1, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:28:11.805, 121.99, 100, 1, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:28:12.806, 121.39, 100, 1, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:28:13.806, 122.26, 100, 1, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:28:14.806, 121.34, 100, 1, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:28:15.808, 121.88, 100, 1, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:28:16.809, 121.93, 100, 1, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:28:17.809, 122.07, 100, 1, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:28:18.809, 122.53, 100, 1, 2902, 13801, 31044, 46
|
||||
2026/10/09 09:28:19.810, 130.23, 36, 24, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:28:20.810, 83.19, 0, 0, 2902, 13801, 31044, 45
|
||||
2026/10/09 09:28:21.810, 68.23, 0, 0, 2542, 13801, 1, 44
|
||||
2026/10/09 09:28:22.879, 80.00, 0, 0, 2827, 13801, 584, 45
|
||||
2026/10/09 09:28:23.879, 104.48, 100, 0, 2902, 13801, 584, 45
|
||||
2026/10/09 09:28:24.879, 104.78, 100, 0, 2902, 13801, 584, 45
|
||||
2026/10/09 09:28:25.880, 104.75, 100, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:26.880, 104.21, 100, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:27.881, 104.40, 100, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:28.881, 104.59, 100, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:29.882, 104.69, 100, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:30.882, 104.33, 100, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:31.883, 104.14, 100, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:32.884, 104.19, 100, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:33.884, 91.98, 4, 0, 2902, 13801, 584, 45
|
||||
2026/10/09 09:28:34.885, 85.61, 0, 0, 2902, 14001, 584, 45
|
||||
2026/10/09 09:28:35.885, 99.67, 100, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:36.885, 102.37, 100, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:37.887, 102.81, 100, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:38.887, 103.20, 100, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:39.888, 103.21, 100, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:40.888, 102.88, 100, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:41.889, 102.89, 100, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:42.889, 104.16, 100, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:43.890, 106.62, 100, 0, 2902, 13801, 584, 47
|
||||
2026/10/09 09:28:44.890, 106.60, 100, 0, 2902, 13801, 584, 47
|
||||
2026/10/09 09:28:45.892, 107.20, 100, 0, 2902, 13801, 584, 47
|
||||
2026/10/09 09:28:46.892, 92.81, 0, 0, 2902, 13801, 584, 46
|
||||
2026/10/09 09:28:47.892, 91.26, 0, 0, 2902, 14001, 2572, 46
|
||||
2026/10/09 09:28:48.893, 107.04, 100, 0, 2902, 13801, 2572, 47
|
||||
2026/10/09 09:28:49.893, 109.66, 100, 0, 2902, 13801, 2572, 47
|
||||
2026/10/09 09:28:50.893, 109.09, 100, 0, 2902, 13801, 2572, 47
|
||||
2026/10/09 09:28:51.894, 108.67, 100, 0, 2902, 13801, 2572, 47
|
||||
2026/10/09 09:28:52.894, 109.48, 100, 0, 2902, 13801, 2572, 47
|
||||
2026/10/09 09:28:53.894, 109.80, 100, 0, 2902, 13801, 2572, 47
|
||||
2026/10/09 09:28:54.895, 109.90, 100, 0, 2902, 13801, 2572, 47
|
||||
2026/10/09 09:28:55.895, 110.11, 100, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:28:56.896, 110.40, 100, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:28:57.896, 109.73, 100, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:28:58.896, 109.55, 100, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:28:59.897, 95.06, 0, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:29:00.898, 88.76, 18, 0, 2902, 13801, 2572, 45
|
||||
2026/10/09 09:29:01.900, 68.08, 0, 0, 2542, 13801, 2, 45
|
||||
2026/10/09 09:29:02.911, 81.77, 0, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:29:03.911, 107.27, 100, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:29:04.912, 107.22, 100, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:29:05.912, 106.81, 100, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:29:06.912, 107.10, 100, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:29:07.913, 107.13, 100, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:29:08.914, 108.14, 100, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:29:09.915, 108.64, 100, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:29:10.915, 108.98, 100, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:29:11.915, 108.21, 100, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:29:12.916, 107.35, 100, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:29:13.916, 106.43, 100, 0, 2902, 13801, 2572, 46
|
||||
2026/10/09 09:29:14.917, 94.45, 0, 0, 2902, 13801, 2572, 45
|
||||
2026/10/09 09:29:15.917, 87.83, 0, 0, 2902, 13801, 2572, 45
|
||||
2026/10/09 09:29:16.918, 65.56, 0, 0, 2542, 13801, 2569, 44
|
||||
2026/10/09 09:29:17.918, 73.71, 5, 3, 2640, 13801, 8728, 45
|
||||
2026/10/09 09:29:18.918, 112.17, 100, 0, 2902, 13801, 8728, 46
|
||||
2026/10/09 09:29:19.919, 112.32, 100, 0, 2902, 13801, 8728, 46
|
||||
2026/10/09 09:29:20.919, 111.49, 100, 0, 2902, 13801, 8728, 46
|
||||
2026/10/09 09:29:21.919, 111.10, 100, 0, 2902, 13801, 8728, 46
|
||||
2026/10/09 09:29:22.920, 111.44, 100, 0, 2902, 13801, 8728, 46
|
||||
2026/10/09 09:29:23.920, 112.03, 100, 0, 2902, 13801, 8728, 46
|
||||
2026/10/09 09:29:24.920, 112.57, 100, 0, 2902, 13801, 8728, 46
|
||||
2026/10/09 09:29:25.921, 112.01, 100, 0, 2902, 13801, 8728, 46
|
||||
2026/10/09 09:29:26.921, 111.47, 100, 0, 2902, 13801, 8728, 46
|
||||
2026/10/09 09:29:27.921, 115.98, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:29:28.921, 86.35, 0, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:29:29.923, 79.40, 0, 0, 2647, 13801, 8728, 44
|
||||
2026/10/09 09:29:30.923, 62.52, 0, 0, 2542, 13801, 8728, 44
|
||||
2026/10/09 09:29:31.924, 62.79, 0, 0, 2542, 13801, 8728, 44
|
||||
2026/10/09 09:29:32.924, 63.29, 0, 0, 2542, 13801, 8728, 44
|
||||
2026/10/09 09:29:33.925, 64.38, 0, 0, 2542, 13801, 8728, 44
|
||||
2026/10/09 09:29:34.925, 85.54, 46, 1, 2902, 13801, 8728, 44
|
||||
2026/10/09 09:29:35.925, 86.07, 0, 0, 2902, 13801, 8728, 44
|
||||
2026/10/09 09:29:36.926, 70.69, 0, 0, 2542, 13801, 2, 44
|
||||
2026/10/09 09:29:37.930, 80.67, 0, 0, 2835, 13801, 8728, 45
|
||||
2026/10/09 09:29:38.930, 108.59, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:29:39.930, 109.20, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:29:40.931, 108.99, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:29:41.931, 109.61, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:29:42.931, 109.48, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:29:43.932, 109.30, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:29:44.932, 108.72, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:29:45.933, 108.78, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:29:46.934, 108.84, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:29:47.934, 109.04, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:29:48.935, 109.19, 100, 0, 2902, 13801, 8728, 45
|
||||
2026/10/09 09:29:49.935, 103.49, 95, 12, 2902, 13801, 8728, 44
|
||||
2026/10/09 09:29:50.935, 85.74, 0, 0, 2902, 13801, 8728, 44
|
||||
2026/10/09 09:29:51.936, 69.09, 0, 0, 2542, 13801, 8728, 43
|
||||
2026/10/09 09:29:52.938, 62.32, 0, 0, 2542, 13801, 8728, 43
|
||||
2026/10/09 09:29:53.939, 62.53, 0, 0, 2542, 13801, 8728, 43
|
||||
2026/10/09 09:29:54.939, 63.38, 0, 0, 2542, 13801, 8728, 43
|
||||
2026/10/09 09:29:55.939, 76.29, 46, 1, 2902, 13801, 8728, 44
|
||||
2026/10/09 09:29:56.941, 89.33, 0, 0, 2902, 13801, 8728, 44
|
||||
2026/10/09 09:29:57.941, 86.40, 0, 0, 2902, 13801, 8728, 44
|
||||
2026/10/09 09:29:58.941, 66.93, 0, 0, 2542, 13801, 31088, 43
|
||||
2026/10/09 09:29:59.942, 282.73, 78, 29, 2857, 13801, 31088, 55
|
||||
2026/10/09 09:30:00.942, 437.12, 100, 34, 2857, 13801, 31088, 52
|
||||
2026/10/09 09:30:01.942, 438.90, 100, 42, 2850, 13801, 31088, 54
|
||||
2026/10/09 09:30:02.943, 439.16, 100, 35, 2850, 13801, 31088, 57
|
||||
2026/10/09 09:30:03.943, 434.74, 100, 33, 2850, 13801, 31088, 53
|
||||
2026/10/09 09:30:04.944, 439.25, 100, 42, 2857, 13801, 31088, 55
|
||||
2026/10/09 09:30:05.944, 439.65, 100, 35, 2850, 13801, 31088, 58
|
||||
2026/10/09 09:30:06.945, 439.62, 100, 33, 2850, 13801, 31088, 55
|
||||
2026/10/09 09:30:07.945, 440.15, 100, 42, 2850, 13801, 31088, 56
|
||||
2026/10/09 09:30:08.946, 440.65, 100, 35, 2857, 13801, 31088, 59
|
||||
2026/10/09 09:30:09.947, 440.49, 100, 33, 2850, 13801, 31088, 55
|
||||
2026/10/09 09:30:10.948, 438.63, 100, 42, 2850, 13801, 31088, 57
|
||||
2026/10/09 09:30:11.948, 440.69, 100, 34, 2842, 13801, 31088, 59
|
||||
2026/10/09 09:30:12.949, 437.54, 100, 33, 2857, 13801, 31088, 56
|
||||
2026/10/09 09:30:13.949, 441.41, 100, 41, 2850, 13801, 31088, 57
|
||||
2026/10/09 09:30:14.949, 441.76, 100, 35, 2850, 13801, 31088, 60
|
||||
2026/10/09 09:30:15.950, 440.53, 100, 33, 2842, 13801, 31088, 56
|
||||
2026/10/09 09:30:16.951, 443.29, 100, 42, 2857, 13801, 31088, 58
|
||||
2026/10/09 09:30:17.951, 442.86, 100, 35, 2850, 13801, 31088, 61
|
||||
2026/10/09 09:30:18.953, 438.49, 100, 33, 2850, 13801, 31088, 57
|
||||
2026/10/09 09:30:19.954, 294.46, 100, 54, 2902, 13801, 31088, 50
|
||||
2026/10/09 09:30:20.954, 91.68, 0, 0, 2902, 13801, 31088, 49
|
||||
2026/10/09 09:30:21.955, 74.84, 0, 0, 2542, 13801, 31088, 48
|
||||
2026/10/09 09:30:22.955, 66.00, 0, 0, 2542, 13801, 31088, 48
|
||||
2026/10/09 09:30:23.956, 65.63, 0, 0, 2542, 13801, 31088, 48
|
||||
2026/10/09 09:30:24.956, 65.76, 0, 0, 2542, 13801, 31088, 48
|
||||
2026/10/09 09:30:25.961, 66.14, 0, 0, 2542, 13801, 31088, 47
|
||||
2026/10/09 09:30:26.962, 65.88, 0, 0, 2542, 13801, 31088, 47
|
||||
2026/10/09 09:30:27.964, 65.65, 0, 0, 2542, 13801, 31088, 47
|
||||
2026/10/09 09:30:28.964, 64.68, 0, 0, 2542, 13801, 31088, 47
|
||||
2026/10/09 09:30:29.964, 64.49, 0, 0, 2542, 13801, 31088, 47
|
||||
2026/10/09 09:30:30.965, 64.25, 0, 0, 2542, 13801, 31088, 47
|
||||
2026/10/09 09:30:31.965, 64.80, 0, 0, 2542, 13801, 31088, 47
|
||||
2026/10/09 09:30:32.966, 65.39, 0, 0, 2542, 13801, 31088, 47
|
||||
2026/10/09 09:30:33.966, 65.17, 0, 0, 2542, 13801, 31088, 46
|
||||
2026/10/09 09:30:34.966, 64.83, 0, 0, 2542, 13801, 31088, 46
|
||||
2026/10/09 09:30:35.967, 64.33, 0, 0, 2542, 13801, 31088, 46
|
||||
2026/10/09 09:30:36.967, 63.90, 0, 0, 2542, 13801, 31088, 46
|
||||
2026/10/09 09:30:37.968, 59.26, 0, 0, 2205, 810, 31088, 45
|
||||
2026/10/09 09:30:38.968, 29.40, 0, 0, 412, 810, 31088, 45
|
||||
2026/10/09 09:30:39.968, 19.55, 0, 0, 255, 405, 31088, 45
|
||||
2026/10/09 09:30:40.969, 17.92, 0, 0, 195, 405, 31088, 45
|
||||
2026/10/09 09:30:41.969, 14.79, 0, 0, 195, 405, 31088, 44
|
||||
2026/10/09 09:30:42.970, 12.58, 0, 0, 195, 405, 31088, 44
|
||||
2026/10/09 09:30:43.970, 13.92, 0, 0, 195, 13801, 31088, 45
|
||||
2026/10/09 09:30:44.970, 83.59, 46, 1, 2902, 13801, 31088, 46
|
||||
2026/10/09 09:30:45.971, 92.34, 46, 1, 2902, 13801, 31088, 46
|
||||
2026/10/09 09:30:46.971, 91.88, 46, 1, 2902, 13801, 31088, 46
|
||||
2026/10/09 09:30:47.971, 88.53, 0, 0, 2902, 13801, 31088, 46
|
||||
2026/10/09 09:30:48.972, 76.36, 0, 0, 2542, 13801, 31088, 45
|
||||
2026/10/09 09:30:49.972, 63.82, 0, 0, 2542, 13801, 31088, 45
|
||||
2026/10/09 09:30:50.972, 64.02, 0, 0, 2542, 13801, 31088, 45
|
||||
2026/10/09 09:30:51.973, 63.89, 0, 0, 2542, 13801, 4, 45
|
||||
2026/10/09 09:30:52.974, 136.62, 0, 0, 2865, 13801, 31086, 50
|
||||
2026/10/09 09:30:53.975, 280.06, 100, 17, 2895, 13801, 31086, 51
|
||||
2026/10/09 09:30:54.975, 280.93, 100, 17, 2895, 13801, 31086, 51
|
||||
2026/10/09 09:30:55.976, 281.56, 100, 17, 2895, 13801, 31086, 51
|
||||
2026/10/09 09:30:56.976, 281.60, 100, 17, 2895, 13801, 31086, 52
|
||||
2026/10/09 09:30:57.976, 281.03, 100, 17, 2895, 13801, 31086, 52
|
||||
2026/10/09 09:30:58.977, 281.69, 100, 17, 2895, 13801, 31086, 52
|
||||
2026/10/09 09:30:59.977, 281.86, 100, 17, 2895, 13801, 31086, 52
|
||||
2026/10/09 09:31:00.977, 282.22, 100, 17, 2895, 13801, 31086, 52
|
||||
2026/10/09 09:31:01.978, 282.35, 100, 17, 2895, 13801, 31086, 52
|
||||
2026/10/09 09:31:02.978, 282.92, 100, 17, 2895, 13801, 31086, 52
|
||||
2026/10/09 09:31:03.979, 283.50, 100, 17, 2895, 13801, 31086, 52
|
||||
2026/10/09 09:31:04.979, 283.65, 100, 17, 2895, 13801, 31086, 53
|
||||
2026/10/09 09:31:05.979, 283.10, 100, 17, 2895, 13801, 31086, 53
|
||||
2026/10/09 09:31:06.980, 282.61, 100, 17, 2895, 13801, 31086, 53
|
||||
2026/10/09 09:31:07.980, 282.42, 100, 17, 2895, 13801, 31086, 53
|
||||
2026/10/09 09:31:08.981, 282.69, 100, 17, 2895, 13801, 31086, 53
|
||||
2026/10/09 09:31:09.982, 283.02, 100, 17, 2895, 13801, 31086, 53
|
||||
2026/10/09 09:31:10.982, 283.45, 100, 17, 2895, 13801, 31086, 53
|
||||
2026/10/09 09:31:11.983, 283.18, 100, 17, 2887, 13801, 31086, 53
|
||||
2026/10/09 09:31:12.983, 249.55, 100, 17, 2850, 13801, 31086, 49
|
||||
2026/10/09 09:31:13.983, 91.15, 0, 0, 2902, 13801, 31086, 48
|
||||
2026/10/09 09:31:14.983, 78.46, 0, 0, 2542, 13801, 31086, 47
|
||||
2026/10/09 09:31:15.984, 63.98, 0, 0, 2542, 13801, 31086, 47
|
||||
2026/10/09 09:31:16.984, 64.04, 0, 0, 2542, 13801, 31086, 47
|
||||
2026/10/09 09:31:17.984, 63.96, 0, 0, 2542, 13801, 31086, 47
|
||||
2026/10/09 09:31:18.985, 64.00, 0, 0, 2542, 13801, 31086, 47
|
||||
2026/10/09 09:31:19.985, 64.55, 0, 0, 2542, 13801, 31086, 46
|
||||
2026/10/09 09:31:20.985, 64.01, 0, 0, 2542, 13801, 31086, 46
|
||||
2026/10/09 09:31:21.986, 63.37, 0, 0, 2542, 13801, 31086, 46
|
||||
2026/10/09 09:31:22.997, 63.87, 0, 0, 2542, 13801, 31086, 46
|
||||
2026/10/09 09:31:23.997, 63.95, 0, 0, 2542, 13801, 31086, 46
|
||||
2026/10/09 09:31:24.997, 64.34, 0, 0, 2542, 13801, 31086, 46
|
||||
2026/10/09 09:31:25.998, 64.84, 0, 0, 2542, 13801, 31086, 46
|
||||
2026/10/09 09:31:26.998, 65.71, 0, 0, 2542, 13801, 31086, 46
|
||||
2026/10/09 09:31:27.998, 65.46, 0, 0, 2542, 13801, 31086, 46
|
||||
2026/10/09 09:31:28.998, 64.32, 0, 0, 2542, 13801, 31086, 46
|
||||
2026/10/09 09:31:29.999, 58.37, 0, 0, 2212, 810, 31086, 45
|
||||
2026/10/09 09:31:30.999, 31.87, 0, 0, 427, 810, 31086, 45
|
||||
2026/10/09 09:31:32.000, 20.65, 0, 0, 255, 405, 31086, 44
|
||||
2026/10/09 09:31:33.000, 12.89, 0, 0, 195, 405, 31086, 44
|
||||
2026/10/09 09:31:34.000, 11.45, 0, 0, 195, 405, 31086, 44
|
||||
2026/10/09 09:31:35.001, 11.88, 0, 0, 195, 405, 31086, 44
|
||||
2026/10/09 09:31:36.001, 12.13, 0, 0, 195, 405, 31086, 44
|
||||
2026/10/09 09:31:37.001, 68.13, 47, 1, 2902, 13801, 31086, 46
|
||||
2026/10/09 09:31:38.001, 92.35, 46, 1, 2902, 13801, 31086, 46
|
||||
2026/10/09 09:31:39.003, 91.90, 46, 1, 2902, 13801, 31086, 46
|
||||
2026/10/09 09:31:40.003, 89.02, 0, 0, 2902, 13801, 31086, 46
|
||||
2026/10/09 09:31:41.003, 85.81, 0, 0, 2902, 13801, 31086, 45
|
||||
2026/10/09 09:31:42.004, 63.83, 0, 0, 2542, 13801, 31086, 45
|
||||
2026/10/09 09:31:43.005, 64.17, 0, 0, 2542, 13801, 31086, 45
|
||||
2026/10/09 09:31:44.005, 63.16, 0, 0, 2542, 13801, 31086, 45
|
||||
2026/10/09 09:31:45.006, 73.41, 0, 0, 2550, 13801, 31078, 46
|
||||
2026/10/09 09:31:46.006, 150.52, 100, 4, 2902, 13801, 31078, 47
|
||||
2026/10/09 09:31:47.007, 151.11, 100, 4, 2902, 13801, 31078, 47
|
||||
2026/10/09 09:31:48.007, 151.67, 100, 4, 2902, 13801, 31078, 47
|
||||
2026/10/09 09:31:49.007, 152.14, 100, 4, 2902, 13801, 31078, 47
|
||||
2026/10/09 09:31:50.008, 152.76, 100, 4, 2902, 13801, 31078, 47
|
||||
2026/10/09 09:31:51.009, 153.29, 100, 4, 2902, 13801, 31078, 47
|
||||
2026/10/09 09:31:52.009, 152.19, 100, 4, 2902, 13801, 31078, 47
|
||||
2026/10/09 09:31:53.011, 150.78, 100, 4, 2902, 13801, 31078, 47
|
||||
2026/10/09 09:31:54.011, 151.14, 100, 4, 2902, 13801, 31078, 47
|
||||
2026/10/09 09:31:55.011, 151.63, 100, 4, 2902, 13801, 31078, 47
|
||||
2026/10/09 09:31:56.012, 151.49, 100, 4, 2902, 13801, 31078, 48
|
||||
2026/10/09 09:31:57.012, 151.60, 100, 4, 2902, 13801, 31078, 47
|
||||
2026/10/09 09:31:58.012, 151.94, 100, 4, 2902, 13801, 31078, 47
|
||||
2026/10/09 09:31:59.013, 152.10, 100, 4, 2902, 13801, 31078, 48
|
||||
2026/10/09 09:32:00.013, 152.14, 100, 4, 2902, 13801, 31078, 47
|
||||
2026/10/09 09:32:01.014, 151.90, 100, 4, 2902, 13801, 31078, 48
|
||||
2026/10/09 09:32:02.014, 151.59, 100, 4, 2902, 13801, 31078, 48
|
||||
2026/10/09 09:32:03.015, 152.02, 100, 4, 2902, 13801, 31078, 48
|
||||
2026/10/09 09:32:04.016, 152.50, 100, 4, 2902, 13801, 31078, 48
|
||||
2026/10/09 09:32:05.016, 152.26, 100, 4, 2902, 13801, 31078, 48
|
||||
2026/10/09 09:32:06.017, 126.92, 8, 0, 2902, 13801, 31078, 46
|
||||
2026/10/09 09:32:07.017, 86.76, 0, 0, 2902, 13801, 31078, 46
|
||||
2026/10/09 09:32:08.018, 67.73, 0, 0, 2542, 13801, 31078, 45
|
||||
2026/10/09 09:32:09.019, 62.97, 0, 0, 2542, 13801, 31078, 45
|
||||
2026/10/09 09:32:10.019, 62.94, 0, 0, 2542, 13801, 31078, 45
|
||||
2026/10/09 09:32:11.019, 63.60, 0, 0, 2542, 13801, 31078, 45
|
||||
2026/10/09 09:32:12.020, 64.42, 0, 0, 2542, 13801, 31078, 45
|
||||
2026/10/09 09:32:13.020, 64.88, 0, 0, 2542, 13801, 31078, 44
|
||||
2026/10/09 09:32:14.021, 64.02, 0, 0, 2542, 13801, 31078, 44
|
||||
2026/10/09 09:32:15.022, 63.05, 0, 0, 2542, 13801, 31078, 44
|
||||
2026/10/09 09:32:16.022, 62.57, 0, 0, 2542, 13801, 31078, 44
|
||||
2026/10/09 09:32:17.022, 63.00, 0, 0, 2542, 13801, 31078, 44
|
||||
2026/10/09 09:32:18.027, 63.54, 0, 0, 2542, 13801, 31078, 44
|
||||
2026/10/09 09:32:19.029, 63.67, 0, 0, 2542, 13801, 31078, 44
|
||||
2026/10/09 09:32:20.030, 63.47, 0, 0, 2542, 13801, 31078, 44
|
||||
2026/10/09 09:32:21.030, 63.64, 0, 0, 2542, 13801, 31078, 44
|
||||
2026/10/09 09:32:22.031, 63.33, 0, 0, 2542, 13801, 31078, 44
|
||||
2026/10/09 09:32:23.032, 58.01, 0, 0, 2212, 810, 31078, 43
|
||||
2026/10/09 09:32:24.033, 27.62, 0, 0, 427, 810, 31078, 43
|
||||
2026/10/09 09:32:25.033, 20.32, 0, 0, 255, 405, 31078, 43
|
||||
2026/10/09 09:32:26.034, 13.54, 0, 0, 195, 405, 31078, 42
|
||||
2026/10/09 09:32:27.035, 13.25, 0, 0, 195, 405, 31078, 42
|
||||
2026/10/09 09:32:28.036, 18.28, 0, 0, 780, 13801, 31078, 43
|
||||
2026/10/09 09:32:29.037, 66.39, 14, 0, 2542, 13801, 31078, 44
|
||||
2026/10/09 09:32:30.037, 89.76, 46, 1, 2902, 13801, 31078, 44
|
||||
2026/10/09 09:32:31.039, 90.27, 46, 1, 2902, 13801, 31078, 44
|
||||
2026/10/09 09:32:32.039, 88.51, 49, 1, 2902, 13801, 31078, 44
|
||||
2026/10/09 09:32:33.039, 86.09, 0, 0, 2902, 13801, 31078, 44
|
||||
2026/10/09 09:32:34.040, 71.17, 0, 0, 2542, 13801, 31078, 43
|
||||
2026/10/09 09:32:35.040, 62.98, 0, 0, 2542, 13801, 31078, 43
|
||||
2026/10/09 09:32:36.041, 63.26, 0, 0, 2542, 13801, 31078, 43
|
||||
2026/10/09 09:32:37.041, 62.69, 0, 0, 2542, 13801, 1, 43
|
||||
2026/10/09 09:32:38.041, 66.16, 4, 2, 2542, 14001, 1, 43
|
||||
2026/10/09 09:32:39.043, 61.73, 0, 0, 2542, 14001, 1, 43
|
||||
2026/10/09 09:32:40.044, 41.91, 0, 0, 982, 7001, 1, 42
|
||||
2026/10/09 09:32:41.044, 29.15, 0, 0, 607, 7001, 1, 42
|
||||
2026/10/09 09:32:42.044, 26.95, 0, 0, 405, 810, 1, 42
|
||||
2026/10/09 09:32:43.046, 25.65, 0, 0, 255, 810, 1, 42
|
||||
2026/10/09 09:32:44.047, 16.14, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:32:45.048, 11.85, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:32:46.049, 10.58, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:32:47.050, 8.51, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:32:48.051, 6.24, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:32:49.052, 6.01, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:32:50.054, 7.89, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:32:51.055, 7.17, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:32:52.057, 6.78, 0, 0, 195, 405, 1, 41
|
||||
2026/10/09 09:32:53.057, 6.43, 0, 0, 195, 405, 1, 41
|
||||
|
17
docs/analysis/mhpow/b3/rows/rtx5090-r1/progress.log
Normal file
17
docs/analysis/mhpow/b3/rows/rtx5090-r1/progress.log
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
row rc=0 --n 20 --kernel 1 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n20-k1
|
||||
row rc=0 --n 20 --kernel 2 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n20-k2
|
||||
row rc=0 --n 22 --kernel 1 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n22-k1
|
||||
row rc=0 --n 22 --kernel 2 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n22-k2
|
||||
row rc=0 --n 24 --kernel 1 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n24-k1
|
||||
row rc=0 --n 24 --kernel 2 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n24-k2
|
||||
row rc=0 --n 20 --kernel 1 --layout aos --min-label-s 20 --check 2 --k 64 --tag abl-n20-k1-aos
|
||||
row rc=0 --n 20 --B 1 --kernel 2 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B1-k2
|
||||
row rc=0 --n 20 --B 1 --kernel 1 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B1-k1
|
||||
row rc=0 --n 20 --B 32 --kernel 2 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B32-k2
|
||||
row rc=0 --n 20 --B 32 --kernel 1 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B32-k1
|
||||
row rc=0 --n 20 --B 128 --kernel 2 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B128-k2
|
||||
row rc=0 --n 20 --B 128 --kernel 1 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B128-k1
|
||||
row rc=0 --n 14 --kernel 1 --layout soa --min-label-s 20 --check 2 --k 64 --tag diag-n14-k1
|
||||
row rc=0 --n 16 --kernel 1 --layout soa --min-label-s 20 --check 2 --k 64 --tag diag-n16-k1
|
||||
row rc=0 --n 18 --kernel 1 --layout soa --min-label-s 20 --check 2 --k 64 --tag diag-n18-k1
|
||||
DONE 2026-10-09T09:32:53Z
|
||||
16
docs/analysis/mhpow/b3/rows/rtx5090-r1/rows.jsonl
Normal file
16
docs/analysis/mhpow/b3/rows/rtx5090-r1/rows.jsonl
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{"tag":"main-n20-k1","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":476,"Bmax":476,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":9,"graph_s":0.0331,"state_alloc_s":0.0044,"label_s_per_pass":2.374543,"labels_per_s":210197127.8,"labels_per_s_per_inst":441590.6,"ns_per_label_per_inst":2264.54,"merkle_s":0.049581,"prove_s":0.050169,"verify_all_s":0.0585,"accepted":476,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":29.70,"oracle":"IDENTICAL","label_window_unix_ms":[1791537621586,1791537642960],"free_gib":30.86,"per_inst_MiB":64.1}
|
||||
{"tag":"main-n20-k2","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":476,"Bmax":476,"layout":"soa","kernel":"k2","k":64,"wrong_edge":0,"passes":14,"graph_s":0.0319,"state_alloc_s":0.0041,"label_s_per_pass":1.450105,"labels_per_s":344197277.0,"labels_per_s_per_inst":723103.5,"ns_per_label_per_inst":1382.93,"merkle_s":0.049909,"prove_s":0.048875,"verify_all_s":0.0624,"accepted":476,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":29.78,"oracle":"IDENTICAL","label_window_unix_ms":[1791537673260,1791537693559],"free_gib":30.86,"per_inst_MiB":64.1}
|
||||
{"tag":"main-n22-k1","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":22,"N":4194304,"inst_MiB":128.0,"B":119,"Bmax":119,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":3,"graph_s":0.1037,"state_alloc_s":0.0059,"label_s_per_pass":9.526424,"labels_per_s":52393443.7,"labels_per_s_per_inst":440281.0,"ns_per_label_per_inst":2271.28,"merkle_s":0.049892,"prove_s":0.018214,"verify_all_s":0.0234,"accepted":119,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":39.44,"oracle":"IDENTICAL","label_window_unix_ms":[1791537724049,1791537752589],"free_gib":30.86,"per_inst_MiB":256.1}
|
||||
{"tag":"main-n22-k2","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":22,"N":4194304,"inst_MiB":128.0,"B":119,"Bmax":119,"layout":"soa","kernel":"k2","k":64,"wrong_edge":0,"passes":4,"graph_s":0.0886,"state_alloc_s":0.0063,"label_s_per_pass":5.810858,"labels_per_s":85894750.4,"labels_per_s_per_inst":721804.6,"ns_per_label_per_inst":1385.42,"merkle_s":0.049737,"prove_s":0.019536,"verify_all_s":0.0188,"accepted":119,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":42.65,"oracle":"IDENTICAL","label_window_unix_ms":[1791537792668,1791537815914],"free_gib":30.86,"per_inst_MiB":256.1}
|
||||
{"tag":"main-n24-k1","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":24,"N":16777216,"inst_MiB":512.0,"B":29,"Bmax":29,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":1,"graph_s":0.3139,"state_alloc_s":0.0105,"label_s_per_pass":37.719477,"labels_per_s":12898887.0,"labels_per_s_per_inst":444789.2,"ns_per_label_per_inst":2248.26,"merkle_s":0.048540,"prove_s":0.007375,"verify_all_s":0.0066,"accepted":29,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":78.12,"oracle":"IDENTICAL","label_window_unix_ms":[1791537859489,1791537897210],"free_gib":30.86,"per_inst_MiB":1024.1}
|
||||
{"tag":"main-n24-k2","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":24,"N":16777216,"inst_MiB":512.0,"B":29,"Bmax":29,"layout":"soa","kernel":"k2","k":64,"wrong_edge":0,"passes":1,"graph_s":0.3160,"state_alloc_s":0.0105,"label_s_per_pass":22.628076,"labels_per_s":21501574.4,"labels_per_s_per_inst":741433.6,"ns_per_label_per_inst":1348.74,"merkle_s":0.048381,"prove_s":0.007364,"verify_all_s":0.0072,"accepted":29,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":78.12,"oracle":"IDENTICAL","label_window_unix_ms":[1791537976560,1791537999189],"free_gib":30.86,"per_inst_MiB":1024.1}
|
||||
{"tag":"abl-n20-k1-aos","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":476,"Bmax":476,"layout":"aos","kernel":"k1","k":64,"wrong_edge":0,"passes":9,"graph_s":0.0306,"state_alloc_s":0.0041,"label_s_per_pass":2.294495,"labels_per_s":217530252.8,"labels_per_s_per_inst":456996.3,"ns_per_label_per_inst":2188.20,"merkle_s":0.065382,"prove_s":0.060450,"verify_all_s":0.0643,"accepted":476,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":2.66,"oracle":"IDENTICAL","label_window_unix_ms":[1791538078235,1791538098877],"free_gib":30.86,"per_inst_MiB":64.1}
|
||||
{"tag":"ladder-n20-B1-k2","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":1,"Bmax":476,"layout":"soa","kernel":"k2","k":64,"wrong_edge":0,"passes":8,"graph_s":0.0334,"state_alloc_s":0.0089,"label_s_per_pass":1.335745,"labels_per_s":785012.1,"labels_per_s_per_inst":785012.1,"ns_per_label_per_inst":1273.87,"merkle_s":0.000410,"prove_s":0.000791,"verify_all_s":0.0042,"accepted":1,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":1.36,"oracle":"IDENTICAL","label_window_unix_ms":[1791538102201,1791538112888],"free_gib":30.86,"per_inst_MiB":64.1}
|
||||
{"tag":"ladder-n20-B1-k1","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":1,"Bmax":476,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":5,"graph_s":0.0338,"state_alloc_s":0.0020,"label_s_per_pass":2.217935,"labels_per_s":472771.3,"labels_per_s_per_inst":472771.3,"ns_per_label_per_inst":2115.19,"merkle_s":0.000462,"prove_s":0.000850,"verify_all_s":0.0033,"accepted":1,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":1.36,"oracle":"IDENTICAL","label_window_unix_ms":[1791538114646,1791538125737],"free_gib":30.86,"per_inst_MiB":64.1}
|
||||
{"tag":"ladder-n20-B32-k2","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":32,"Bmax":476,"layout":"soa","kernel":"k2","k":64,"wrong_edge":0,"passes":8,"graph_s":0.0325,"state_alloc_s":0.0018,"label_s_per_pass":1.384905,"labels_per_s":24228694.2,"labels_per_s_per_inst":757146.7,"ns_per_label_per_inst":1320.75,"merkle_s":0.003666,"prove_s":0.006195,"verify_all_s":0.0075,"accepted":32,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":2.99,"oracle":"IDENTICAL","label_window_unix_ms":[1791538127648,1791538138727],"free_gib":30.86,"per_inst_MiB":64.1}
|
||||
{"tag":"ladder-n20-B32-k1","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":32,"Bmax":476,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":5,"graph_s":0.0323,"state_alloc_s":0.0081,"label_s_per_pass":2.321576,"labels_per_s":14453301.7,"labels_per_s_per_inst":451665.7,"ns_per_label_per_inst":2214.03,"merkle_s":0.003674,"prove_s":0.007400,"verify_all_s":0.0082,"accepted":32,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":3.10,"oracle":"IDENTICAL","label_window_unix_ms":[1791538142134,1791538153741],"free_gib":30.86,"per_inst_MiB":64.1}
|
||||
{"tag":"ladder-n20-B128-k2","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":128,"Bmax":476,"layout":"soa","kernel":"k2","k":64,"wrong_edge":0,"passes":7,"graph_s":0.0327,"state_alloc_s":0.0040,"label_s_per_pass":1.444609,"labels_per_s":92909371.3,"labels_per_s_per_inst":725854.5,"ns_per_label_per_inst":1377.69,"merkle_s":0.013555,"prove_s":0.018398,"verify_all_s":0.0256,"accepted":128,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":9.23,"oracle":"IDENTICAL","label_window_unix_ms":[1791538157341,1791538167454],"free_gib":30.86,"per_inst_MiB":64.1}
|
||||
{"tag":"ladder-n20-B128-k1","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":20,"N":1048576,"inst_MiB":32.0,"B":128,"Bmax":476,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":5,"graph_s":0.0332,"state_alloc_s":0.0098,"label_s_per_pass":2.360619,"labels_per_s":56857012.6,"labels_per_s_per_inst":444195.4,"ns_per_label_per_inst":2251.26,"merkle_s":0.013533,"prove_s":0.017153,"verify_all_s":0.0224,"accepted":128,"checked":1,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":9.39,"oracle":"IDENTICAL","label_window_unix_ms":[1791538177197,1791538189001],"free_gib":30.86,"per_inst_MiB":64.1}
|
||||
{"tag":"diag-n14-k1","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":14,"N":16384,"inst_MiB":0.5,"B":28102,"Bmax":28102,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":294,"graph_s":0.0046,"state_alloc_s":0.0136,"label_s_per_pass":0.068155,"labels_per_s":6755570135.5,"labels_per_s_per_inst":240394.6,"ns_per_label_per_inst":4159.83,"merkle_s":0.047129,"prove_s":1.925969,"verify_all_s":1.7964,"accepted":28102,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":28.27,"oracle":"IDENTICAL","label_window_unix_ms":[1791538198942,1791538218984],"free_gib":30.86,"per_inst_MiB":1.1}
|
||||
{"tag":"diag-n16-k1","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":16,"N":65536,"inst_MiB":2.0,"B":7457,"Bmax":7457,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":134,"graph_s":0.0052,"state_alloc_s":0.0229,"label_s_per_pass":0.149479,"labels_per_s":3269377676.3,"labels_per_s_per_inst":438430.7,"ns_per_label_per_inst":2280.86,"merkle_s":0.049755,"prove_s":0.648247,"verify_all_s":0.5440,"accepted":7457,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":30.35,"oracle":"IDENTICAL","label_window_unix_ms":[1791538252174,1791538272208],"free_gib":30.86,"per_inst_MiB":4.1}
|
||||
{"tag":"diag-n18-k1","gpu":"NVIDIA GeForce RTX 5090","sm":"12.0","sms":170,"encoding":"B3P1","n":18,"N":262144,"inst_MiB":8.0,"B":1897,"Bmax":1897,"layout":"soa","kernel":"k1","k":64,"wrong_edge":0,"passes":34,"graph_s":0.0124,"state_alloc_s":0.0042,"label_s_per_pass":0.596598,"labels_per_s":833537717.2,"labels_per_s_per_inst":439397.8,"ns_per_label_per_inst":2275.84,"merkle_s":0.050154,"prove_s":0.174954,"verify_all_s":0.1720,"accepted":1897,"checked":2,"lab_bad_inst":0,"tree_bad_inst":0,"root_bad":0,"proof_bad":0,"check_s":31.57,"oracle":"IDENTICAL","label_window_unix_ms":[1791538304460,1791538324746],"free_gib":30.86,"per_inst_MiB":16.1}
|
||||
0
docs/analysis/mhpow/b3/rows/rtx5090-r1/stderr.log
Normal file
0
docs/analysis/mhpow/b3/rows/rtx5090-r1/stderr.log
Normal file
1578
docs/analysis/mhpow/b3/rows/summary-rtx5090-b1.json
Normal file
1578
docs/analysis/mhpow/b3/rows/summary-rtx5090-b1.json
Normal file
File diff suppressed because it is too large
Load diff
1900
docs/analysis/mhpow/b3/rows/summary-rtx5090-r1.json
Normal file
1900
docs/analysis/mhpow/b3/rows/summary-rtx5090-r1.json
Normal file
File diff suppressed because it is too large
Load diff
43
tools/ci/batches/mhpow-b3-20261009-01.json
Normal file
43
tools/ci/batches/mhpow-b3-20261009-01.json
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"run_id": "mhpow-b3-20261009-01",
|
||||
"manifest_sha": "bc6bfa75e",
|
||||
"evidence_dir": "docs/analysis/mhpow/b3",
|
||||
"boxes": [
|
||||
"vast:54994203",
|
||||
"vast:54994221"
|
||||
],
|
||||
"method": "GPU",
|
||||
"note": "Track B B3 (R15-06, the GPU feasibility lane, 9 October 2026): GPU adaptation of the Blocki-Smearsoll TCC 2025 MTP/DRSample MHPoW (eprint 2025/1456, full PDF sha256 13c3646e...) without changing the function: CUDA labelling, Merkle commitment and proof creation, batched at 32, 128 and 512 MiB per instance with the card filled, on a rented RTX 5090 and RTX 4090 at stock clocks (no clock lock on rented pods), board power from nvidia-smi at 1 Hz with idle not subtracted. Correctness oracle: the B1 lane's reference encoding (tools/mhpow/b1 working copy on build-6 09:26Z, not landed) through a C port that reproduces B1's five known-answer fixtures byte for byte, then the GPU byte for byte on labels, every Merkle node, root and proof container, instance 0 equal to B1's own fixture, every GPU proof accepted; the known-failed test (DRSample's long edges deleted on the GPU) fires. A research candidate only: nothing activates, no comparison with the v6 work unit is made (the comparison contract is a BLOCKED row), no PASS is claimed. NOT RUN until the panel reads it.",
|
||||
"cells": [
|
||||
{
|
||||
"cell": "rows:mhpow-b3-gpu-feasibility",
|
||||
"cases": [
|
||||
"POW-01",
|
||||
"POW-06"
|
||||
],
|
||||
"status": "NOT RUN",
|
||||
"method": "GPU",
|
||||
"evidence": "docs/analysis/mhpow/b3/README.md",
|
||||
"note": "POW-01 (Track B candidate only, not the shipped v6): an independently written CPU reference (B1, Python) and its C port agree with the CUDA backend byte for byte on every checked instance at n = 8 to 24 on two cards. POW-06 (Track B candidate only): the C-port verifier's time per GPU proof at k = 64 is recorded per row; the proof is about 129 to 180 KB at k = 64 and k is not yet fixed by the theorem's constants (BLOCKED row in the README). The GPU feasibility verdict itself (the README's trap rows) is a research finding for the panel, not a registry case.",
|
||||
"claim_impact": "none: no public figure moves; the Track B candidate is not proposed for activation",
|
||||
"in_progress": true
|
||||
}
|
||||
],
|
||||
"map_cell_requested": {
|
||||
"rows:mhpow-b3-gpu-feasibility": {
|
||||
"command": "tools/mhpow/b3/build.sh && tools/mhpow/b3/test_known_failed_b1.sh <b1-kat-dir> && tools/mhpow/b3/run_rows_b1.sh <card-label> <b1-kat-dir> (on a rented GPU pod; never the Mac); python3 tools/mhpow/b3/parse_rows.py <out-dirs>",
|
||||
"box_class": "rented GPU pod (RTX 5090, RTX 4090), stock clocks",
|
||||
"fixtures": [
|
||||
"F0"
|
||||
],
|
||||
"cases": [
|
||||
"POW-01",
|
||||
"POW-06"
|
||||
],
|
||||
"coverage": {
|
||||
"POW-01": "partial: the Track B research candidate's CUDA backend against an independent CPU reference (B1) only; nothing about the shipped v6 evaluator",
|
||||
"POW-06": "partial: verifier time per proof for the Track B candidate at k = 64 on one CPU; no malformed-input or rate budget"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -52,3 +52,4 @@ docs/analysis/class-v6/reference-population.md
|
|||
docs/analysis/class-v6/eco-05-scenarios.md
|
||||
docs/analysis/class-v6/eco-05-results.md
|
||||
docs/analysis/proving-outcome-ledger.md
|
||||
docs/analysis/mhpow/b3
|
||||
|
|
|
|||
161
tools/mhpow/b3/b1enc_spec.h
Normal file
161
tools/mhpow/b3/b1enc_spec.h
Normal file
|
|
@ -0,0 +1,161 @@
|
|||
/*
|
||||
* b1enc_spec.h - a C port of the B1 lane's reference encoding (R15-05, tools/mhpow/b1/{params,drsample,mtp}.py,
|
||||
* read from build-6:/srv/builds/mhpow-b1/src at 09:26Z 9 Oct 2026) of the Blocki-Smearsoll MTP/DRSample MHPoW.
|
||||
* Every byte is B1's: BLAKE2b-256 unkeyed, lambda = 256; one-byte tags L/M/C/G; u64 little-endian integers;
|
||||
* l_v = H('L' || chi || u64 v || parents' labels ascending) (node 1: no parents, node 2: (1), v >= 3: (v-r, v-1))
|
||||
* inner = H('M' || chi || left || right), the paper's LSB-first leaf order (leaf index = sum x_j 2^(j-1), x_1 at the root)
|
||||
* c_i = H('C' || chi || u64 i || tau) read little-endian, mod N (i = 1..k), node c_i + 1
|
||||
* graph = ABH17 Alg. 1 with draws H('G' || GRAPH_SEED || u64 v || which || u64 ctr)[0..8) LE, rejection sampled,
|
||||
* g' in [1, bitlen v] (which = 1), g = min(v-1, 2^g'), r in [max(ceil(g/2), 2), g] (which = 2)
|
||||
* proof = "B1MTPDR1" | n u8 | k u32le | tau | per challenge: label | n siblings root-first | parent count u8 |
|
||||
* per parent: label | n siblings
|
||||
* This port is the GPU harness's oracle; it is itself checked against B1's known-answer fixtures (kat-n04..n20:
|
||||
* graph parents sha256, labels sha256, tau, proof sha256) by cpu_ref_b1 kat before any GPU row counts.
|
||||
*/
|
||||
#ifndef B1ENC_SPEC_H
|
||||
#define B1ENC_SPEC_H
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "b3p1_spec.h" /* SHA-256 (fixture digests only) */
|
||||
|
||||
static const uint64_t b2_IV[8] = {0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL,
|
||||
0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL, 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL};
|
||||
static const uint8_t b2_S[12][16] = {
|
||||
{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},{14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3},{11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4},
|
||||
{7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8},{9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13},{2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9},
|
||||
{12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11},{13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10},{6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5},
|
||||
{10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0},{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},{14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3}};
|
||||
#define B2_R(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
|
||||
#define B2_G(a, b, c, d, x, y) do { a = a + b + (x); d = B2_R(d ^ a, 32); c = c + d; b = B2_R(b ^ c, 24); \
|
||||
a = a + b + (y); d = B2_R(d ^ a, 16); c = c + d; b = B2_R(b ^ c, 63); } while (0)
|
||||
/* h: 8 words, m: 16 LE words, t: byte counter after this block, last: final block flag */
|
||||
static void b2_compress(uint64_t h[8], const uint64_t m[16], uint64_t t, int last) {
|
||||
uint64_t v[16];
|
||||
for (int i = 0; i < 8; i++) { v[i] = h[i]; v[i + 8] = b2_IV[i]; }
|
||||
v[12] ^= t; if (last) v[14] = ~v[14];
|
||||
for (int r = 0; r < 12; r++) {
|
||||
const uint8_t *s = b2_S[r];
|
||||
B2_G(v[0], v[4], v[8], v[12], m[s[0]], m[s[1]]); B2_G(v[1], v[5], v[9], v[13], m[s[2]], m[s[3]]);
|
||||
B2_G(v[2], v[6], v[10], v[14], m[s[4]], m[s[5]]); B2_G(v[3], v[7], v[11], v[15], m[s[6]], m[s[7]]);
|
||||
B2_G(v[0], v[5], v[10], v[15], m[s[8]], m[s[9]]); B2_G(v[1], v[6], v[11], v[12], m[s[10]], m[s[11]]);
|
||||
B2_G(v[2], v[7], v[8], v[13], m[s[12]], m[s[13]]); B2_G(v[3], v[4], v[9], v[14], m[s[14]], m[s[15]]);
|
||||
}
|
||||
for (int i = 0; i < 8; i++) h[i] ^= v[i] ^ v[i + 8];
|
||||
}
|
||||
/* BLAKE2b-256 unkeyed of any message */
|
||||
static void b2_256(const uint8_t *msg, size_t len, uint8_t out[32]) {
|
||||
uint64_t h[8]; memcpy(h, b2_IV, 64); h[0] ^= 0x01010020ULL;
|
||||
uint64_t m[16]; size_t off = 0;
|
||||
while (len - off > 128) { memcpy(m, msg + off, 128); off += 128; b2_compress(h, m, off, 0); }
|
||||
uint8_t blk[128]; memset(blk, 0, 128); memcpy(blk, msg + off, len - off); memcpy(m, blk, 128);
|
||||
b2_compress(h, m, len, 1);
|
||||
memcpy(out, h, 32); /* little-endian host (x86-64) */
|
||||
}
|
||||
|
||||
/* ---------------- B1 constants ---------------- */
|
||||
static uint8_t b1_graph_seed[32];
|
||||
static void b1_init(void) { const char *s = "igneum/mhpow/b1/drsample-graph-seed/v1"; b2_256((const uint8_t *)s, strlen(s), b1_graph_seed); }
|
||||
static inline void b1_u64(uint8_t *p, uint64_t x) { memcpy(p, &x, 8); }
|
||||
static inline uint64_t b1_rd64(const uint8_t *p) { uint64_t x; memcpy(&x, p, 8); return x; }
|
||||
|
||||
static uint64_t b1_uniform(uint64_t lo, uint64_t hi, uint64_t v, uint8_t which) {
|
||||
uint64_t m = hi - lo + 1; if (m == 1) return lo;
|
||||
/* limit = 2^64 - (2^64 mod m), computed in 64 bits; x < limit accepted */
|
||||
uint64_t rem = (uint64_t)((((unsigned __int128)1) << 64) % m);
|
||||
for (uint64_t ctr = 0;; ctr++) {
|
||||
uint8_t q[1 + 32 + 8 + 1 + 8], d[32]; q[0] = 'G'; memcpy(q + 1, b1_graph_seed, 32); b1_u64(q + 33, v); q[41] = which; b1_u64(q + 42, ctr);
|
||||
b2_256(q, sizeof q, d); uint64_t x = b1_rd64(d);
|
||||
if (rem == 0 || x < (uint64_t)(0 - rem)) return lo + x % m;
|
||||
}
|
||||
}
|
||||
static inline int b1_bitlen(uint64_t v) { int r = 0; while (v) { v >>= 1; r++; } return r; }
|
||||
/* far[v] = v - r for v >= 3, 0 otherwise */
|
||||
static uint32_t b1_far(uint64_t v) {
|
||||
if (v < 3) return 0;
|
||||
uint64_t gp = b1_uniform(1, (uint64_t)b1_bitlen(v), v, 1);
|
||||
uint64_t g = (gp >= 63 || (1ULL << gp) > v - 1) ? v - 1 : (1ULL << gp);
|
||||
uint64_t lo = (g + 1) / 2; if (lo < 2) lo = 2;
|
||||
return (uint32_t)(v - b1_uniform(lo, g, v, 2));
|
||||
}
|
||||
|
||||
/* ---------------- labels, tree, challenges ---------------- */
|
||||
static void b1_label(const uint8_t chi[32], uint64_t v, const uint8_t *pa, const uint8_t *pb, uint8_t out[32]) {
|
||||
uint8_t m[105]; size_t L = 0; m[L++] = 'L'; memcpy(m + L, chi, 32); L += 32; b1_u64(m + L, v); L += 8;
|
||||
if (pa) { memcpy(m + L, pa, 32); L += 32; } if (pb) { memcpy(m + L, pb, 32); L += 32; }
|
||||
b2_256(m, L, out);
|
||||
}
|
||||
static void b1_label_all(const uint8_t chi[32], uint64_t N, const uint32_t *far, uint8_t *lab) {
|
||||
b1_label(chi, 1, NULL, NULL, lab + 32);
|
||||
if (N >= 2) b1_label(chi, 2, lab + 32, NULL, lab + 64);
|
||||
for (uint64_t v = 3; v <= N; v++) b1_label(chi, v, lab + 32 * (uint64_t)far[v], lab + 32 * (v - 1), lab + 32 * v);
|
||||
}
|
||||
static void b1_node(const uint8_t chi[32], const uint8_t *l, const uint8_t *r, uint8_t out[32]) {
|
||||
uint8_t m[97]; m[0] = 'M'; memcpy(m + 1, chi, 32); memcpy(m + 33, l, 32); memcpy(m + 65, r, 32); b2_256(m, 97, out);
|
||||
}
|
||||
/* same index rule as b3p1_spec.h: depth d node id = sum_{i<=d} x_i 2^(i-1); tree[(2^d-1)+id] for d < n */
|
||||
static void b1_merkle(const uint8_t chi[32], int n, const uint8_t *lab, uint8_t *tree) {
|
||||
for (int d = n - 1; d >= 0; d--) {
|
||||
uint64_t cnt = 1ULL << d;
|
||||
for (uint64_t id = 0; id < cnt; id++) {
|
||||
const uint8_t *l = (d == n - 1) ? lab + 32 * (id + 1) : tree + 32 * ((2 * cnt - 1) + id);
|
||||
const uint8_t *r = (d == n - 1) ? lab + 32 * (id + cnt + 1) : tree + 32 * ((2 * cnt - 1) + id + cnt);
|
||||
b1_node(chi, l, r, tree + 32 * ((cnt - 1) + id));
|
||||
}
|
||||
}
|
||||
}
|
||||
static const uint8_t *b1_tnode(int n, const uint8_t *lab, const uint8_t *tree, int d, uint64_t id) {
|
||||
return d == n ? lab + 32 * (id + 1) : tree + 32 * (((1ULL << d) - 1) + id);
|
||||
}
|
||||
static uint64_t b1_challenge(const uint8_t chi[32], uint64_t i, const uint8_t tau[32], uint64_t N) {
|
||||
uint8_t m[73], h[32]; m[0] = 'C'; memcpy(m + 1, chi, 32); b1_u64(m + 33, i); memcpy(m + 41, tau, 32); b2_256(m, 73, h);
|
||||
return b1_rd64(h) & (N - 1);
|
||||
}
|
||||
static int b1_parents(uint64_t v, const uint32_t *far, uint64_t ps[2]) {
|
||||
if (v == 1) return 0; if (v == 2) { ps[0] = 1; return 1; } ps[0] = far[v]; ps[1] = v - 1; return 2;
|
||||
}
|
||||
static size_t b1_proof_max(int n, int k) { return 8 + 1 + 4 + 32 + (size_t)k * (1 + 3 * 32 * (size_t)(n + 1)); }
|
||||
static size_t b1_prove(const uint8_t chi[32], int n, int k, const uint32_t *far, const uint8_t *lab, const uint8_t *tree, uint8_t *o) {
|
||||
uint64_t N = 1ULL << n; size_t L = 0; const uint8_t *tau = tree;
|
||||
memcpy(o, "B1MTPDR1", 8); L = 8; o[L++] = (uint8_t)n; uint32_t kk = (uint32_t)k; memcpy(o + L, &kk, 4); L += 4; memcpy(o + L, tau, 32); L += 32;
|
||||
for (int i = 1; i <= k; i++) {
|
||||
uint64_t c = b1_challenge(chi, (uint64_t)i, tau, N), v = c + 1, ps[2]; int np = b1_parents(v, far, ps);
|
||||
uint64_t which[3] = {v, ps[0], ps[1]};
|
||||
for (int p = 0; p <= np; p++) {
|
||||
if (p == 1) o[L++] = (uint8_t)np;
|
||||
uint64_t x = which[p] - 1; memcpy(o + L, lab + 32 * which[p], 32); L += 32;
|
||||
for (int j = 1; j <= n; j++) { uint64_t sid = (x & ((1ULL << j) - 1)) ^ (1ULL << (j - 1)); memcpy(o + L, b1_tnode(n, lab, tree, j, sid), 32); L += 32; }
|
||||
}
|
||||
if (np == 0) o[L++] = 0;
|
||||
}
|
||||
return L;
|
||||
}
|
||||
static int b1_open_ok(const uint8_t chi[32], int n, const uint8_t *tau, uint64_t x, const uint8_t *leaf, const uint8_t *sib) {
|
||||
uint8_t cur[32], nx[32]; memcpy(cur, leaf, 32);
|
||||
for (int j = n; j >= 1; j--) { if (((x >> (j - 1)) & 1) == 0) b1_node(chi, cur, sib + 32 * (j - 1), nx); else b1_node(chi, sib + 32 * (j - 1), cur, nx); memcpy(cur, nx, 32); }
|
||||
return memcmp(cur, tau, 32) == 0;
|
||||
}
|
||||
/* the verifier, B1's check order: container, challenges, parent set, Merkle openings, local consistency */
|
||||
static int b1_verify(const uint8_t chi[32], int n, int k, const uint32_t *far, const uint8_t *p, size_t len) {
|
||||
uint64_t N = 1ULL << n; size_t o = 45; uint32_t kk;
|
||||
if (len < 45 || memcmp(p, "B1MTPDR1", 8) || p[8] != n) return 0; memcpy(&kk, p + 9, 4); if ((int)kk != k) return 0;
|
||||
const uint8_t *tau = p + 13; const size_t seg = 32 * (size_t)(n + 1);
|
||||
for (int i = 1; i <= k; i++) {
|
||||
uint64_t c = b1_challenge(chi, (uint64_t)i, tau, N), v = c + 1, ps[2]; int np = b1_parents(v, far, ps);
|
||||
if (o + seg + 1 > len) return 0; const uint8_t *nd = p + o; o += seg;
|
||||
if (p[o++] != np) return 0; if (o + np * seg > len) return 0;
|
||||
const uint8_t *pp[2] = {NULL, NULL}; for (int q = 0; q < np; q++) { pp[q] = p + o; o += seg; }
|
||||
if (!b1_open_ok(chi, n, tau, v - 1, nd, nd + 32)) return 0;
|
||||
for (int q = 0; q < np; q++) if (!b1_open_ok(chi, n, tau, ps[q] - 1, pp[q], pp[q] + 32)) return 0;
|
||||
uint8_t h[32]; b1_label(chi, v, np >= 1 ? pp[0] : NULL, np >= 2 ? pp[1] : NULL, h);
|
||||
if (memcmp(h, nd, 32)) return 0;
|
||||
}
|
||||
return o == len;
|
||||
}
|
||||
/* instance inputs: the KAT chi of B1 (H('B1-fixture' || 'kat' || u64 n)) for instance 0; B3 batch chis for j >= 1 */
|
||||
static void b1_kat_chi(int n, uint8_t chi[32]) { uint8_t m[21]; memcpy(m, "B1-fixture", 10); memcpy(m + 10, "kat", 3); b1_u64(m + 13, (uint64_t)n); b2_256(m, 21, chi); }
|
||||
static void b1_batch_chi(int n, uint64_t j, uint8_t chi[32]) {
|
||||
if (j == 0) { b1_kat_chi(n, chi); return; }
|
||||
uint8_t m[8 + 16]; memcpy(m, "B3-batch", 8); b1_u64(m + 8, (uint64_t)n); b1_u64(m + 16, j); b2_256(m, 24, chi);
|
||||
}
|
||||
#endif
|
||||
133
tools/mhpow/b3/b3_fast_cpu.h
Normal file
133
tools/mhpow/b3/b3_fast_cpu.h
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
/*
|
||||
* b3_fast_cpu.h - the CPU's best honest sequential path for the same B3P1 function:
|
||||
* SHA-256 by the x86 SHA extensions (sha_ni) when the CPU has them, word-level
|
||||
* message assembly, no change to any byte the spec hashes. selftest() compares
|
||||
* every fast path against the portable spec (b3p1_spec.h) before a row counts.
|
||||
*/
|
||||
#ifndef B3_FAST_CPU_H
|
||||
#define B3_FAST_CPU_H
|
||||
#include "b3p1_spec.h"
|
||||
#include <stdio.h>
|
||||
#if defined(__x86_64__)
|
||||
#include <immintrin.h>
|
||||
#include <cpuid.h>
|
||||
#endif
|
||||
|
||||
typedef void (*b3_cmp_fn)(uint32_t st[8], const uint32_t w[16]);
|
||||
|
||||
static void b3_cmp_portable(uint32_t st[8], const uint32_t w16[16]) {
|
||||
uint8_t blk[64];
|
||||
for (int i = 0; i < 16; i++) { blk[4*i]=w16[i]>>24; blk[4*i+1]=w16[i]>>16; blk[4*i+2]=w16[i]>>8; blk[4*i+3]=w16[i]; }
|
||||
b3_compress(st, blk);
|
||||
}
|
||||
|
||||
#if defined(__x86_64__)
|
||||
__attribute__((target("sha,sse4.1,ssse3")))
|
||||
static void b3_cmp_shani(uint32_t st[8], const uint32_t w16[16]) {
|
||||
__m128i S0, S1, TMP, MSG, M[4], ABEF, CDGH;
|
||||
TMP = _mm_loadu_si128((const __m128i *)&st[0]);
|
||||
S1 = _mm_loadu_si128((const __m128i *)&st[4]);
|
||||
TMP = _mm_shuffle_epi32(TMP, 0xB1);
|
||||
S1 = _mm_shuffle_epi32(S1, 0x1B);
|
||||
S0 = _mm_alignr_epi8(TMP, S1, 8);
|
||||
S1 = _mm_blend_epi16(S1, TMP, 0xF0);
|
||||
ABEF = S0; CDGH = S1;
|
||||
for (int i = 0; i < 4; i++) M[i] = _mm_loadu_si128((const __m128i *)&w16[4*i]); /* already host-order words */
|
||||
for (int g = 0; g < 16; g++) {
|
||||
__m128i W;
|
||||
if (g < 4) W = M[g];
|
||||
else {
|
||||
__m128i a = M[(g) & 3], b = M[(g+1) & 3], c = M[(g+2) & 3], d = M[(g+3) & 3];
|
||||
/* a = W[g-4], b = W[g-3], c = W[g-2], d = W[g-1] */
|
||||
__m128i t = _mm_sha256msg1_epu32(a, b);
|
||||
t = _mm_add_epi32(t, _mm_alignr_epi8(d, c, 4));
|
||||
W = _mm_sha256msg2_epu32(t, d);
|
||||
M[g & 3] = W;
|
||||
}
|
||||
MSG = _mm_add_epi32(W, _mm_loadu_si128((const __m128i *)&b3_K[4*g]));
|
||||
S1 = _mm_sha256rnds2_epu32(S1, S0, MSG);
|
||||
MSG = _mm_shuffle_epi32(MSG, 0x0E);
|
||||
S0 = _mm_sha256rnds2_epu32(S0, S1, MSG);
|
||||
}
|
||||
S0 = _mm_add_epi32(S0, ABEF); S1 = _mm_add_epi32(S1, CDGH);
|
||||
TMP = _mm_shuffle_epi32(S0, 0x1B);
|
||||
S1 = _mm_shuffle_epi32(S1, 0xB1);
|
||||
S0 = _mm_blend_epi16(TMP, S1, 0xF0);
|
||||
S1 = _mm_alignr_epi8(S1, TMP, 8);
|
||||
_mm_storeu_si128((__m128i *)&st[0], S0);
|
||||
_mm_storeu_si128((__m128i *)&st[4], S1);
|
||||
}
|
||||
static int b3_has_shani(void) {
|
||||
unsigned a, b, c, d;
|
||||
if (!__get_cpuid_count(7, 0, &a, &b, &c, &d)) return 0;
|
||||
return (b >> 29) & 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* words of a digest stored as 8 host-order uint32 (the SHA state words) */
|
||||
static inline void b3_w2b(const uint32_t w[8], uint8_t b[32]) { for (int i = 0; i < 8; i++) { b[4*i]=w[i]>>24; b[4*i+1]=w[i]>>16; b[4*i+2]=w[i]>>8; b[4*i+3]=w[i]; } }
|
||||
static inline void b3_b2w(const uint8_t b[32], uint32_t w[8]) { for (int i = 0; i < 8; i++) w[i] = ((uint32_t)b[4*i]<<24)|((uint32_t)b[4*i+1]<<16)|((uint32_t)b[4*i+2]<<8)|b[4*i+3]; }
|
||||
static inline uint32_t b3_bswap(uint32_t x) { return (x>>24)|((x>>8)&0xff00)|((x<<8)&0xff0000)|(x<<24); }
|
||||
|
||||
/* label pass in word form: L is (N+1)*8 words; chiw = chi as 8 words */
|
||||
static void b3_fast_label_all(b3_cmp_fn cmp, const uint32_t chiw[8], uint64_t N, const uint32_t *far, uint32_t *L) {
|
||||
uint32_t w[16], st[8];
|
||||
/* v = 1: 40 bytes, one block */
|
||||
for (int i = 0; i < 8; i++) w[i] = chiw[i];
|
||||
w[8] = b3_bswap(1); w[9] = 0; w[10] = 0x80000000u; for (int i = 11; i < 15; i++) w[i] = 0; w[15] = 320;
|
||||
memcpy(st, b3_IV, 32); cmp(st, w); memcpy(L + 8, st, 32);
|
||||
if (N >= 2) { /* v = 2: 72 bytes */
|
||||
for (int i = 0; i < 8; i++) w[i] = chiw[i];
|
||||
w[8] = b3_bswap(2); w[9] = 0; for (int i = 0; i < 6; i++) w[10+i] = L[8+i];
|
||||
memcpy(st, b3_IV, 32); cmp(st, w);
|
||||
w[0] = L[8+6]; w[1] = L[8+7]; w[2] = 0x80000000u; for (int i = 3; i < 15; i++) w[i] = 0; w[15] = 576;
|
||||
cmp(st, w); memcpy(L + 16, st, 32);
|
||||
}
|
||||
for (uint64_t v = 3; v <= N; v++) { /* 104 bytes: chi | le64 v | l_far | l_{v-1} */
|
||||
const uint32_t *pf = L + 8 * (uint64_t)far[v], *pp = L + 8 * (v - 1);
|
||||
for (int i = 0; i < 8; i++) w[i] = chiw[i];
|
||||
w[8] = b3_bswap((uint32_t)v); w[9] = b3_bswap((uint32_t)(v >> 32));
|
||||
for (int i = 0; i < 6; i++) w[10+i] = pf[i];
|
||||
memcpy(st, b3_IV, 32); cmp(st, w);
|
||||
w[0] = pf[6]; w[1] = pf[7]; for (int i = 0; i < 8; i++) w[2+i] = pp[i];
|
||||
w[10] = 0x80000000u; w[11] = w[12] = w[13] = w[14] = 0; w[15] = 832;
|
||||
cmp(st, w); memcpy(L + 8 * v, st, 32);
|
||||
}
|
||||
}
|
||||
static void b3_fast_node(b3_cmp_fn cmp, const uint32_t chiw[8], const uint32_t *l, const uint32_t *r, uint32_t out[8]) {
|
||||
uint32_t w[16], st[8];
|
||||
for (int i = 0; i < 8; i++) { w[i] = chiw[i]; w[8+i] = l[i]; }
|
||||
memcpy(st, b3_IV, 32); cmp(st, w);
|
||||
for (int i = 0; i < 8; i++) w[i] = r[i];
|
||||
w[8] = 0x80000000u; for (int i = 9; i < 15; i++) w[i] = 0; w[15] = 768;
|
||||
cmp(st, w); memcpy(out, st, 32);
|
||||
}
|
||||
/* tree words: (2^n - 1)*8, same index rule as the spec */
|
||||
static void b3_fast_merkle(b3_cmp_fn cmp, const uint32_t chiw[8], int n, const uint32_t *L, uint32_t *T) {
|
||||
for (int d = n - 1; d >= 0; d--) {
|
||||
uint64_t cnt = 1ull << d;
|
||||
for (uint64_t id = 0; id < cnt; id++) {
|
||||
const uint32_t *l, *r;
|
||||
if (d == n - 1) { l = L + 8 * (id + 1); r = L + 8 * (id + cnt + 1); }
|
||||
else { l = T + 8 * ((2 * cnt - 1) + id); r = T + 8 * ((2 * cnt - 1) + id + cnt); }
|
||||
b3_fast_node(cmp, chiw, l, r, T + 8 * ((cnt - 1) + id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* compare fast paths with the spec on a small graph; returns 0 on byte identity */
|
||||
static int b3_fast_selftest(b3_cmp_fn cmp, int n) {
|
||||
uint64_t N = 1ull << n; uint8_t chi[32]; b3_chi(7, 3, chi);
|
||||
uint32_t *far = (uint32_t *)calloc(N + 1, 4); for (uint64_t v = 0; v <= N; v++) far[v] = b3_drsample_far(N, v);
|
||||
uint8_t *lab = (uint8_t *)calloc(N + 1, 32), *tree = (uint8_t *)calloc(N, 32);
|
||||
b3_label_all(chi, N, far, lab); b3_merkle(chi, n, lab, tree);
|
||||
uint32_t chiw[8]; b3_b2w(chi, chiw);
|
||||
uint32_t *L = (uint32_t *)calloc(N + 1, 32), *T = (uint32_t *)calloc(N, 32);
|
||||
b3_fast_label_all(cmp, chiw, N, far, L); b3_fast_merkle(cmp, chiw, n, L, T);
|
||||
int bad = 0; uint8_t b[32];
|
||||
for (uint64_t v = 1; v <= N; v++) { b3_w2b(L + 8 * v, b); if (memcmp(b, lab + 32 * v, 32)) { bad++; } }
|
||||
for (uint64_t i = 0; i + 1 < N; i++) { b3_w2b(T + 8 * i, b); if (memcmp(b, tree + 32 * i, 32)) { bad++; } }
|
||||
free(far); free(lab); free(tree); free(L); free(T);
|
||||
return bad;
|
||||
}
|
||||
#endif
|
||||
459
tools/mhpow/b3/b3_gpu.cu
Normal file
459
tools/mhpow/b3/b3_gpu.cu
Normal file
|
|
@ -0,0 +1,459 @@
|
|||
// b3_gpu.cu - B3 lane (R15-06): GPU labelling, Merkle commitment and proof creation for the
|
||||
// B3P1 encoding of the Blocki-Smearsoll MTP/DRSample MHPoW, with the spec-path CPU oracle inside.
|
||||
//
|
||||
// Representation and scheduling changes ONLY. The DAG (far parent from the host's DRSample table,
|
||||
// near parent v-1), the hash (SHA-256), the bytes hashed (b3p1_spec.h) and the challenge and proof
|
||||
// shape are the spec's. What changes:
|
||||
// * many instances (different chi) in flight, one graph shared by all (the graph is data-independent);
|
||||
// * labels held as 8 host-order SHA state words (the digest's big-endian words: no byte is changed,
|
||||
// only where it sits); layout SOA = instance-interleaved 16-byte halves, (row*2+h)*B + inst, so a
|
||||
// warp's 32 instances read one contiguous 512-byte run per half; AOS = instance-major rows (ablation);
|
||||
// * k1: one thread per instance, the far parent's label prefetched one node ahead;
|
||||
// * k2: two lanes per instance (cooperative): the far parent's first compression block
|
||||
// (chi | le64 v | l_far[0..23]) does not depend on l_{v-1} (DRSample's far parent is <= v-2), so
|
||||
// lane A computes node v+1's first-block midstate while lane B finishes node v's second block;
|
||||
// the per-label critical path falls from two compressions to one. Same bytes, same hashes.
|
||||
// Build: nvcc -O3 -std=c++17 -gencode arch=compute_89,code=sm_89 -gencode arch=compute_120,code=sm_120
|
||||
// -Xcompiler -fopenmp -o b3_gpu b3_gpu.cu
|
||||
#include "b3p1_spec.h"
|
||||
#include "b3_fast_cpu.h"
|
||||
#include <cuda_runtime.h>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <chrono>
|
||||
#include <omp.h>
|
||||
|
||||
#define CK(x) do { cudaError_t e_ = (x); if (e_ != cudaSuccess) { fprintf(stderr, "CUDA %s at %s:%d\n", cudaGetErrorString(e_), __FILE__, __LINE__); exit(3); } } while (0)
|
||||
|
||||
__constant__ uint32_t dK[64];
|
||||
__constant__ uint32_t dIV[8];
|
||||
|
||||
__device__ __forceinline__ uint32_t rr(uint32_t x, int n) { return __funnelshift_r(x, x, n); }
|
||||
__device__ __forceinline__ uint32_t bsw(uint32_t x) { return __byte_perm(x, 0, 0x0123); }
|
||||
|
||||
// SHA-256 compression, 16-word rolling schedule, fully unrolled; w is consumed.
|
||||
__device__ __forceinline__ void dcmp(uint32_t st[8], uint32_t w[16]) {
|
||||
uint32_t a = st[0], b = st[1], c = st[2], d = st[3], e = st[4], f = st[5], g = st[6], h = st[7];
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 64; i++) {
|
||||
uint32_t wi;
|
||||
if (i < 16) wi = w[i];
|
||||
else {
|
||||
uint32_t w15 = w[(i + 1) & 15], w2 = w[(i + 14) & 15];
|
||||
uint32_t s0 = rr(w15, 7) ^ rr(w15, 18) ^ (w15 >> 3);
|
||||
uint32_t s1 = rr(w2, 17) ^ rr(w2, 19) ^ (w2 >> 10);
|
||||
wi = w[i & 15] = w[i & 15] + s0 + w[(i + 9) & 15] + s1;
|
||||
}
|
||||
uint32_t t1 = h + (rr(e, 6) ^ rr(e, 11) ^ rr(e, 25)) + ((e & f) ^ (~e & g)) + dK[i] + wi;
|
||||
uint32_t t2 = (rr(a, 2) ^ rr(a, 13) ^ rr(a, 22)) + ((a & b) ^ (a & c) ^ (b & c));
|
||||
h = g; g = f; f = e; e = d + t1; d = c; c = b; b = a; a = t1 + t2;
|
||||
}
|
||||
st[0] += a; st[1] += b; st[2] += c; st[3] += d; st[4] += e; st[5] += f; st[6] += g; st[7] += h;
|
||||
}
|
||||
|
||||
template <bool SOA> __device__ __forceinline__ uint64_t ix(uint64_t row, int h, uint64_t inst, uint64_t B, uint64_t rows) {
|
||||
return SOA ? ((row * 2 + h) * B + inst) : ((inst * rows + row) * 2 + h);
|
||||
}
|
||||
|
||||
__device__ __forceinline__ void ld8(const uint4 *p0, const uint4 *p1, uint32_t o[8]) {
|
||||
uint4 a = *p0, b = *p1; o[0] = a.x; o[1] = a.y; o[2] = a.z; o[3] = a.w; o[4] = b.x; o[5] = b.y; o[6] = b.z; o[7] = b.w;
|
||||
}
|
||||
__device__ __forceinline__ void st8(uint4 *p0, uint4 *p1, const uint32_t s[8]) {
|
||||
*p0 = make_uint4(s[0], s[1], s[2], s[3]); *p1 = make_uint4(s[4], s[5], s[6], s[7]);
|
||||
}
|
||||
|
||||
// node 1 and node 2 (shared prologue)
|
||||
__device__ __forceinline__ void first_two(const uint32_t c[8], uint32_t l1[8], uint32_t l2[8]) {
|
||||
uint32_t w[16];
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) w[i] = c[i];
|
||||
w[8] = bsw(1); w[9] = 0; w[10] = 0x80000000u; w[11] = w[12] = w[13] = w[14] = 0; w[15] = 320;
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) l1[i] = dIV[i];
|
||||
dcmp(l1, w);
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) w[i] = c[i];
|
||||
w[8] = bsw(2); w[9] = 0;
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 6; i++) w[10 + i] = l1[i];
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) l2[i] = dIV[i];
|
||||
dcmp(l2, w);
|
||||
w[0] = l1[6]; w[1] = l1[7]; w[2] = 0x80000000u;
|
||||
#pragma unroll
|
||||
for (int i = 3; i < 15; i++) w[i] = 0;
|
||||
w[15] = 576;
|
||||
dcmp(l2, w);
|
||||
}
|
||||
|
||||
// k1: one thread per instance
|
||||
template <bool SOA>
|
||||
__global__ void k_label1(const uint32_t *__restrict__ chi, const uint32_t *__restrict__ far, uint64_t N, uint4 *L, uint64_t B) {
|
||||
uint64_t inst = (uint64_t)blockIdx.x * blockDim.x + threadIdx.x;
|
||||
if (inst >= B) return;
|
||||
const uint64_t rows = N + 1;
|
||||
uint32_t c[8], l1[8], prev[8], w[16], st[8];
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) c[i] = chi[inst * 8 + i];
|
||||
first_two(c, l1, prev);
|
||||
st8(&L[ix<SOA>(1, 0, inst, B, rows)], &L[ix<SOA>(1, 1, inst, B, rows)], l1);
|
||||
st8(&L[ix<SOA>(2, 0, inst, B, rows)], &L[ix<SOA>(2, 1, inst, B, rows)], prev);
|
||||
if (N < 3) return;
|
||||
uint32_t f = far[3];
|
||||
uint4 fa = L[ix<SOA>(f, 0, inst, B, rows)], fb = L[ix<SOA>(f, 1, inst, B, rows)];
|
||||
for (uint64_t v = 3; v <= N; v++) {
|
||||
uint4 na = fa, nb = fb;
|
||||
if (v + 1 <= N) { uint32_t nf = __ldg(&far[v + 1]); na = L[ix<SOA>(nf, 0, inst, B, rows)]; nb = L[ix<SOA>(nf, 1, inst, B, rows)]; }
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) w[i] = c[i];
|
||||
w[8] = bsw((uint32_t)v); w[9] = bsw((uint32_t)(v >> 32));
|
||||
w[10] = fa.x; w[11] = fa.y; w[12] = fa.z; w[13] = fa.w; w[14] = fb.x; w[15] = fb.y;
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) st[i] = dIV[i];
|
||||
dcmp(st, w);
|
||||
w[0] = fb.z; w[1] = fb.w;
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) w[2 + i] = prev[i];
|
||||
w[10] = 0x80000000u; w[11] = w[12] = w[13] = w[14] = 0; w[15] = 832;
|
||||
dcmp(st, w);
|
||||
st8(&L[ix<SOA>(v, 0, inst, B, rows)], &L[ix<SOA>(v, 1, inst, B, rows)], st);
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) prev[i] = st[i];
|
||||
fa = na; fb = nb;
|
||||
}
|
||||
}
|
||||
|
||||
// k2: two lanes per instance; lane A (even) = next node's first-block midstate, lane B (odd) = this node's final block.
|
||||
template <bool SOA>
|
||||
__global__ void k_label2(const uint32_t *__restrict__ chi, const uint32_t *__restrict__ far, uint64_t N, uint4 *L, uint64_t B) {
|
||||
uint64_t gt = (uint64_t)blockIdx.x * blockDim.x + threadIdx.x;
|
||||
uint64_t inst = gt >> 1; const int isB = (int)(gt & 1);
|
||||
const bool live = inst < B; if (!live) inst = B - 1; // every lane takes part in the shuffles; dead lanes never store
|
||||
const uint64_t rows = N + 1; const unsigned M = 0xffffffffu;
|
||||
uint32_t c[8], l1[8], prev[8], prev2[8], w[16], st[8], mid[8];
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) c[i] = chi[inst * 8 + i];
|
||||
first_two(c, l1, prev);
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) prev2[i] = l1[i];
|
||||
if (isB && live) {
|
||||
st8(&L[ix<SOA>(1, 0, inst, B, rows)], &L[ix<SOA>(1, 1, inst, B, rows)], l1);
|
||||
st8(&L[ix<SOA>(2, 0, inst, B, rows)], &L[ix<SOA>(2, 1, inst, B, rows)], prev);
|
||||
}
|
||||
if (N < 3) return;
|
||||
// node 3's far parent is node 1 by the edge rule (g = 2, r = 2); both lanes hold l1. Midstate of node 3:
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) w[i] = c[i];
|
||||
w[8] = bsw(3); w[9] = 0;
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 6; i++) w[10 + i] = l1[i];
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) mid[i] = dIV[i];
|
||||
dcmp(mid, w);
|
||||
uint32_t f6 = l1[6], f7 = l1[7]; // B's: far label words 6,7 of the node it finishes next
|
||||
uint32_t nf6 = 0, nf7 = 0; // A's: far label words 6,7 of node v+1
|
||||
uint4 pa = make_uint4(0, 0, 0, 0), pb = pa; uint32_t pidx = 0xffffffffu; // A's prefetch of l_{far[v+1]} when far[v+1] <= v-2
|
||||
__syncwarp(M);
|
||||
for (uint64_t v = 3; v <= N; v++) {
|
||||
// A: block 0 of node v+1 (far[v+1] <= v-1)
|
||||
uint32_t lf[8];
|
||||
uint64_t u = v + 1; uint32_t fu = (u <= N) ? __ldg(&far[u]) : 1;
|
||||
if (!isB) {
|
||||
if (fu == v - 1) {
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) lf[i] = prev[i];
|
||||
} else if (fu == v - 2) {
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) lf[i] = prev2[i];
|
||||
} else if (fu == pidx) {
|
||||
lf[0] = pa.x; lf[1] = pa.y; lf[2] = pa.z; lf[3] = pa.w; lf[4] = pb.x; lf[5] = pb.y; lf[6] = pb.z; lf[7] = pb.w;
|
||||
} else {
|
||||
uint4 a = __ldcg(&L[ix<SOA>(fu, 0, inst, B, rows)]), b = __ldcg(&L[ix<SOA>(fu, 1, inst, B, rows)]);
|
||||
lf[0] = a.x; lf[1] = a.y; lf[2] = a.z; lf[3] = a.w; lf[4] = b.x; lf[5] = b.y; lf[6] = b.z; lf[7] = b.w;
|
||||
}
|
||||
// prefetch for the next step: far[v+2] if it is <= v-2 (stored and fenced at least one step ago)
|
||||
uint64_t u2 = v + 2;
|
||||
if (u2 <= N) {
|
||||
uint32_t f2 = __ldg(&far[u2]);
|
||||
if (f2 + 2 <= v) { pa = __ldcg(&L[ix<SOA>(f2, 0, inst, B, rows)]); pb = __ldcg(&L[ix<SOA>(f2, 1, inst, B, rows)]); pidx = f2; }
|
||||
else pidx = 0xffffffffu;
|
||||
}
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) w[i] = c[i];
|
||||
w[8] = bsw((uint32_t)u); w[9] = bsw((uint32_t)(u >> 32));
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 6; i++) w[10 + i] = lf[i];
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) st[i] = dIV[i];
|
||||
nf6 = lf[6]; nf7 = lf[7];
|
||||
} else {
|
||||
w[0] = f6; w[1] = f7;
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) w[2 + i] = prev[i];
|
||||
w[10] = 0x80000000u; w[11] = w[12] = w[13] = w[14] = 0; w[15] = 832;
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) st[i] = mid[i];
|
||||
}
|
||||
__syncwarp(M); // reconverge A and B before the shared compression
|
||||
dcmp(st, w); // the one uniform compression of the step
|
||||
if (isB && live) st8(&L[ix<SOA>(v, 0, inst, B, rows)], &L[ix<SOA>(v, 1, inst, B, rows)], st);
|
||||
__threadfence_block();
|
||||
__syncwarp(M);
|
||||
uint32_t x[8];
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) x[i] = __shfl_xor_sync(M, st[i], 1);
|
||||
uint32_t e6 = __shfl_xor_sync(M, nf6, 1), e7 = __shfl_xor_sync(M, nf7, 1);
|
||||
if (!isB) { // A receives l_v
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) { prev2[i] = prev[i]; prev[i] = x[i]; }
|
||||
} else { // B receives mid_{v+1} and the far words; keeps l_v
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) { prev2[i] = prev[i]; prev[i] = st[i]; mid[i] = x[i]; }
|
||||
f6 = e6; f7 = e7;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Merkle level d (paper bit order): T[(cnt-1)+id] = H(chi | left | right), left/right = level d+1 nodes id and id+cnt
|
||||
template <bool SOA>
|
||||
__global__ void k_tree(int d, int n, const uint32_t *__restrict__ chi, const uint4 *L, uint4 *T, uint64_t B, uint64_t N) {
|
||||
uint64_t t = (uint64_t)blockIdx.x * blockDim.x + threadIdx.x; uint64_t cnt = 1ull << d;
|
||||
if (t >= cnt * B) return;
|
||||
uint64_t inst = t % B, id = t / B; const uint64_t lrows = N + 1, trows = N;
|
||||
uint32_t l[8], r[8], w[16], st[8];
|
||||
if (d == n - 1) {
|
||||
ld8(&L[ix<SOA>(id + 1, 0, inst, B, lrows)], &L[ix<SOA>(id + 1, 1, inst, B, lrows)], l);
|
||||
ld8(&L[ix<SOA>(id + cnt + 1, 0, inst, B, lrows)], &L[ix<SOA>(id + cnt + 1, 1, inst, B, lrows)], r);
|
||||
} else {
|
||||
uint64_t base = 2 * cnt - 1;
|
||||
ld8(&T[ix<SOA>(base + id, 0, inst, B, trows)], &T[ix<SOA>(base + id, 1, inst, B, trows)], l);
|
||||
ld8(&T[ix<SOA>(base + id + cnt, 0, inst, B, trows)], &T[ix<SOA>(base + id + cnt, 1, inst, B, trows)], r);
|
||||
}
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) { w[i] = chi[inst * 8 + i]; w[8 + i] = l[i]; st[i] = dIV[i]; }
|
||||
dcmp(st, w);
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) w[i] = r[i];
|
||||
w[8] = 0x80000000u; w[9] = w[10] = w[11] = w[12] = w[13] = w[14] = 0; w[15] = 768;
|
||||
dcmp(st, w);
|
||||
st8(&T[ix<SOA>((cnt - 1) + id, 0, inst, B, trows)], &T[ix<SOA>((cnt - 1) + id, 1, inst, B, trows)], st);
|
||||
}
|
||||
|
||||
// proof: thread per (inst, challenge); slot = 3 segments of (1+n) digests, written as digest BYTES (big-endian words)
|
||||
template <bool SOA>
|
||||
__global__ void k_prove(int n, int k, const uint32_t *__restrict__ chi, const uint32_t *__restrict__ far, const uint4 *L, const uint4 *T,
|
||||
uint64_t B, uint64_t N, uint32_t *out, uint8_t *np_out) {
|
||||
uint64_t t = (uint64_t)blockIdx.x * blockDim.x + threadIdx.x;
|
||||
if (t >= (uint64_t)k * B) return;
|
||||
uint64_t inst = t / k; int i = (int)(t % k) + 1; const uint64_t lrows = N + 1, trows = N;
|
||||
uint32_t root[8], w[16], st[8];
|
||||
ld8(&T[ix<SOA>(0, 0, inst, B, trows)], &T[ix<SOA>(0, 1, inst, B, trows)], root);
|
||||
#pragma unroll
|
||||
for (int q = 0; q < 8; q++) { w[q] = chi[inst * 8 + q]; st[q] = dIV[q]; }
|
||||
w[8] = bsw((uint32_t)i); w[9] = 0;
|
||||
#pragma unroll
|
||||
for (int q = 0; q < 6; q++) w[10 + q] = root[q];
|
||||
dcmp(st, w);
|
||||
w[0] = root[6]; w[1] = root[7]; w[2] = 0x80000000u;
|
||||
#pragma unroll
|
||||
for (int q = 3; q < 15; q++) w[q] = 0;
|
||||
w[15] = 576;
|
||||
dcmp(st, w);
|
||||
// first 8 digest bytes little-endian = bswap(st0) | bswap(st1) << 32
|
||||
uint64_t c = ((uint64_t)bsw(st[0]) | ((uint64_t)bsw(st[1]) << 32)) & (N - 1);
|
||||
uint64_t v = c + 1; uint64_t ps[3]; int np = 0; ps[np++] = v;
|
||||
if (v == 2) ps[np++] = 1; else if (v >= 3) { ps[np++] = far[v]; ps[np++] = v - 1; }
|
||||
np_out[inst * k + (i - 1)] = (uint8_t)np;
|
||||
const uint64_t seg = (uint64_t)(1 + n) * 8, slot = 3 * seg;
|
||||
uint32_t *o = out + (inst * k + (i - 1)) * slot;
|
||||
for (int p = 0; p < np; p++) {
|
||||
uint64_t x = ps[p] - 1; uint32_t d8[8];
|
||||
ld8(&L[ix<SOA>(ps[p], 0, inst, B, lrows)], &L[ix<SOA>(ps[p], 1, inst, B, lrows)], d8);
|
||||
for (int q = 0; q < 8; q++) o[p * seg + q] = bsw(d8[q]);
|
||||
for (int j = 1; j <= n; j++) {
|
||||
uint64_t sid = (x & ((1ull << j) - 1)) ^ (1ull << (j - 1));
|
||||
if (j == n) ld8(&L[ix<SOA>(sid + 1, 0, inst, B, lrows)], &L[ix<SOA>(sid + 1, 1, inst, B, lrows)], d8);
|
||||
else { uint64_t r = ((1ull << j) - 1) + sid; ld8(&T[ix<SOA>(r, 0, inst, B, trows)], &T[ix<SOA>(r, 1, inst, B, trows)], d8); }
|
||||
for (int q = 0; q < 8; q++) o[p * seg + 8 * j + q] = bsw(d8[q]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static double wall_ms() { return std::chrono::duration<double, std::milli>(std::chrono::system_clock::now().time_since_epoch()).count(); }
|
||||
|
||||
struct Opt { int n = 20; long B = 0; bool soa = true; int kern = 1; int passes = 1; int k = 64; long check = 2; uint64_t seed = 1; bool wrong_edge = false;
|
||||
double min_label_s = 0; std::string tag = "row"; double reserve_gib = 1.0; };
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
Opt o;
|
||||
for (int a = 1; a < argc; a++) {
|
||||
std::string s = argv[a]; auto nx = [&]() { return std::string(argv[++a]); };
|
||||
if (s == "--n") o.n = std::stoi(nx()); else if (s == "--B") o.B = std::stol(nx()); else if (s == "--layout") o.soa = nx() == "soa";
|
||||
else if (s == "--kernel") o.kern = std::stoi(nx()); else if (s == "--passes") o.passes = std::stoi(nx()); else if (s == "--k") o.k = std::stoi(nx());
|
||||
else if (s == "--check") o.check = std::stol(nx()); else if (s == "--seed") o.seed = std::stoull(nx()); else if (s == "--wrong-edge") o.wrong_edge = true;
|
||||
else if (s == "--min-label-s") o.min_label_s = std::stod(nx()); else if (s == "--tag") o.tag = nx(); else if (s == "--reserve-gib") o.reserve_gib = std::stod(nx());
|
||||
else { fprintf(stderr, "unknown arg %s\n", s.c_str()); return 2; }
|
||||
}
|
||||
const int n = o.n; const uint64_t N = 1ull << n;
|
||||
cudaDeviceProp prop; CK(cudaGetDeviceProperties(&prop, 0));
|
||||
CK(cudaMemcpyToSymbol(dK, b3_K, sizeof b3_K)); CK(cudaMemcpyToSymbol(dIV, b3_IV, sizeof b3_IV));
|
||||
|
||||
// state construction 1: the graph (DRSample far table, the spec function, host threads)
|
||||
double tg0 = wall_ms();
|
||||
std::vector<uint32_t> far(N + 1);
|
||||
#pragma omp parallel for schedule(static)
|
||||
for (long long v = 0; v <= (long long)N; v++) far[v] = b3_drsample_far(N, (uint64_t)v);
|
||||
std::vector<uint32_t> far_dev = far;
|
||||
if (o.wrong_edge) for (uint64_t v = 3; v <= N; v++) far_dev[v] = (uint32_t)(v - 2); // KNOWN-FAILED: the edge rule changed
|
||||
double t_graph = (wall_ms() - tg0) / 1e3;
|
||||
|
||||
// instances in flight: labels (N+1) + tree (N) digests + one proof slot per challenge
|
||||
const uint64_t slotw = 3ull * (1 + n) * 8;
|
||||
const uint64_t per_inst = (N + 1) * 32 + N * 32 + (uint64_t)o.k * slotw * 4 + o.k + 32;
|
||||
size_t fr, tot; CK(cudaMemGetInfo(&fr, &tot));
|
||||
uint64_t fixed = (N + 1) * 4 + (uint64_t)(o.reserve_gib * (1ull << 30));
|
||||
uint64_t Bmax = fr > fixed ? (fr - fixed) / per_inst : 0;
|
||||
uint64_t B = o.B > 0 ? (uint64_t)o.B : Bmax;
|
||||
if (B == 0 || B > Bmax) { fprintf(stderr, "B=%llu exceeds Bmax=%llu (free %.2f GiB)\n", (unsigned long long)B, (unsigned long long)Bmax, fr / 1073741824.0); return 4; }
|
||||
|
||||
double ts0 = wall_ms();
|
||||
uint4 *dL, *dT; uint32_t *dfar, *dchi, *dproof; uint8_t *dnp;
|
||||
CK(cudaMalloc(&dL, (N + 1) * 32 * B)); CK(cudaMalloc(&dT, N * 32 * B)); CK(cudaMalloc(&dfar, (N + 1) * 4));
|
||||
CK(cudaMalloc(&dchi, B * 32)); CK(cudaMalloc(&dproof, B * o.k * slotw * 4)); CK(cudaMalloc(&dnp, B * o.k));
|
||||
std::vector<uint32_t> chiw(B * 8); std::vector<uint8_t> chib(B * 32);
|
||||
for (uint64_t j = 0; j < B; j++) { b3_chi(o.seed, j, &chib[32 * j]); b3_b2w(&chib[32 * j], &chiw[8 * j]); }
|
||||
CK(cudaMemcpy(dfar, far_dev.data(), (N + 1) * 4, cudaMemcpyHostToDevice));
|
||||
CK(cudaMemcpy(dchi, chiw.data(), B * 32, cudaMemcpyHostToDevice));
|
||||
CK(cudaDeviceSynchronize());
|
||||
double t_state_alloc = (wall_ms() - ts0) / 1e3;
|
||||
|
||||
cudaEvent_t e0, e1; CK(cudaEventCreate(&e0)); CK(cudaEventCreate(&e1));
|
||||
const int TPB = 128;
|
||||
// labelling passes (each pass recomputes every label of every instance: identical output)
|
||||
std::vector<double> pass_s; double lw0 = wall_ms(), lw1 = lw0;
|
||||
for (int p = 0; p < o.passes || (lw1 - lw0) / 1e3 < o.min_label_s; p++) {
|
||||
CK(cudaEventRecord(e0));
|
||||
if (o.kern == 1) {
|
||||
dim3 g((unsigned)((B + TPB - 1) / TPB));
|
||||
if (o.soa) k_label1<true><<<g, TPB>>>(dchi, dfar, N, dL, B); else k_label1<false><<<g, TPB>>>(dchi, dfar, N, dL, B);
|
||||
} else {
|
||||
uint64_t th = 2 * B; dim3 g((unsigned)((th + TPB - 1) / TPB));
|
||||
if (o.soa) k_label2<true><<<g, TPB>>>(dchi, dfar, N, dL, B); else k_label2<false><<<g, TPB>>>(dchi, dfar, N, dL, B);
|
||||
}
|
||||
CK(cudaGetLastError()); CK(cudaEventRecord(e1)); CK(cudaEventSynchronize(e1));
|
||||
float ms; CK(cudaEventElapsedTime(&ms, e0, e1)); pass_s.push_back(ms / 1e3); lw1 = wall_ms();
|
||||
if (p > 100000) break;
|
||||
}
|
||||
// commitment
|
||||
CK(cudaEventRecord(e0));
|
||||
for (int d = n - 1; d >= 0; d--) {
|
||||
uint64_t th = (1ull << d) * B; dim3 g((unsigned)((th + 255) / 256));
|
||||
if (o.soa) k_tree<true><<<g, 256>>>(d, n, dchi, dL, dT, B, N); else k_tree<false><<<g, 256>>>(d, n, dchi, dL, dT, B, N);
|
||||
}
|
||||
CK(cudaGetLastError()); CK(cudaEventRecord(e1)); CK(cudaEventSynchronize(e1));
|
||||
float ms_tree; CK(cudaEventElapsedTime(&ms_tree, e0, e1));
|
||||
// proof creation: challenges + openings on the device, copy home, compact to the spec's byte layout
|
||||
double tp0 = wall_ms();
|
||||
{
|
||||
uint64_t th = (uint64_t)o.k * B; dim3 g((unsigned)((th + 127) / 128));
|
||||
if (o.soa) k_prove<true><<<g, 128>>>(n, o.k, dchi, dfar, dL, dT, B, N, dproof, dnp);
|
||||
else k_prove<false><<<g, 128>>>(n, o.k, dchi, dfar, dL, dT, B, N, dproof, dnp);
|
||||
CK(cudaGetLastError()); CK(cudaDeviceSynchronize());
|
||||
}
|
||||
std::vector<uint32_t> hproof(B * o.k * slotw); std::vector<uint8_t> hnp(B * o.k);
|
||||
CK(cudaMemcpy(hproof.data(), dproof, hproof.size() * 4, cudaMemcpyDeviceToHost));
|
||||
CK(cudaMemcpy(hnp.data(), dnp, hnp.size(), cudaMemcpyDeviceToHost));
|
||||
std::vector<std::vector<uint8_t>> proofs(B);
|
||||
const uint64_t segb = (uint64_t)(1 + n) * 32;
|
||||
#pragma omp parallel for schedule(static)
|
||||
for (long long j = 0; j < (long long)B; j++) {
|
||||
std::vector<uint8_t> &P = proofs[j]; P.reserve(32 + (size_t)o.k * 3 * segb);
|
||||
const uint8_t *s0 = (const uint8_t *)&hproof[((uint64_t)j * o.k) * slotw];
|
||||
// root = the device tree's node 0, as bytes: it is also the first 32 bytes of nothing in the slot, so read it from T below
|
||||
P.resize(32);
|
||||
for (int i = 0; i < o.k; i++) {
|
||||
const uint8_t *s = s0 + (uint64_t)i * slotw * 4; int np = hnp[(uint64_t)j * o.k + i];
|
||||
P.insert(P.end(), s, s + np * segb);
|
||||
}
|
||||
}
|
||||
// roots
|
||||
std::vector<uint32_t> rootw(B * 8);
|
||||
{
|
||||
std::vector<uint4> tmp(o.soa ? 2 * B : 2);
|
||||
if (o.soa) { CK(cudaMemcpy(tmp.data(), dT, 2 * B * 16, cudaMemcpyDeviceToHost));
|
||||
for (uint64_t j = 0; j < B; j++) { uint4 a = tmp[j], b = tmp[B + j]; uint32_t r[8] = {a.x, a.y, a.z, a.w, b.x, b.y, b.z, b.w}; memcpy(&rootw[8 * j], r, 32); } }
|
||||
else for (uint64_t j = 0; j < B; j++) { CK(cudaMemcpy(tmp.data(), dT + (j * N) * 2, 32, cudaMemcpyDeviceToHost));
|
||||
uint32_t r[8] = {tmp[0].x, tmp[0].y, tmp[0].z, tmp[0].w, tmp[1].x, tmp[1].y, tmp[1].z, tmp[1].w}; memcpy(&rootw[8 * j], r, 32); }
|
||||
}
|
||||
for (uint64_t j = 0; j < B; j++) b3_w2b(&rootw[8 * j], proofs[j].data());
|
||||
double t_prove = (wall_ms() - tp0) / 1e3;
|
||||
|
||||
// verification of EVERY GPU proof by the spec verifier (true DRSample graph)
|
||||
double tv0 = wall_ms(); long accepted = 0;
|
||||
#pragma omp parallel for reduction(+ : accepted) schedule(dynamic, 1)
|
||||
for (long long j = 0; j < (long long)B; j++) accepted += b3_verify(&chib[32 * j], n, o.k, far.data(), proofs[j].data(), proofs[j].size());
|
||||
double t_verify_all = (wall_ms() - tv0) / 1e3;
|
||||
|
||||
// oracle: full byte identity of labels, tree, root and proof for `check` instances against the spec path (portable SHA-256)
|
||||
std::vector<uint64_t> chk;
|
||||
uint64_t C = o.check < 0 ? B : std::min<uint64_t>((uint64_t)o.check, B);
|
||||
for (uint64_t q = 0; q < C; q++) chk.push_back(C == 1 ? 0 : (q * (B - 1)) / (C - 1));
|
||||
long lab_bad_inst = 0, tree_bad_inst = 0, root_bad = 0, proof_bad = 0;
|
||||
double tc0 = wall_ms();
|
||||
if (C) {
|
||||
std::vector<uint4> hL, hT;
|
||||
if (o.soa) { // one bulk copy home, then a host gather per checked instance
|
||||
hL.resize(2 * (N + 1) * B); hT.resize(2 * N * B);
|
||||
CK(cudaMemcpy(hL.data(), dL, hL.size() * 16, cudaMemcpyDeviceToHost));
|
||||
CK(cudaMemcpy(hT.data(), dT, hT.size() * 16, cudaMemcpyDeviceToHost));
|
||||
}
|
||||
for (uint64_t q = 0; q < C; q++) {
|
||||
uint64_t j = chk[q];
|
||||
std::vector<uint32_t> Lw((N + 1) * 8), Tw(N * 8);
|
||||
if (o.soa) {
|
||||
#pragma omp parallel for schedule(static)
|
||||
for (long long r = 0; r < (long long)(2 * (N + 1)); r++) memcpy(&Lw[4 * r], &hL[(uint64_t)r * B + j], 16);
|
||||
#pragma omp parallel for schedule(static)
|
||||
for (long long r = 0; r < (long long)(2 * N); r++) memcpy(&Tw[4 * r], &hT[(uint64_t)r * B + j], 16);
|
||||
} else {
|
||||
CK(cudaMemcpy(Lw.data(), (const char *)dL + j * (N + 1) * 32, (N + 1) * 32, cudaMemcpyDeviceToHost));
|
||||
CK(cudaMemcpy(Tw.data(), (const char *)dT + j * N * 32, N * 32, cudaMemcpyDeviceToHost));
|
||||
}
|
||||
std::vector<uint8_t> lab((N + 1) * 32), tree(N * 32);
|
||||
b3_label_all(&chib[32 * j], N, far.data(), lab.data());
|
||||
b3_merkle(&chib[32 * j], n, lab.data(), tree.data());
|
||||
long lb = 0, tb = 0; uint8_t b[32];
|
||||
#pragma omp parallel for reduction(+ : lb) schedule(static)
|
||||
for (long long v = 1; v <= (long long)N; v++) { uint8_t bb[32]; b3_w2b(&Lw[8 * v], bb); lb += memcmp(bb, &lab[32 * v], 32) != 0; }
|
||||
#pragma omp parallel for reduction(+ : tb) schedule(static)
|
||||
for (long long i = 0; i < (long long)N - 1; i++) { uint8_t bb[32]; b3_w2b(&Tw[8 * i], bb); tb += memcmp(bb, &tree[32 * i], 32) != 0; }
|
||||
b3_w2b(&rootw[8 * j], b); root_bad += memcmp(b, &tree[0], 32) != 0;
|
||||
std::vector<uint8_t> P(b3_proof_bytes_max(n, o.k)); size_t pl = b3_prove(&chib[32 * j], n, o.k, far.data(), lab.data(), tree.data(), tree.data(), P.data());
|
||||
proof_bad += (pl != proofs[j].size() || memcmp(P.data(), proofs[j].data(), pl) != 0);
|
||||
lab_bad_inst += lb != 0; tree_bad_inst += tb != 0;
|
||||
if (lb || tb) fprintf(stderr, "oracle: instance %llu labels_bad=%ld tree_bad=%ld\n", (unsigned long long)j, lb, tb);
|
||||
}
|
||||
}
|
||||
double t_check = (wall_ms() - tc0) / 1e3;
|
||||
bool oracle_ok = C > 0 && lab_bad_inst == 0 && tree_bad_inst == 0 && root_bad == 0 && proof_bad == 0 && accepted == (long)B;
|
||||
|
||||
// label pass statistics: skip the first pass when there are several (warm-up)
|
||||
double sum = 0; int cnt = 0;
|
||||
for (size_t p = (pass_s.size() > 1 ? 1 : 0); p < pass_s.size(); p++) { sum += pass_s[p]; cnt++; }
|
||||
double label_s = sum / cnt;
|
||||
double lps = (double)N * B / label_s;
|
||||
printf("{\"tag\":\"%s\",\"gpu\":\"%s\",\"sm\":\"%d.%d\",\"sms\":%d,\"encoding\":\"B3P1\",\"n\":%d,\"N\":%llu,\"inst_MiB\":%.1f,\"B\":%llu,\"Bmax\":%llu,"
|
||||
"\"layout\":\"%s\",\"kernel\":\"k%d\",\"k\":%d,\"wrong_edge\":%d,\"passes\":%zu,\"graph_s\":%.4f,\"state_alloc_s\":%.4f,"
|
||||
"\"label_s_per_pass\":%.6f,\"labels_per_s\":%.1f,\"labels_per_s_per_inst\":%.1f,\"ns_per_label_per_inst\":%.2f,"
|
||||
"\"merkle_s\":%.6f,\"prove_s\":%.6f,\"verify_all_s\":%.4f,\"accepted\":%ld,\"checked\":%llu,\"lab_bad_inst\":%ld,\"tree_bad_inst\":%ld,"
|
||||
"\"root_bad\":%ld,\"proof_bad\":%ld,\"check_s\":%.2f,\"oracle\":\"%s\",\"label_window_unix_ms\":[%.0f,%.0f],\"free_gib\":%.2f,\"per_inst_MiB\":%.1f}\n",
|
||||
o.tag.c_str(), prop.name, prop.major, prop.minor, prop.multiProcessorCount, n, (unsigned long long)N, N * 32.0 / 1048576.0,
|
||||
(unsigned long long)B, (unsigned long long)Bmax, o.soa ? "soa" : "aos", o.kern, o.k, (int)o.wrong_edge, pass_s.size(), t_graph, t_state_alloc,
|
||||
label_s, lps, lps / B, 1e9 / (lps / B), ms_tree / 1e3, t_prove, t_verify_all, accepted, (unsigned long long)C, lab_bad_inst, tree_bad_inst,
|
||||
root_bad, proof_bad, t_check, oracle_ok ? "IDENTICAL" : "MISMATCH", lw0, lw1, fr / 1073741824.0, per_inst / 1048576.0);
|
||||
fflush(stdout);
|
||||
return oracle_ok ? 0 : 1;
|
||||
}
|
||||
337
tools/mhpow/b3/b3_gpu_b1.cu
Normal file
337
tools/mhpow/b3/b3_gpu_b1.cu
Normal file
|
|
@ -0,0 +1,337 @@
|
|||
// b3_gpu_b1.cu - B3 lane (R15-06): GPU labelling, Merkle commitment and proof creation for the B1 lane's reference
|
||||
// encoding (b1enc_spec.h: BLAKE2b-256, tags L/M/C/G, u64 LE, B1's derandomised DRSample, B1's proof container), with the
|
||||
// C-port oracle inside. The C port reproduces B1's known-answer fixtures byte for byte (cpu_ref_b1 kat); instance 0 of every
|
||||
// batch is B1's own KAT input chi = H('B1-fixture' || 'kat' || u64 n), so its labels and root are compared with the fixture.
|
||||
//
|
||||
// Representation and scheduling changes ONLY: the graph (far parent from the host's B1 DRSample table, near parent v-1), the
|
||||
// hash, every byte hashed, the challenge rule and the proof container are B1's. What changes:
|
||||
// * many instances (different chi) in flight; one graph shared by all (it is data-independent and fixed a priori);
|
||||
// * labels held as 4 little-endian u64 words (the BLAKE2b output words; the digest's bytes in order);
|
||||
// * SOA: instance-interleaved 16-byte halves ((row*2+h)*B + inst) so a warp's instances read one contiguous run;
|
||||
// AOS: instance-major rows (ablation);
|
||||
// * k1: one thread per instance, the far parent's label (always <= v-2) prefetched one node ahead, l_{v-1} kept in registers.
|
||||
// No cooperative split of one label exists in this encoding: the whole 105-byte label message is ONE BLAKE2b block, so the
|
||||
// per-label critical path is one compression whatever the lane count (see the README; the SHA-256 reading B3P1 has two
|
||||
// blocks and its first block is independent of l_{v-1}, which is what b3_gpu.cu's k2 exploits).
|
||||
// Build: nvcc -O3 -std=c++17 -gencode arch=compute_89,code=sm_89 -gencode arch=compute_120,code=sm_120 \
|
||||
// -Xcompiler -fopenmp -o b3_gpu_b1 b3_gpu_b1.cu
|
||||
#include "b1enc_spec.h"
|
||||
#include <cuda_runtime.h>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <chrono>
|
||||
#include <omp.h>
|
||||
|
||||
#define CK(x) do { cudaError_t e_ = (x); if (e_ != cudaSuccess) { fprintf(stderr, "CUDA %s at %s:%d\n", cudaGetErrorString(e_), __FILE__, __LINE__); exit(3); } } while (0)
|
||||
|
||||
__constant__ uint64_t dIV2[8];
|
||||
|
||||
__device__ __forceinline__ uint64_t r64(uint64_t x, int n) { return (x >> n) | (x << (64 - n)); }
|
||||
#define DG(a, b, c, d, x, y) { a = a + b + (x); d = r64(d ^ a, 32); c = c + d; b = r64(b ^ c, 24); a = a + b + (y); d = r64(d ^ a, 16); c = c + d; b = r64(b ^ c, 63); }
|
||||
|
||||
// one BLAKE2b-256 block (the last and only one): returns the 4 output words
|
||||
__device__ __forceinline__ void b2blk(const uint64_t m[16], uint64_t t, uint64_t o[4]) {
|
||||
uint64_t v[16];
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 8; i++) { v[i] = dIV2[i]; v[i + 8] = dIV2[i]; }
|
||||
v[0] ^= 0x01010020ULL;
|
||||
v[12] ^= t; v[14] = ~v[14];
|
||||
const uint64_t h0 = v[0], h1 = v[1], h2 = v[2], h3 = v[3];
|
||||
#pragma unroll
|
||||
for (int r = 0; r < 12; r++) {
|
||||
// sigma indices are compile-time after unrolling: use a constexpr table in registers
|
||||
constexpr uint8_t S[12][16] = {
|
||||
{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},{14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3},{11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4},
|
||||
{7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8},{9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13},{2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9},
|
||||
{12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11},{13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10},{6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5},
|
||||
{10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0},{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},{14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3}};
|
||||
DG(v[0], v[4], v[8], v[12], m[S[r][0]], m[S[r][1]]);
|
||||
DG(v[1], v[5], v[9], v[13], m[S[r][2]], m[S[r][3]]);
|
||||
DG(v[2], v[6], v[10], v[14], m[S[r][4]], m[S[r][5]]);
|
||||
DG(v[3], v[7], v[11], v[15], m[S[r][6]], m[S[r][7]]);
|
||||
DG(v[0], v[5], v[10], v[15], m[S[r][8]], m[S[r][9]]);
|
||||
DG(v[1], v[6], v[11], v[12], m[S[r][10]], m[S[r][11]]);
|
||||
DG(v[2], v[7], v[8], v[13], m[S[r][12]], m[S[r][13]]);
|
||||
DG(v[3], v[4], v[9], v[14], m[S[r][14]], m[S[r][15]]);
|
||||
}
|
||||
o[0] = h0 ^ v[0] ^ v[8]; o[1] = h1 ^ v[1] ^ v[9]; o[2] = h2 ^ v[2] ^ v[10]; o[3] = h3 ^ v[3] ^ v[11];
|
||||
}
|
||||
|
||||
// message = tag byte || NF u64 fields, little-endian: m[0] = tag | F0<<8, m[q] = F[q-1]>>56 | F[q]<<8, m[NF] = F[NF-1]>>56
|
||||
template <int NF> __device__ __forceinline__ void pack(uint8_t tag, const uint64_t F[NF], uint64_t m[16]) {
|
||||
m[0] = (uint64_t)tag | (F[0] << 8);
|
||||
#pragma unroll
|
||||
for (int q = 1; q < NF; q++) m[q] = (F[q - 1] >> 56) | (F[q] << 8);
|
||||
m[NF] = F[NF - 1] >> 56;
|
||||
#pragma unroll
|
||||
for (int q = NF + 1; q < 16; q++) m[q] = 0;
|
||||
}
|
||||
|
||||
template <bool SOA> __device__ __forceinline__ uint64_t ix(uint64_t row, int h, uint64_t inst, uint64_t B, uint64_t rows) {
|
||||
return SOA ? ((row * 2 + h) * B + inst) : ((inst * rows + row) * 2 + h);
|
||||
}
|
||||
__device__ __forceinline__ void ld4(const uint4 *p0, const uint4 *p1, uint64_t o[4]) {
|
||||
uint4 a = *p0, b = *p1;
|
||||
o[0] = ((uint64_t)a.y << 32) | a.x; o[1] = ((uint64_t)a.w << 32) | a.z; o[2] = ((uint64_t)b.y << 32) | b.x; o[3] = ((uint64_t)b.w << 32) | b.z;
|
||||
}
|
||||
__device__ __forceinline__ void st4(uint4 *p0, uint4 *p1, const uint64_t s[4]) {
|
||||
*p0 = make_uint4((uint32_t)s[0], (uint32_t)(s[0] >> 32), (uint32_t)s[1], (uint32_t)(s[1] >> 32));
|
||||
*p1 = make_uint4((uint32_t)s[2], (uint32_t)(s[2] >> 32), (uint32_t)s[3], (uint32_t)(s[3] >> 32));
|
||||
}
|
||||
__device__ __forceinline__ void u4to(const uint4 a, const uint4 b, uint64_t o[4]) {
|
||||
o[0] = ((uint64_t)a.y << 32) | a.x; o[1] = ((uint64_t)a.w << 32) | a.z; o[2] = ((uint64_t)b.y << 32) | b.x; o[3] = ((uint64_t)b.w << 32) | b.z;
|
||||
}
|
||||
|
||||
template <bool SOA>
|
||||
__global__ void k_label1(const uint64_t *__restrict__ chi, const uint32_t *__restrict__ far, uint64_t N, uint4 *L, uint64_t B) {
|
||||
uint64_t inst = (uint64_t)blockIdx.x * blockDim.x + threadIdx.x;
|
||||
if (inst >= B) return;
|
||||
const uint64_t rows = N + 1;
|
||||
uint64_t m[16], prev[4], o[4];
|
||||
uint64_t F[13];
|
||||
#pragma unroll
|
||||
for (int i = 0; i < 4; i++) F[i] = chi[inst * 4 + i];
|
||||
{ // node 1: 'L' | chi | u64 1 (41 bytes)
|
||||
uint64_t G[5] = {F[0], F[1], F[2], F[3], 1};
|
||||
pack<5>('L', G, m); b2blk(m, 41, o);
|
||||
st4(&L[ix<SOA>(1, 0, inst, B, rows)], &L[ix<SOA>(1, 1, inst, B, rows)], o);
|
||||
if (N < 2) return;
|
||||
uint64_t G2[9] = {F[0], F[1], F[2], F[3], 2, o[0], o[1], o[2], o[3]};
|
||||
pack<9>('L', G2, m); b2blk(m, 73, prev);
|
||||
st4(&L[ix<SOA>(2, 0, inst, B, rows)], &L[ix<SOA>(2, 1, inst, B, rows)], prev);
|
||||
}
|
||||
if (N < 3) return;
|
||||
uint32_t f = far[3];
|
||||
uint4 fa = L[ix<SOA>(f, 0, inst, B, rows)], fb = L[ix<SOA>(f, 1, inst, B, rows)];
|
||||
for (uint64_t v = 3; v <= N; v++) {
|
||||
uint4 na = fa, nb = fb;
|
||||
if (v + 1 <= N) { uint32_t nf = __ldg(&far[v + 1]); na = L[ix<SOA>(nf, 0, inst, B, rows)]; nb = L[ix<SOA>(nf, 1, inst, B, rows)]; }
|
||||
uint64_t fl[4]; u4to(fa, fb, fl);
|
||||
F[4] = v; F[5] = fl[0]; F[6] = fl[1]; F[7] = fl[2]; F[8] = fl[3]; F[9] = prev[0]; F[10] = prev[1]; F[11] = prev[2]; F[12] = prev[3];
|
||||
pack<13>('L', F, m);
|
||||
b2blk(m, 105, prev);
|
||||
st4(&L[ix<SOA>(v, 0, inst, B, rows)], &L[ix<SOA>(v, 1, inst, B, rows)], prev);
|
||||
fa = na; fb = nb;
|
||||
}
|
||||
}
|
||||
|
||||
template <bool SOA>
|
||||
__global__ void k_tree(int d, int n, const uint64_t *__restrict__ chi, const uint4 *L, uint4 *T, uint64_t B, uint64_t N) {
|
||||
uint64_t t = (uint64_t)blockIdx.x * blockDim.x + threadIdx.x; uint64_t cnt = 1ull << d;
|
||||
if (t >= cnt * B) return;
|
||||
uint64_t inst = t % B, id = t / B; const uint64_t lrows = N + 1, trows = N;
|
||||
uint64_t l[4], r[4], m[16], o[4];
|
||||
if (d == n - 1) {
|
||||
ld4(&L[ix<SOA>(id + 1, 0, inst, B, lrows)], &L[ix<SOA>(id + 1, 1, inst, B, lrows)], l);
|
||||
ld4(&L[ix<SOA>(id + cnt + 1, 0, inst, B, lrows)], &L[ix<SOA>(id + cnt + 1, 1, inst, B, lrows)], r);
|
||||
} else {
|
||||
uint64_t base = 2 * cnt - 1;
|
||||
ld4(&T[ix<SOA>(base + id, 0, inst, B, trows)], &T[ix<SOA>(base + id, 1, inst, B, trows)], l);
|
||||
ld4(&T[ix<SOA>(base + id + cnt, 0, inst, B, trows)], &T[ix<SOA>(base + id + cnt, 1, inst, B, trows)], r);
|
||||
}
|
||||
uint64_t F[12] = {chi[inst * 4], chi[inst * 4 + 1], chi[inst * 4 + 2], chi[inst * 4 + 3], l[0], l[1], l[2], l[3], r[0], r[1], r[2], r[3]};
|
||||
pack<12>('M', F, m); b2blk(m, 97, o);
|
||||
st4(&T[ix<SOA>((cnt - 1) + id, 0, inst, B, trows)], &T[ix<SOA>((cnt - 1) + id, 1, inst, B, trows)], o);
|
||||
}
|
||||
|
||||
// proof: thread per (inst, challenge); slot = 3 openings of (1+n) digests as bytes (LE u64 words = the digest bytes)
|
||||
template <bool SOA>
|
||||
__global__ void k_prove(int n, int k, const uint64_t *__restrict__ chi, const uint32_t *__restrict__ far, const uint4 *L, const uint4 *T,
|
||||
uint64_t B, uint64_t N, uint64_t *out, uint8_t *np_out) {
|
||||
uint64_t t = (uint64_t)blockIdx.x * blockDim.x + threadIdx.x;
|
||||
if (t >= (uint64_t)k * B) return;
|
||||
uint64_t inst = t / k; int i = (int)(t % k) + 1; const uint64_t lrows = N + 1, trows = N;
|
||||
uint64_t tau[4], m[16], o[4];
|
||||
ld4(&T[ix<SOA>(0, 0, inst, B, trows)], &T[ix<SOA>(0, 1, inst, B, trows)], tau);
|
||||
uint64_t F[9] = {chi[inst * 4], chi[inst * 4 + 1], chi[inst * 4 + 2], chi[inst * 4 + 3], (uint64_t)i, tau[0], tau[1], tau[2], tau[3]};
|
||||
pack<9>('C', F, m); b2blk(m, 73, o);
|
||||
uint64_t c = o[0] & (N - 1), v = c + 1; uint64_t ps[3]; int np = 0; ps[0] = v;
|
||||
if (v == 2) { ps[1] = 1; np = 1; } else if (v >= 3) { ps[1] = far[v]; ps[2] = v - 1; np = 2; }
|
||||
np_out[inst * k + (i - 1)] = (uint8_t)np;
|
||||
const uint64_t seg = (uint64_t)(1 + n) * 4, slot = 3 * seg;
|
||||
uint64_t *op = out + (inst * k + (i - 1)) * slot;
|
||||
for (int p = 0; p <= np; p++) {
|
||||
uint64_t x = ps[p] - 1, d4[4];
|
||||
ld4(&L[ix<SOA>(ps[p], 0, inst, B, lrows)], &L[ix<SOA>(ps[p], 1, inst, B, lrows)], d4);
|
||||
for (int q = 0; q < 4; q++) op[p * seg + q] = d4[q];
|
||||
for (int j = 1; j <= n; j++) {
|
||||
uint64_t sid = (x & ((1ull << j) - 1)) ^ (1ull << (j - 1));
|
||||
if (j == n) ld4(&L[ix<SOA>(sid + 1, 0, inst, B, lrows)], &L[ix<SOA>(sid + 1, 1, inst, B, lrows)], d4);
|
||||
else { uint64_t rr = ((1ull << j) - 1) + sid; ld4(&T[ix<SOA>(rr, 0, inst, B, trows)], &T[ix<SOA>(rr, 1, inst, B, trows)], d4); }
|
||||
for (int q = 0; q < 4; q++) op[p * seg + 4 * j + q] = d4[q];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static double wall_ms() { return std::chrono::duration<double, std::milli>(std::chrono::system_clock::now().time_since_epoch()).count(); }
|
||||
static void hexs(const uint8_t *b, int n, char *o) { for (int i = 0; i < n; i++) sprintf(o + 2 * i, "%02x", b[i]); o[2 * n] = 0; }
|
||||
|
||||
struct Opt { int n = 20; long B = 0; bool soa = true; int passes = 1; int k = 64; long check = 2; bool wrong_edge = false;
|
||||
double min_label_s = 0; std::string tag = "row"; double reserve_gib = 1.0; int tpb = 128; std::string kat_dir; };
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
Opt o;
|
||||
for (int a = 1; a < argc; a++) {
|
||||
std::string s = argv[a]; auto nx = [&]() { return std::string(argv[++a]); };
|
||||
if (s == "--n") o.n = std::stoi(nx()); else if (s == "--B") o.B = std::stol(nx()); else if (s == "--layout") o.soa = nx() == "soa";
|
||||
else if (s == "--passes") o.passes = std::stoi(nx()); else if (s == "--k") o.k = std::stoi(nx());
|
||||
else if (s == "--check") o.check = std::stol(nx()); else if (s == "--wrong-edge") o.wrong_edge = true;
|
||||
else if (s == "--min-label-s") o.min_label_s = std::stod(nx()); else if (s == "--tag") o.tag = nx(); else if (s == "--reserve-gib") o.reserve_gib = std::stod(nx());
|
||||
else if (s == "--tpb") o.tpb = std::stoi(nx()); else if (s == "--kat-dir") o.kat_dir = nx();
|
||||
else { fprintf(stderr, "unknown arg %s\n", s.c_str()); return 2; }
|
||||
}
|
||||
b1_init();
|
||||
const int n = o.n; const uint64_t N = 1ull << n;
|
||||
cudaDeviceProp prop; CK(cudaGetDeviceProperties(&prop, 0));
|
||||
CK(cudaMemcpyToSymbol(dIV2, b2_IV, sizeof b2_IV));
|
||||
|
||||
double tg0 = wall_ms();
|
||||
std::vector<uint32_t> far(N + 1);
|
||||
#pragma omp parallel for schedule(static, 4096)
|
||||
for (long long v = 0; v <= (long long)N; v++) far[v] = b1_far((uint64_t)v);
|
||||
std::vector<uint32_t> far_dev = far;
|
||||
if (o.wrong_edge) for (uint64_t v = 3; v <= N; v++) far_dev[v] = (uint32_t)(v - 2); // KNOWN-FAILED: DRSample's long edges deleted
|
||||
double t_graph = (wall_ms() - tg0) / 1e3;
|
||||
|
||||
const uint64_t slotw = 3ull * (1 + n) * 4; // u64 words per challenge slot
|
||||
const uint64_t per_inst = (N + 1) * 32 + N * 32 + (uint64_t)o.k * slotw * 8 + o.k + 32;
|
||||
size_t fr, tot; CK(cudaMemGetInfo(&fr, &tot));
|
||||
uint64_t fixed = (N + 1) * 4 + (uint64_t)(o.reserve_gib * (1ull << 30));
|
||||
uint64_t Bmax = fr > fixed ? (fr - fixed) / per_inst : 0;
|
||||
uint64_t B = o.B > 0 ? (uint64_t)o.B : Bmax;
|
||||
if (B == 0 || B > Bmax) { fprintf(stderr, "B=%llu exceeds Bmax=%llu\n", (unsigned long long)B, (unsigned long long)Bmax); return 4; }
|
||||
|
||||
double ts0 = wall_ms();
|
||||
uint4 *dL, *dT; uint32_t *dfar; uint64_t *dchi, *dproof; uint8_t *dnp;
|
||||
CK(cudaMalloc(&dL, (N + 1) * 32 * B)); CK(cudaMalloc(&dT, N * 32 * B)); CK(cudaMalloc(&dfar, (N + 1) * 4));
|
||||
CK(cudaMalloc(&dchi, B * 32)); CK(cudaMalloc(&dproof, B * o.k * slotw * 8)); CK(cudaMalloc(&dnp, B * o.k));
|
||||
std::vector<uint8_t> chib(B * 32);
|
||||
for (uint64_t j = 0; j < B; j++) b1_batch_chi(n, j, &chib[32 * j]);
|
||||
CK(cudaMemcpy(dfar, far_dev.data(), (N + 1) * 4, cudaMemcpyHostToDevice));
|
||||
CK(cudaMemcpy(dchi, chib.data(), B * 32, cudaMemcpyHostToDevice)); // LE u64 words = the chi bytes in order
|
||||
CK(cudaDeviceSynchronize());
|
||||
double t_state_alloc = (wall_ms() - ts0) / 1e3;
|
||||
|
||||
cudaEvent_t e0, e1; CK(cudaEventCreate(&e0)); CK(cudaEventCreate(&e1));
|
||||
const int TPB = o.tpb;
|
||||
std::vector<double> pass_s; double lw0 = wall_ms(), lw1 = lw0;
|
||||
for (int p = 0; p < o.passes || (lw1 - lw0) / 1e3 < o.min_label_s; p++) {
|
||||
CK(cudaEventRecord(e0));
|
||||
dim3 g((unsigned)((B + TPB - 1) / TPB));
|
||||
if (o.soa) k_label1<true><<<g, TPB>>>(dchi, dfar, N, dL, B); else k_label1<false><<<g, TPB>>>(dchi, dfar, N, dL, B);
|
||||
CK(cudaGetLastError()); CK(cudaEventRecord(e1)); CK(cudaEventSynchronize(e1));
|
||||
float ms; CK(cudaEventElapsedTime(&ms, e0, e1)); pass_s.push_back(ms / 1e3); lw1 = wall_ms();
|
||||
if (p > 100000) break;
|
||||
}
|
||||
CK(cudaEventRecord(e0));
|
||||
for (int d = n - 1; d >= 0; d--) {
|
||||
uint64_t th = (1ull << d) * B; dim3 g((unsigned)((th + 255) / 256));
|
||||
if (o.soa) k_tree<true><<<g, 256>>>(d, n, dchi, dL, dT, B, N); else k_tree<false><<<g, 256>>>(d, n, dchi, dL, dT, B, N);
|
||||
}
|
||||
CK(cudaGetLastError()); CK(cudaEventRecord(e1)); CK(cudaEventSynchronize(e1));
|
||||
float ms_tree; CK(cudaEventElapsedTime(&ms_tree, e0, e1));
|
||||
|
||||
// proof creation: challenges and openings on the device, home, B1 container
|
||||
double tp0 = wall_ms();
|
||||
{
|
||||
uint64_t th = (uint64_t)o.k * B; dim3 g((unsigned)((th + 127) / 128));
|
||||
if (o.soa) k_prove<true><<<g, 128>>>(n, o.k, dchi, dfar, dL, dT, B, N, dproof, dnp);
|
||||
else k_prove<false><<<g, 128>>>(n, o.k, dchi, dfar, dL, dT, B, N, dproof, dnp);
|
||||
CK(cudaGetLastError()); CK(cudaDeviceSynchronize());
|
||||
}
|
||||
std::vector<uint64_t> hproof(B * o.k * slotw); std::vector<uint8_t> hnp(B * o.k);
|
||||
CK(cudaMemcpy(hproof.data(), dproof, hproof.size() * 8, cudaMemcpyDeviceToHost));
|
||||
CK(cudaMemcpy(hnp.data(), dnp, hnp.size(), cudaMemcpyDeviceToHost));
|
||||
std::vector<uint32_t> taur(B * 8);
|
||||
if (o.soa) { std::vector<uint4> tmp(2 * B); CK(cudaMemcpy(tmp.data(), dT, 2 * B * 16, cudaMemcpyDeviceToHost));
|
||||
for (uint64_t j = 0; j < B; j++) { memcpy(&taur[8 * j], &tmp[j], 16); memcpy(&taur[8 * j + 4], &tmp[B + j], 16); } }
|
||||
else for (uint64_t j = 0; j < B; j++) CK(cudaMemcpy(&taur[8 * j], (const char *)dT + j * N * 32, 32, cudaMemcpyDeviceToHost));
|
||||
std::vector<std::vector<uint8_t>> proofs(B);
|
||||
const uint64_t segb = (uint64_t)(1 + n) * 32;
|
||||
#pragma omp parallel for schedule(static)
|
||||
for (long long j = 0; j < (long long)B; j++) {
|
||||
std::vector<uint8_t> &P = proofs[j]; P.reserve(45 + (size_t)o.k * (1 + 3 * segb));
|
||||
const uint8_t hdr[8] = {'B', '1', 'M', 'T', 'P', 'D', 'R', '1'}; P.insert(P.end(), hdr, hdr + 8); P.push_back((uint8_t)n);
|
||||
uint32_t kk = (uint32_t)o.k; P.insert(P.end(), (uint8_t *)&kk, (uint8_t *)&kk + 4);
|
||||
P.insert(P.end(), (uint8_t *)&taur[8 * j], (uint8_t *)&taur[8 * j] + 32);
|
||||
for (int i = 0; i < o.k; i++) {
|
||||
const uint8_t *s = (const uint8_t *)&hproof[((uint64_t)j * o.k + i) * slotw]; int np = hnp[(uint64_t)j * o.k + i];
|
||||
P.insert(P.end(), s, s + segb); P.push_back((uint8_t)np); P.insert(P.end(), s + segb, s + (1 + np) * segb);
|
||||
}
|
||||
}
|
||||
double t_prove = (wall_ms() - tp0) / 1e3;
|
||||
|
||||
// every GPU proof through the C-port verifier (B1's checks, the TRUE graph)
|
||||
double tv0 = wall_ms(); long accepted = 0;
|
||||
#pragma omp parallel for reduction(+ : accepted) schedule(dynamic, 1)
|
||||
for (long long j = 0; j < (long long)B; j++) accepted += b1_verify(&chib[32 * j], n, o.k, far.data(), proofs[j].data(), proofs[j].size());
|
||||
double t_verify_all = (wall_ms() - tv0) / 1e3;
|
||||
|
||||
// oracle: full byte identity (labels, every tree node, root, proof) for `check` instances against the C port; instance 0
|
||||
// (B1's KAT chi) also against B1's own fixture digests when --kat-dir names them and n is a KAT size
|
||||
std::vector<uint64_t> chk;
|
||||
uint64_t C = o.check < 0 ? B : std::min<uint64_t>((uint64_t)o.check, B);
|
||||
for (uint64_t q = 0; q < C; q++) chk.push_back(C == 1 ? 0 : (q * (B - 1)) / (C - 1));
|
||||
long lab_bad = 0, tree_bad = 0, root_bad = 0, proof_bad = 0; int kat_cmp = -1;
|
||||
double tc0 = wall_ms();
|
||||
if (C) {
|
||||
std::vector<uint4> hL, hT;
|
||||
if (o.soa) { hL.resize(2 * (N + 1) * B); hT.resize(2 * N * B);
|
||||
CK(cudaMemcpy(hL.data(), dL, hL.size() * 16, cudaMemcpyDeviceToHost)); CK(cudaMemcpy(hT.data(), dT, hT.size() * 16, cudaMemcpyDeviceToHost)); }
|
||||
for (uint64_t q = 0; q < C; q++) {
|
||||
uint64_t j = chk[q];
|
||||
std::vector<uint8_t> Lg((N + 1) * 32), Tg(N * 32);
|
||||
if (o.soa) {
|
||||
#pragma omp parallel for schedule(static)
|
||||
for (long long r = 0; r < (long long)(2 * (N + 1)); r++) memcpy(&Lg[16 * r], &hL[(uint64_t)r * B + j], 16);
|
||||
#pragma omp parallel for schedule(static)
|
||||
for (long long r = 0; r < (long long)(2 * N); r++) memcpy(&Tg[16 * r], &hT[(uint64_t)r * B + j], 16);
|
||||
} else {
|
||||
CK(cudaMemcpy(Lg.data(), (const char *)dL + j * (N + 1) * 32, (N + 1) * 32, cudaMemcpyDeviceToHost));
|
||||
CK(cudaMemcpy(Tg.data(), (const char *)dT + j * N * 32, N * 32, cudaMemcpyDeviceToHost));
|
||||
}
|
||||
std::vector<uint8_t> lab((N + 1) * 32), tree(N * 32);
|
||||
b1_label_all(&chib[32 * j], N, far.data(), lab.data());
|
||||
b1_merkle(&chib[32 * j], n, lab.data(), tree.data());
|
||||
long lb = 0, tb = 0;
|
||||
#pragma omp parallel for reduction(+ : lb) schedule(static)
|
||||
for (long long v = 1; v <= (long long)N; v++) lb += memcmp(&Lg[32 * v], &lab[32 * v], 32) != 0;
|
||||
#pragma omp parallel for reduction(+ : tb) schedule(static)
|
||||
for (long long i = 0; i < (long long)N - 1; i++) tb += memcmp(&Tg[32 * i], &tree[32 * i], 32) != 0;
|
||||
root_bad += memcmp(&taur[8 * j], &tree[0], 32) != 0;
|
||||
std::vector<uint8_t> P(b1_proof_max(n, o.k)); size_t pl = b1_prove(&chib[32 * j], n, o.k, far.data(), lab.data(), tree.data(), P.data());
|
||||
proof_bad += (pl != proofs[j].size() || memcmp(P.data(), proofs[j].data(), pl) != 0);
|
||||
lab_bad += lb != 0; tree_bad += tb != 0;
|
||||
if (lb || tb) fprintf(stderr, "oracle: instance %llu labels_bad=%ld tree_bad=%ld\n", (unsigned long long)j, lb, tb);
|
||||
if (j == 0 && !o.kat_dir.empty() && (n == 4 || n == 8 || n == 12 || n == 16 || n == 20)) {
|
||||
// B1's fixture: labels_concat_sha256 and tau of kat-nNN.json, computed here from the GPU's own instance-0 bytes
|
||||
char path[512]; snprintf(path, sizeof path, "%s/kat-n%02d.json", o.kat_dir.c_str(), n);
|
||||
FILE *f = fopen(path, "rb"); std::string js;
|
||||
if (f) { char buf[65536]; size_t r; while ((r = fread(buf, 1, sizeof buf, f)) > 0) js.append(buf, r); fclose(f); }
|
||||
uint8_t dl[32]; b3_sha256(&Lg[32], 32 * N, dl); char hl[65], ht[65]; hexs(dl, 32, hl); hexs((const uint8_t *)&taur[0], 32, ht);
|
||||
kat_cmp = (!js.empty() && js.find(std::string("\"labels_concat_sha256\": \"") + hl + "\"") != std::string::npos &&
|
||||
js.find(std::string("\"tau\": \"") + ht + "\"") != std::string::npos) ? 1 : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
double t_check = (wall_ms() - tc0) / 1e3;
|
||||
bool oracle_ok = C > 0 && lab_bad == 0 && tree_bad == 0 && root_bad == 0 && proof_bad == 0 && accepted == (long)B && kat_cmp != 0;
|
||||
|
||||
double sum = 0; int cnt = 0;
|
||||
for (size_t p = (pass_s.size() > 1 ? 1 : 0); p < pass_s.size(); p++) { sum += pass_s[p]; cnt++; }
|
||||
double label_s = sum / cnt, lps = (double)N * B / label_s;
|
||||
printf("{\"tag\":\"%s\",\"gpu\":\"%s\",\"sm\":\"%d.%d\",\"sms\":%d,\"encoding\":\"B1\",\"n\":%d,\"N\":%llu,\"inst_MiB\":%.1f,\"B\":%llu,\"Bmax\":%llu,"
|
||||
"\"layout\":\"%s\",\"kernel\":\"k1\",\"tpb\":%d,\"k\":%d,\"wrong_edge\":%d,\"passes\":%zu,\"graph_s\":%.4f,\"state_alloc_s\":%.4f,"
|
||||
"\"label_s_per_pass\":%.6f,\"labels_per_s\":%.1f,\"labels_per_s_per_inst\":%.1f,\"ns_per_label_per_inst\":%.2f,"
|
||||
"\"merkle_s\":%.6f,\"prove_s\":%.6f,\"verify_all_s\":%.4f,\"accepted\":%ld,\"checked\":%llu,\"lab_bad_inst\":%ld,\"tree_bad_inst\":%ld,"
|
||||
"\"root_bad\":%ld,\"proof_bad\":%ld,\"b1_kat_instance0\":%d,\"check_s\":%.2f,\"oracle\":\"%s\",\"label_window_unix_ms\":[%.0f,%.0f],\"free_gib\":%.2f,\"per_inst_MiB\":%.1f,\"proof_bytes_inst0\":%zu}\n",
|
||||
o.tag.c_str(), prop.name, prop.major, prop.minor, prop.multiProcessorCount, n, (unsigned long long)N, N * 32.0 / 1048576.0,
|
||||
(unsigned long long)B, (unsigned long long)Bmax, o.soa ? "soa" : "aos", TPB, o.k, (int)o.wrong_edge, pass_s.size(), t_graph, t_state_alloc,
|
||||
label_s, lps, lps / B, 1e9 / (lps / B), ms_tree / 1e3, t_prove, t_verify_all, accepted, (unsigned long long)C, lab_bad, tree_bad,
|
||||
root_bad, proof_bad, kat_cmp, t_check, oracle_ok ? "IDENTICAL" : "MISMATCH", lw0, lw1, fr / 1073741824.0, per_inst / 1048576.0, proofs[0].size());
|
||||
fflush(stdout);
|
||||
return oracle_ok ? 0 : 1;
|
||||
}
|
||||
224
tools/mhpow/b3/b3p1_spec.h
Normal file
224
tools/mhpow/b3/b3p1_spec.h
Normal file
|
|
@ -0,0 +1,224 @@
|
|||
/*
|
||||
* b3p1_spec.h - the B3 lane's PROVISIONAL byte encoding of the Blocki-Smearsoll
|
||||
* MTP/DRSample memory-hard proof of work (TCC 2025, eprint 2025/1456, full PDF
|
||||
* sha256 13c3646e7d85c1aa58a92914582caab5798d90cf2a3cad33e58d81d49c1d31db),
|
||||
* host side (C99). Used by cpu_ref.c (the sequential CPU reference) and by the
|
||||
* host half of b3_gpu.cu (the oracle inside the GPU harness).
|
||||
*
|
||||
* STATUS: the paper fixes the construction abstractly, not its bytes. The B1
|
||||
* lane (R15-05) owns the exact reference encoding (hash, lambda, integer
|
||||
* encoding, domain tags, the DRSample sampler's randomness). Until B1's
|
||||
* known-answer fixtures exist, this file is the B3 lane's literal reading of
|
||||
* the paper ("B3P1"), and every GPU row is checked byte for byte against THIS
|
||||
* reference only. The swap to B1's encoding touches this header and the
|
||||
* device mirror in b3_gpu.cu (b3d_* functions), nothing else.
|
||||
*
|
||||
* What is taken from the paper verbatim (section 3.2 and 2.2):
|
||||
* - nodes 1..N, N = 2^n, topological order, parents listed ascending;
|
||||
* - l_1 = H(chi, 1); l_v = H(chi, v, l_{v1}, ..., l_{vk}) with v1 < ... < vk;
|
||||
* - Merkle: tau_x = l_{1+bin(x)} for x in {0,1}^n, bin(x) = sum x_i 2^(i-1)
|
||||
* (x_1 is the LEAST significant bit), tau_v = H(chi, tau_{v||0}, tau_{v||1}),
|
||||
* root tau = H(chi, tau_0, tau_1);
|
||||
* - challenge i in [1,k]: c_i = H(chi, i, tau) mod N, challenged node c_i + 1;
|
||||
* - proof: tau and, per challenge, the label of c_i + 1 with its Merkle reveal
|
||||
* and every parent's label with its reveal;
|
||||
* - verifier: recompute challenges, check every reveal against tau, check
|
||||
* local consistency of every challenged node.
|
||||
* What is from ABH17 (Alwen, Blocki, Harsha, CCS 2017, eprint 2017/443,
|
||||
* Algorithm 1 DRSample): node 2 has the single parent 1; node v >= 3 has
|
||||
* parents v-1 and v-r with g' <- [1, floor(log2 v) + 1], g = min(v-1, 2^g'),
|
||||
* r <- [max(g/2, 2), g] (so v-r <= v-2: the far parent is never v-1).
|
||||
* B3P1 choices (provisional, B1 replaces them): H = SHA-256, lambda = 256;
|
||||
* chi is 32 bytes; integers v and i are 8-byte little-endian; the challenge
|
||||
* integer is the hash's first 8 bytes little-endian, mod N; the DRSample coins
|
||||
* for node v are SHA-256("B3P1-DRSample" || le64(N) || le64(v)), u0 = bytes
|
||||
* 0..7 LE picks g' = 1 + u0 mod (floor(log2 v)+1), u1 = bytes 8..15 LE picks
|
||||
* r = lo + u1 mod (g - lo + 1) (a 2^-50-level modulo bias, stated, not hidden).
|
||||
*/
|
||||
#ifndef B3P1_SPEC_H
|
||||
#define B3P1_SPEC_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define B3P1_LAMBDA_BYTES 32
|
||||
#define B3P1_CHI_BYTES 32
|
||||
#define B3P1_ENCODING_ID "B3P1 (provisional, B3 lane reading of eprint 2025/1456 s3.2 + ABH17 Alg.1; SHA-256, lambda=256, le64 integers)"
|
||||
|
||||
/* ---------------- portable SHA-256 ---------------- */
|
||||
static const uint32_t b3_K[64] = {
|
||||
0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,
|
||||
0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,
|
||||
0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,
|
||||
0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,
|
||||
0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,
|
||||
0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,
|
||||
0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,
|
||||
0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2};
|
||||
static const uint32_t b3_IV[8] = {0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19};
|
||||
|
||||
#define B3_ROR(x,n) (((x) >> (n)) | ((x) << (32-(n))))
|
||||
static void b3_compress(uint32_t st[8], const uint8_t blk[64]) {
|
||||
uint32_t w[64], a,b,c,d,e,f,g,h;
|
||||
for (int i = 0; i < 16; i++) w[i] = ((uint32_t)blk[4*i]<<24)|((uint32_t)blk[4*i+1]<<16)|((uint32_t)blk[4*i+2]<<8)|blk[4*i+3];
|
||||
for (int i = 16; i < 64; i++) {
|
||||
uint32_t s0 = B3_ROR(w[i-15],7)^B3_ROR(w[i-15],18)^(w[i-15]>>3);
|
||||
uint32_t s1 = B3_ROR(w[i-2],17)^B3_ROR(w[i-2],19)^(w[i-2]>>10);
|
||||
w[i] = w[i-16]+s0+w[i-7]+s1;
|
||||
}
|
||||
a=st[0];b=st[1];c=st[2];d=st[3];e=st[4];f=st[5];g=st[6];h=st[7];
|
||||
for (int i = 0; i < 64; i++) {
|
||||
uint32_t t1 = h + (B3_ROR(e,6)^B3_ROR(e,11)^B3_ROR(e,25)) + ((e&f)^(~e&g)) + b3_K[i] + w[i];
|
||||
uint32_t t2 = (B3_ROR(a,2)^B3_ROR(a,13)^B3_ROR(a,22)) + ((a&b)^(a&c)^(b&c));
|
||||
h=g; g=f; f=e; e=d+t1; d=c; c=b; b=a; a=t1+t2;
|
||||
}
|
||||
st[0]+=a;st[1]+=b;st[2]+=c;st[3]+=d;st[4]+=e;st[5]+=f;st[6]+=g;st[7]+=h;
|
||||
}
|
||||
|
||||
/* one-shot SHA-256 of a message of any length */
|
||||
static void b3_sha256(const uint8_t *msg, size_t len, uint8_t out[32]) {
|
||||
uint32_t st[8]; memcpy(st, b3_IV, sizeof st);
|
||||
size_t off = 0;
|
||||
while (len - off >= 64) { b3_compress(st, msg + off); off += 64; }
|
||||
uint8_t tail[128]; memset(tail, 0, sizeof tail);
|
||||
size_t rem = len - off; memcpy(tail, msg + off, rem); tail[rem] = 0x80;
|
||||
size_t tl = (rem + 9 <= 64) ? 64 : 128;
|
||||
uint64_t bits = (uint64_t)len * 8;
|
||||
for (int i = 0; i < 8; i++) tail[tl-1-i] = (uint8_t)(bits >> (8*i));
|
||||
b3_compress(st, tail); if (tl == 128) b3_compress(st, tail + 64);
|
||||
for (int i = 0; i < 8; i++) { out[4*i]=st[i]>>24; out[4*i+1]=st[i]>>16; out[4*i+2]=st[i]>>8; out[4*i+3]=st[i]; }
|
||||
}
|
||||
|
||||
#define b3_sha256_big b3_sha256
|
||||
|
||||
static inline void b3_le64(uint8_t *p, uint64_t x) { for (int i = 0; i < 8; i++) p[i] = (uint8_t)(x >> (8*i)); }
|
||||
static inline uint64_t b3_rd64(const uint8_t *p) { uint64_t x = 0; for (int i = 7; i >= 0; i--) x = (x << 8) | p[i]; return x; }
|
||||
static inline int b3_floorlog2(uint64_t v) { int r = -1; while (v) { v >>= 1; r++; } return r; }
|
||||
|
||||
/* ---------------- DRSample (ABH17 Algorithm 1), deterministic coins ---------------- */
|
||||
/* far[v] = v - r for v >= 3 (1-based node ids); far[1] = far[2] = 0 (no far parent). */
|
||||
static uint32_t b3_drsample_far(uint64_t N, uint64_t v) {
|
||||
if (v < 3) return 0;
|
||||
uint8_t m[13 + 16], h[32];
|
||||
memcpy(m, "B3P1-DRSample", 13); b3_le64(m + 13, N); b3_le64(m + 21, v);
|
||||
b3_sha256(m, sizeof m, h);
|
||||
uint64_t u0 = b3_rd64(h), u1 = b3_rd64(h + 8);
|
||||
uint64_t gp = 1 + u0 % (uint64_t)(b3_floorlog2(v) + 1);
|
||||
uint64_t g = (gp >= 63) ? (v - 1) : ((1ull << gp) < (v - 1) ? (1ull << gp) : (v - 1));
|
||||
uint64_t lo = g / 2 < 2 ? 2 : g / 2;
|
||||
uint64_t r = lo + u1 % (g - lo + 1);
|
||||
return (uint32_t)(v - r);
|
||||
}
|
||||
|
||||
/* ---------------- labelling (the paper's l_v) ---------------- */
|
||||
/* labels: (N+1) * 32 bytes, index 1..N used; far: N+1 entries. */
|
||||
static void b3_label_msg(const uint8_t chi[32], uint64_t v, const uint8_t *pa, const uint8_t *pb, uint8_t *msg, size_t *len) {
|
||||
memcpy(msg, chi, 32); b3_le64(msg + 32, v); size_t L = 40;
|
||||
if (pa) { memcpy(msg + L, pa, 32); L += 32; }
|
||||
if (pb) { memcpy(msg + L, pb, 32); L += 32; }
|
||||
*len = L;
|
||||
}
|
||||
static void b3_label_all(const uint8_t chi[32], uint64_t N, const uint32_t *far, uint8_t *labels) {
|
||||
uint8_t msg[104]; size_t L;
|
||||
b3_label_msg(chi, 1, NULL, NULL, msg, &L); b3_sha256(msg, L, labels + 32);
|
||||
if (N >= 2) { b3_label_msg(chi, 2, labels + 32, NULL, msg, &L); b3_sha256(msg, L, labels + 64); }
|
||||
for (uint64_t v = 3; v <= N; v++) {
|
||||
b3_label_msg(chi, v, labels + 32 * (uint64_t)far[v], labels + 32 * (v - 1), msg, &L);
|
||||
b3_sha256(msg, L, labels + 32 * v);
|
||||
}
|
||||
}
|
||||
static int b3_local_ok(const uint8_t chi[32], uint64_t v, const uint32_t *far, const uint8_t *lv, const uint8_t *lfar, const uint8_t *lprev) {
|
||||
uint8_t msg[104], h[32]; size_t L;
|
||||
if (v == 1) b3_label_msg(chi, 1, NULL, NULL, msg, &L);
|
||||
else if (v == 2) b3_label_msg(chi, 2, lprev, NULL, msg, &L);
|
||||
else b3_label_msg(chi, v, lfar, lprev, msg, &L);
|
||||
(void)far; b3_sha256(msg, L, h); return memcmp(h, lv, 32) == 0;
|
||||
}
|
||||
|
||||
/* ---------------- Merkle tree, the paper's bit order ---------------- */
|
||||
/* tree level d (0..n) has 2^d nodes; node id at depth d = sum_{i<=d} x_i 2^(i-1).
|
||||
* children of (d,id): (d+1,id) and (d+1,id+2^d). Leaves (d=n): leaf id -> label id+1.
|
||||
* Storage: tree[(2^d - 1) + id] for d < n (internal, 2^n - 1 nodes); leaves read from labels. */
|
||||
static void b3_node_hash(const uint8_t chi[32], const uint8_t *l, const uint8_t *r, uint8_t out[32]) {
|
||||
uint8_t m[96]; memcpy(m, chi, 32); memcpy(m + 32, l, 32); memcpy(m + 64, r, 32); b3_sha256(m, 96, out);
|
||||
}
|
||||
static void b3_merkle(const uint8_t chi[32], int n, const uint8_t *labels, uint8_t *tree) {
|
||||
for (int d = n - 1; d >= 0; d--) {
|
||||
uint64_t cnt = 1ull << d;
|
||||
for (uint64_t id = 0; id < cnt; id++) {
|
||||
const uint8_t *L, *R;
|
||||
if (d == n - 1) { L = labels + 32 * (id + 1); R = labels + 32 * (id + cnt + 1); }
|
||||
else { L = tree + 32 * ((2 * cnt - 1) + id); R = tree + 32 * ((2 * cnt - 1) + id + cnt); }
|
||||
b3_node_hash(chi, L, R, tree + 32 * ((cnt - 1) + id));
|
||||
}
|
||||
}
|
||||
}
|
||||
static const uint8_t *b3_tree_node(int n, const uint8_t *labels, const uint8_t *tree, int d, uint64_t id) {
|
||||
if (d == n) return labels + 32 * (id + 1);
|
||||
return tree + 32 * (((1ull << d) - 1) + id);
|
||||
}
|
||||
/* reveal of leaf x (0-based leaf id = label id - 1): siblings at depths 1..n, sibling at depth j
|
||||
* is the node whose prefix is x_1..x_{j-1} followed by the flipped x_j. */
|
||||
static void b3_reveal(int n, const uint8_t *labels, const uint8_t *tree, uint64_t x, uint8_t *sib /* n*32 */) {
|
||||
for (int j = 1; j <= n; j++) {
|
||||
uint64_t mask = (1ull << j) - 1, pre = x & mask;
|
||||
uint64_t sid = pre ^ (1ull << (j - 1));
|
||||
memcpy(sib + 32 * (j - 1), b3_tree_node(n, labels, tree, j, sid), 32);
|
||||
}
|
||||
}
|
||||
static int b3_reveal_ok(const uint8_t chi[32], int n, const uint8_t root[32], uint64_t x, const uint8_t leaf[32], const uint8_t *sib) {
|
||||
uint8_t cur[32], nx[32]; memcpy(cur, leaf, 32);
|
||||
for (int j = n; j >= 1; j--) {
|
||||
int bit = (x >> (j - 1)) & 1;
|
||||
if (bit == 0) b3_node_hash(chi, cur, sib + 32 * (j - 1), nx); else b3_node_hash(chi, sib + 32 * (j - 1), cur, nx);
|
||||
memcpy(cur, nx, 32);
|
||||
}
|
||||
return memcmp(cur, root, 32) == 0;
|
||||
}
|
||||
|
||||
/* ---------------- challenges and proof ---------------- */
|
||||
static uint64_t b3_challenge(const uint8_t chi[32], uint64_t i, const uint8_t root[32], uint64_t N) {
|
||||
uint8_t m[72], h[32]; memcpy(m, chi, 32); b3_le64(m + 32, i); memcpy(m + 40, root, 32);
|
||||
b3_sha256(m, 72, h); return b3_rd64(h) & (N - 1);
|
||||
}
|
||||
/* proof layout (bytes): root(32) || for i in 1..k: [ label(c_i+1) 32 | sib n*32 | for each parent p ascending: label 32 | sib n*32 ]
|
||||
* the parent count is a function of the node (1 for node 2, 2 for v >= 3, 0 for node 1). */
|
||||
static size_t b3_proof_bytes_max(int n, int k) { return 32 + (size_t)k * 3 * (32 + 32 * (size_t)n); }
|
||||
static size_t b3_prove(const uint8_t chi[32], int n, int k, const uint32_t *far, const uint8_t *labels, const uint8_t *tree, const uint8_t root[32], uint8_t *out) {
|
||||
uint64_t N = 1ull << n; size_t o = 0;
|
||||
memcpy(out, root, 32); o = 32;
|
||||
for (int i = 1; i <= k; i++) {
|
||||
uint64_t c = b3_challenge(chi, (uint64_t)i, root, N), v = c + 1;
|
||||
memcpy(out + o, labels + 32 * v, 32); o += 32; b3_reveal(n, labels, tree, v - 1, out + o); o += 32 * (size_t)n;
|
||||
uint64_t ps[2]; int np = 0;
|
||||
if (v == 2) ps[np++] = 1; else if (v >= 3) { ps[np++] = far[v]; ps[np++] = v - 1; }
|
||||
for (int p = 0; p < np; p++) { memcpy(out + o, labels + 32 * ps[p], 32); o += 32; b3_reveal(n, labels, tree, ps[p] - 1, out + o); o += 32 * (size_t)n; }
|
||||
}
|
||||
return o;
|
||||
}
|
||||
static int b3_verify(const uint8_t chi[32], int n, int k, const uint32_t *far, const uint8_t *proof, size_t len) {
|
||||
uint64_t N = 1ull << n; size_t o = 32; const uint8_t *root = proof;
|
||||
for (int i = 1; i <= k; i++) {
|
||||
uint64_t c = b3_challenge(chi, (uint64_t)i, root, N), v = c + 1;
|
||||
uint64_t ps[2]; int np = 0;
|
||||
if (v == 2) ps[np++] = 1; else if (v >= 3) { ps[np++] = far[v]; ps[np++] = v - 1; }
|
||||
if (o + (1 + np) * (32 + 32 * (size_t)n) > len) return 0;
|
||||
const uint8_t *lv = proof + o; if (!b3_reveal_ok(chi, n, root, v - 1, lv, lv + 32)) return 0; o += 32 + 32 * (size_t)n;
|
||||
const uint8_t *lp[2] = {NULL, NULL};
|
||||
for (int p = 0; p < np; p++) { lp[p] = proof + o; if (!b3_reveal_ok(chi, n, root, ps[p] - 1, lp[p], lp[p] + 32)) return 0; o += 32 + 32 * (size_t)n; }
|
||||
int ok;
|
||||
if (v == 1) ok = b3_local_ok(chi, 1, far, lv, NULL, NULL);
|
||||
else if (v == 2) ok = b3_local_ok(chi, 2, far, lv, NULL, lp[0]);
|
||||
else ok = b3_local_ok(chi, v, far, lv, lp[0], lp[1]);
|
||||
if (!ok) return 0;
|
||||
}
|
||||
return o == len;
|
||||
}
|
||||
|
||||
/* instance input: chi_j = SHA-256("B3P1-chi" || le64(seed) || le64(j)) */
|
||||
static void b3_chi(uint64_t seed, uint64_t j, uint8_t chi[32]) {
|
||||
uint8_t m[8 + 16]; memcpy(m, "B3P1-chi", 8); b3_le64(m + 8, seed); b3_le64(m + 16, j); b3_sha256(m, sizeof m, chi);
|
||||
}
|
||||
|
||||
#endif
|
||||
15
tools/mhpow/b3/build.sh
Executable file
15
tools/mhpow/b3/build.sh
Executable file
|
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/env bash
|
||||
# build.sh - compile the B3 CPU reference and GPU harness on a rented pod (never on the Mac).
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")"
|
||||
export PATH=/usr/local/cuda/bin:$PATH
|
||||
gcc -O3 -march=x86-64-v3 -Wall -Wno-unused-function -o cpu_ref cpu_ref.c -lpthread
|
||||
nvcc -O3 -std=c++17 -gencode arch=compute_89,code=sm_89 -gencode arch=compute_120,code=sm_120 \
|
||||
-Xcompiler -fopenmp,-march=x86-64-v3,-Wno-unused-function -o b3_gpu b3_gpu.cu 2>&1 | grep -v 'warning #550\|uint64_t N = 1ull\|^ *\^$' || true
|
||||
gcc -O3 -march=x86-64-v3 -Wall -Wno-unused-function -Wno-misleading-indentation -o cpu_ref_b1 cpu_ref_b1.c -lpthread
|
||||
nvcc -O3 -std=c++17 -gencode arch=compute_89,code=sm_89 -gencode arch=compute_120,code=sm_120 \
|
||||
-Xcompiler -fopenmp,-march=x86-64-v3,-Wno-unused-function,-Wno-misleading-indentation -o b3_gpu_b1 b3_gpu_b1.cu 2>&1 | grep -v 'warning #550\|uint64_t N = 1ull\|^ *\^$' || true
|
||||
test -x b3_gpu && test -x cpu_ref && test -x b3_gpu_b1 && test -x cpu_ref_b1
|
||||
sha256sum b3p1_spec.h b3_fast_cpu.h cpu_ref.c b3_gpu.cu | sha256sum | cut -c1-16 > SRC_ID
|
||||
sha256sum b3p1_spec.h b1enc_spec.h cpu_ref_b1.c b3_gpu_b1.cu | sha256sum | cut -c1-16 > SRC_ID_B1
|
||||
echo "built: B3P1 src $(cat SRC_ID), B1 src $(cat SRC_ID_B1)"
|
||||
105
tools/mhpow/b3/cpu_ref.c
Normal file
105
tools/mhpow/b3/cpu_ref.c
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
* cpu_ref.c - B3 lane's sequential CPU reference for the B3P1 encoding of the
|
||||
* Blocki-Smearsoll MTP/DRSample MHPoW (see b3p1_spec.h for every byte).
|
||||
*
|
||||
* cpu_ref selftest fast paths vs the spec (n = 12), exit 1 on any byte mismatch
|
||||
* cpu_ref fixture <n> <seed> <j> <k> spec path: JSON with chi, labels digest, root, proof digest, verify
|
||||
* cpu_ref time <n> <seed> <k> <threads> fast path: sequential time per instance on this CPU (one instance
|
||||
* per thread, threads run concurrently; threads=1 is THE sequential row)
|
||||
*
|
||||
* Build: gcc -O3 -march=x86-64-v3 -o cpu_ref cpu_ref.c -lpthread
|
||||
*/
|
||||
#include "b3_fast_cpu.h"
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <time.h>
|
||||
|
||||
static double now_s(void) { struct timespec t; clock_gettime(CLOCK_MONOTONIC, &t); return t.tv_sec + t.tv_nsec * 1e-9; }
|
||||
static void hex(const uint8_t *b, int n, char *o) { for (int i = 0; i < n; i++) sprintf(o + 2 * i, "%02x", b[i]); }
|
||||
|
||||
static b3_cmp_fn pick(const char **name) {
|
||||
#if defined(__x86_64__)
|
||||
if (b3_has_shani()) { *name = "sha_ni"; return b3_cmp_shani; }
|
||||
#endif
|
||||
*name = "portable"; return b3_cmp_portable;
|
||||
}
|
||||
|
||||
static int do_fixture(int n, uint64_t seed, uint64_t j, int k) {
|
||||
uint64_t N = 1ull << n; uint8_t chi[32]; b3_chi(seed, j, chi);
|
||||
uint32_t *far = calloc(N + 1, 4); for (uint64_t v = 0; v <= N; v++) far[v] = b3_drsample_far(N, v);
|
||||
uint8_t *lab = calloc(N + 1, 32), *tree = calloc(N, 32);
|
||||
b3_label_all(chi, N, far, lab); b3_merkle(chi, n, lab, tree);
|
||||
uint8_t ld[32], fd[32], pd[32], root[32]; memcpy(root, tree, 32);
|
||||
b3_sha256_big(lab + 32, 32 * N, ld);
|
||||
b3_sha256_big((uint8_t *)far, 4 * (N + 1), fd);
|
||||
uint8_t *proof = malloc(b3_proof_bytes_max(n, k)); size_t pl = b3_prove(chi, n, k, far, lab, tree, root, proof);
|
||||
b3_sha256_big(proof, pl, pd);
|
||||
int ok = b3_verify(chi, n, k, far, proof, pl);
|
||||
char h1[65], h2[65], h3[65], h4[65], h5[65], h6[65];
|
||||
hex(chi, 32, h1); hex(ld, 32, h2); hex(root, 32, h3); hex(pd, 32, h4); hex(fd, 32, h5); hex(lab + 32 * N, 32, h6);
|
||||
printf("{\"encoding\":\"%s\",\"n\":%d,\"N\":%llu,\"seed\":%llu,\"j\":%llu,\"k\":%d,\"chi\":\"%s\",\"far_le32_sha256\":\"%s\","
|
||||
"\"labels_sha256\":\"%s\",\"label_N\":\"%s\",\"root\":\"%s\",\"proof_bytes\":%zu,\"proof_sha256\":\"%s\",\"verify\":%d}\n",
|
||||
B3P1_ENCODING_ID, n, (unsigned long long)N, (unsigned long long)seed, (unsigned long long)j, k, h1, h5, h2, h6, h3, pl, h4, ok);
|
||||
return ok ? 0 : 1;
|
||||
}
|
||||
|
||||
typedef struct { int n, k; uint64_t seed, j; const uint32_t *far; b3_cmp_fn cmp; double t_label, t_merkle, t_prove, t_verify; int ok; } job_t;
|
||||
|
||||
static void *run_one(void *arg) {
|
||||
job_t *J = arg; uint64_t N = 1ull << J->n; uint8_t chi[32]; b3_chi(J->seed, J->j, chi); uint32_t chiw[8]; b3_b2w(chi, chiw);
|
||||
uint32_t *L = malloc((N + 1) * 32), *T = malloc(N * 32);
|
||||
double t0 = now_s(); b3_fast_label_all(J->cmp, chiw, N, J->far, L);
|
||||
double t1 = now_s(); b3_fast_merkle(J->cmp, chiw, J->n, L, T);
|
||||
double t2 = now_s();
|
||||
/* proof creation on the spec's byte path from the fast state (bytes converted per opened node only) */
|
||||
uint8_t root[32]; b3_w2b(T, root);
|
||||
size_t cap = b3_proof_bytes_max(J->n, J->k); uint8_t *proof = malloc(cap); size_t o = 32; memcpy(proof, root, 32);
|
||||
for (int i = 1; i <= J->k; i++) {
|
||||
uint64_t c = b3_challenge(chi, (uint64_t)i, root, N), v = c + 1; uint64_t ps[3]; int np = 0; ps[np++] = v;
|
||||
if (v == 2) ps[np++] = 1; else if (v >= 3) { ps[np++] = J->far[v]; ps[np++] = v - 1; }
|
||||
for (int p = 0; p < np; p++) {
|
||||
uint64_t x = ps[p] - 1; b3_w2b(L + 8 * ps[p], proof + o); o += 32;
|
||||
for (int jj = 1; jj <= J->n; jj++) {
|
||||
uint64_t sid = (x & ((1ull << jj) - 1)) ^ (1ull << (jj - 1));
|
||||
const uint32_t *w = (jj == J->n) ? L + 8 * (sid + 1) : T + 8 * (((1ull << jj) - 1) + sid);
|
||||
b3_w2b(w, proof + o); o += 32;
|
||||
}
|
||||
}
|
||||
}
|
||||
double t3 = now_s(); J->ok = b3_verify(chi, J->n, J->k, J->far, proof, o); double t4 = now_s();
|
||||
J->t_label = t1 - t0; J->t_merkle = t2 - t1; J->t_prove = t3 - t2; J->t_verify = t4 - t3;
|
||||
free(L); free(T); free(proof); return NULL;
|
||||
}
|
||||
|
||||
static int do_time(int n, uint64_t seed, int k, int threads) {
|
||||
const char *nm; b3_cmp_fn cmp = pick(&nm);
|
||||
uint64_t N = 1ull << n; double tg0 = now_s();
|
||||
uint32_t *far = malloc((N + 1) * 4); for (uint64_t v = 0; v <= N; v++) far[v] = b3_drsample_far(N, v);
|
||||
double tg = now_s() - tg0;
|
||||
job_t *J = calloc(threads, sizeof *J); pthread_t *th = calloc(threads, sizeof *th);
|
||||
double w0 = now_s();
|
||||
for (int t = 0; t < threads; t++) { J[t] = (job_t){ .n = n, .k = k, .seed = seed, .j = (uint64_t)t, .far = far, .cmp = cmp }; pthread_create(&th[t], NULL, run_one, &J[t]); }
|
||||
for (int t = 0; t < threads; t++) pthread_join(th[t], NULL);
|
||||
double wall = now_s() - w0; int okc = 0; double sl = 0, sm = 0, sp = 0, sv = 0;
|
||||
for (int t = 0; t < threads; t++) { okc += J[t].ok; sl += J[t].t_label; sm += J[t].t_merkle; sp += J[t].t_prove; sv += J[t].t_verify; }
|
||||
printf("{\"mode\":\"cpu_time\",\"sha\":\"%s\",\"n\":%d,\"N\":%llu,\"k\":%d,\"threads\":%d,\"graph_s_single_thread\":%.4f,"
|
||||
"\"label_s_mean\":%.4f,\"merkle_s_mean\":%.4f,\"prove_s_mean\":%.6f,\"verify_s_mean\":%.6f,\"wall_s\":%.4f,"
|
||||
"\"labels_per_s_per_instance\":%.1f,\"labels_per_s_all\":%.1f,\"accepted\":%d}\n",
|
||||
nm, n, (unsigned long long)N, k, threads, tg, sl / threads, sm / threads, sp / threads, sv / threads, wall,
|
||||
N / (sl / threads), (double)N * threads / wall, okc);
|
||||
return okc == threads ? 0 : 1;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc >= 2 && !strcmp(argv[1], "selftest")) {
|
||||
const char *nm; b3_cmp_fn cmp = pick(&nm);
|
||||
int b1 = b3_fast_selftest(b3_cmp_portable, 12), b2 = b3_fast_selftest(cmp, 12);
|
||||
uint8_t h[32]; char hx[65]; b3_sha256((const uint8_t *)"abc", 3, h); hex(h, 32, hx);
|
||||
int kat = strcmp(hx, "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad") != 0;
|
||||
printf("{\"mode\":\"selftest\",\"sha\":\"%s\",\"sha256_abc_kat_fail\":%d,\"portable_words_mismatch\":%d,\"fast_mismatch\":%d}\n", nm, kat, b1, b2);
|
||||
return (kat || b1 || b2) ? 1 : 0;
|
||||
}
|
||||
if (argc >= 6 && !strcmp(argv[1], "fixture")) return do_fixture(atoi(argv[2]), strtoull(argv[3], 0, 10), strtoull(argv[4], 0, 10), atoi(argv[5]));
|
||||
if (argc >= 6 && !strcmp(argv[1], "time")) return do_time(atoi(argv[2]), strtoull(argv[3], 0, 10), atoi(argv[4]), atoi(argv[5]));
|
||||
fprintf(stderr, "usage: cpu_ref selftest | fixture n seed j k | time n seed k threads\n"); return 2;
|
||||
}
|
||||
77
tools/mhpow/b3/cpu_ref_b1.c
Normal file
77
tools/mhpow/b3/cpu_ref_b1.c
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
* cpu_ref_b1.c - B3's C port of the B1 reference encoding (b1enc_spec.h): the known-answer check against B1's
|
||||
* fixtures, and the sequential CPU timing on the pod's own CPU.
|
||||
* cpu_ref_b1 kat <b1-out-dir> compare n = 4, 8, 12, 16, 20 with B1's kat-nNN.json (and .proof.bin); exit 1 on any difference
|
||||
* cpu_ref_b1 time <n> <k> <threads> one instance per thread (threads = 1 is the sequential row)
|
||||
* Build: gcc -O3 -march=x86-64-v3 -o cpu_ref_b1 cpu_ref_b1.c -lpthread
|
||||
*/
|
||||
#include "b1enc_spec.h"
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <time.h>
|
||||
|
||||
static double now_s(void) { struct timespec t; clock_gettime(CLOCK_MONOTONIC, &t); return t.tv_sec + t.tv_nsec * 1e-9; }
|
||||
static void hex(const uint8_t *b, int n, char *o) { for (int i = 0; i < n; i++) sprintf(o + 2 * i, "%02x", b[i]); o[2 * n] = 0; }
|
||||
static char *slurp(const char *p, size_t *len) { FILE *f = fopen(p, "rb"); if (!f) return NULL; fseek(f, 0, SEEK_END); long L = ftell(f); fseek(f, 0, SEEK_SET);
|
||||
char *b = malloc(L + 1); if (fread(b, 1, L, f) != (size_t)L) { fclose(f); free(b); return NULL; } b[L] = 0; fclose(f); if (len) *len = L; return b; }
|
||||
static int jget(const char *js, const char *key, char *out, size_t cap) { /* "key": "value" or "key": number */
|
||||
char pat[128]; snprintf(pat, sizeof pat, "\"%s\":", key); const char *p = strstr(js, pat); if (!p) return 0; p += strlen(pat);
|
||||
while (*p == ' ') p++; size_t i = 0; if (*p == '"') { p++; while (*p && *p != '"' && i + 1 < cap) out[i++] = *p++; } else { while (*p && *p != ',' && *p != '\n' && *p != '}' && i + 1 < cap) out[i++] = *p++; }
|
||||
out[i] = 0; return 1; }
|
||||
|
||||
static int kat(const char *dir) {
|
||||
int ns[5] = {4, 8, 12, 16, 20}, ks[5] = {8, 64, 64, 64, 64}, bad = 0;
|
||||
for (int t = 0; t < 5; t++) {
|
||||
int n = ns[t], k = ks[t]; uint64_t N = 1ULL << n; char path[512]; snprintf(path, sizeof path, "%s/kat-n%02d.json", dir, n);
|
||||
char *js = slurp(path, NULL); if (!js) { printf("{\"kat\":%d,\"verdict\":\"MISSING %s\"}\n", n, path); bad++; continue; }
|
||||
uint8_t chi[32]; b1_kat_chi(n, chi);
|
||||
uint32_t *far = malloc((N + 1) * 4); for (uint64_t v = 0; v <= N; v++) far[v] = b1_far(v);
|
||||
uint8_t *gb = malloc(16 * N); size_t gl = 0;
|
||||
for (uint64_t v = 1; v <= N; v++) { uint64_t ps[2]; int np = b1_parents(v, far, ps); for (int q = 0; q < np; q++) { b1_u64(gb + gl, ps[q]); gl += 8; } }
|
||||
uint8_t *lab = malloc((N + 1) * 32), *tree = malloc(N * 32); b1_label_all(chi, N, far, lab); b1_merkle(chi, n, lab, tree);
|
||||
uint8_t *pf = malloc(b1_proof_max(n, k)); size_t pl = b1_prove(chi, n, k, far, lab, tree, pf);
|
||||
uint8_t d1[32], d2[32], d3[32]; b3_sha256(gb, gl, d1); b3_sha256(lab + 32, 32 * N, d2); b3_sha256(pf, pl, d3);
|
||||
char h0[65], h1[65], h2[65], h3[65], h4[65], e0[80], e1[80], e2[80], e3[80], e4[80], epl[32];
|
||||
hex(chi, 32, h0); hex(d1, 32, h1); hex(d2, 32, h2); hex(tree, 32, h3); hex(d3, 32, h4);
|
||||
jget(js, "chi", e0, 80); jget(js, "graph_parents_u64le_sha256", e1, 80); jget(js, "labels_concat_sha256", e2, 80); jget(js, "tau", e3, 80); jget(js, "proof_sha256", e4, 80); jget(js, "proof_bytes", epl, 32);
|
||||
int ok = !strcmp(h0, e0) && !strcmp(h1, e1) && !strcmp(h2, e2) && !strcmp(h3, e3) && !strcmp(h4, e4) && (size_t)atol(epl) == pl;
|
||||
int vok = b1_verify(chi, n, k, far, pf, pl);
|
||||
snprintf(path, sizeof path, "%s/kat-n%02d.proof.bin", dir, n); size_t bl = 0; char *pb = slurp(path, &bl);
|
||||
int bin_ok = pb && bl == pl && !memcmp(pb, pf, pl);
|
||||
printf("{\"kat\":%d,\"chi\":%d,\"graph\":%d,\"labels\":%d,\"tau\":%d,\"proof_sha\":%d,\"proof_bin\":%d,\"verify\":%d,\"verdict\":\"%s\"}\n", n,
|
||||
!strcmp(h0, e0), !strcmp(h1, e1), !strcmp(h2, e2), !strcmp(h3, e3), !strcmp(h4, e4), bin_ok, vok, (ok && vok && bin_ok) ? "IDENTICAL" : "MISMATCH");
|
||||
bad += !(ok && vok && bin_ok); free(js); free(far); free(gb); free(lab); free(tree); free(pf); free(pb);
|
||||
}
|
||||
return bad ? 1 : 0;
|
||||
}
|
||||
|
||||
typedef struct { int n, k; uint64_t j; const uint32_t *far; double tl, tm, tp, tv; int ok; } job_t;
|
||||
static void *one(void *a) {
|
||||
job_t *J = a; uint64_t N = 1ULL << J->n; uint8_t chi[32]; b1_batch_chi(J->n, J->j, chi);
|
||||
uint8_t *lab = malloc((N + 1) * 32), *tree = malloc(N * 32), *pf = malloc(b1_proof_max(J->n, J->k));
|
||||
double t0 = now_s(); b1_label_all(chi, N, J->far, lab); double t1 = now_s(); b1_merkle(chi, J->n, lab, tree); double t2 = now_s();
|
||||
size_t pl = b1_prove(chi, J->n, J->k, J->far, lab, tree, pf); double t3 = now_s(); J->ok = b1_verify(chi, J->n, J->k, J->far, pf, pl); double t4 = now_s();
|
||||
J->tl = t1 - t0; J->tm = t2 - t1; J->tp = t3 - t2; J->tv = t4 - t3; free(lab); free(tree); free(pf); return NULL;
|
||||
}
|
||||
static int timing(int n, int k, int threads) {
|
||||
uint64_t N = 1ULL << n; double g0 = now_s(); uint32_t *far = malloc((N + 1) * 4); for (uint64_t v = 0; v <= N; v++) far[v] = b1_far(v); double tg = now_s() - g0;
|
||||
job_t *J = calloc(threads, sizeof *J); pthread_t *th = calloc(threads, sizeof *th); double w0 = now_s();
|
||||
for (int t = 0; t < threads; t++) { J[t] = (job_t){.n = n, .k = k, .j = (uint64_t)t, .far = far}; pthread_create(&th[t], NULL, one, &J[t]); }
|
||||
for (int t = 0; t < threads; t++) pthread_join(th[t], NULL);
|
||||
double wall = now_s() - w0, sl = 0, sm = 0, sp = 0, sv = 0; int okc = 0;
|
||||
for (int t = 0; t < threads; t++) { sl += J[t].tl; sm += J[t].tm; sp += J[t].tp; sv += J[t].tv; okc += J[t].ok; }
|
||||
printf("{\"mode\":\"cpu_time\",\"encoding\":\"B1\",\"impl\":\"C port, portable BLAKE2b\",\"n\":%d,\"N\":%llu,\"k\":%d,\"threads\":%d,\"graph_s_single_thread\":%.3f,"
|
||||
"\"label_s_mean\":%.4f,\"merkle_s_mean\":%.4f,\"prove_s_mean\":%.6f,\"verify_s_mean\":%.6f,\"wall_s\":%.3f,\"labels_per_s_per_instance\":%.1f,"
|
||||
"\"labels_per_s_all\":%.1f,\"accepted\":%d}\n", n, (unsigned long long)N, k, threads, tg, sl / threads, sm / threads, sp / threads, sv / threads, wall,
|
||||
N / (sl / threads), (double)N * threads / wall, okc);
|
||||
return okc == threads ? 0 : 1;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
b1_init();
|
||||
uint8_t h[32]; char hx[65]; b2_256((const uint8_t *)"abc", 3, h); hex(h, 32, hx);
|
||||
if (strcmp(hx, "bddd813c634239723171ef3fee98579b94964e3bb1cb3e427262c8c068d52319")) { printf("{\"blake2b_256_abc_kat\":\"FAIL\",\"got\":\"%s\"}\n", hx); return 1; }
|
||||
if (argc >= 3 && !strcmp(argv[1], "kat")) return kat(argv[2]);
|
||||
if (argc >= 5 && !strcmp(argv[1], "time")) return timing(atoi(argv[2]), atoi(argv[3]), atoi(argv[4]));
|
||||
fprintf(stderr, "usage: cpu_ref_b1 kat <dir> | time n k threads\n"); return 2;
|
||||
}
|
||||
113
tools/mhpow/b3/make_readme.py
Normal file
113
tools/mhpow/b3/make_readme.py
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
#!/usr/bin/env python3
|
||||
"""make_readme.py - fills docs/analysis/mhpow/b3/README.src.md into README.md from the raw rows (every figure code-generated).
|
||||
|
||||
cd docs/analysis/mhpow/b3 && python3 ../../../../tools/mhpow/b3/make_readme.py
|
||||
Reads rows/<card>-b1 (B1 encoding) and rows/<card>-r1 (B3P1 control) through parse_rows.py, rows/*/known-failed*.log.
|
||||
"""
|
||||
import io, json, math, os, sys, contextlib, glob
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
sys.path.insert(0, HERE)
|
||||
import parse_rows # noqa: E402
|
||||
|
||||
ROWS = 'rows'
|
||||
B1 = [d for d in ('rtx5090-b1', 'rtx4090-b1') if os.path.isdir(os.path.join(ROWS, d))]
|
||||
P1 = [d for d in ('rtx5090-r1', 'rtx4090-r1') if os.path.isdir(os.path.join(ROWS, d))]
|
||||
|
||||
def tables(dirs):
|
||||
buf = io.StringIO()
|
||||
argv = sys.argv
|
||||
sys.argv = ['parse_rows.py'] + [os.path.join(ROWS, d) for d in dirs]
|
||||
with contextlib.redirect_stdout(buf):
|
||||
parse_rows.main()
|
||||
sys.argv = argv
|
||||
return buf.getvalue().strip()
|
||||
|
||||
def cards(dirs):
|
||||
return [parse_rows.card(os.path.join(ROWS, d)) for d in dirs]
|
||||
|
||||
def short(gpu):
|
||||
return gpu.replace('NVIDIA GeForce ', '')
|
||||
|
||||
def meaning(cs):
|
||||
out = []
|
||||
for c in cs:
|
||||
g = short(c['gpu'])
|
||||
seq = {x['n']: x for x in c['cpu'] if x['threads'] == 1}
|
||||
mains = {r['n']: r for r in c['rows'] if r['tag'].startswith('main')}
|
||||
for r in c['rows']:
|
||||
t = r['tag']; cpu = seq.get(r['n']); cr = cpu['labels_per_s_per_instance'] if cpu else None
|
||||
eq = r['labels_per_s'] / cr if cr else None
|
||||
nj = r['nJ_per_label']
|
||||
if t.startswith('main'):
|
||||
if eq is None:
|
||||
s = 'no CPU row at this size'
|
||||
elif eq < 16:
|
||||
s = f'a 16-core desktop CPU out-labels the whole card (the card equals {eq:.1f} CPU threads): principally CPU-friendly, the plan\'s rejection case'
|
||||
elif eq < 64:
|
||||
s = f'the card equals {eq:.0f} CPU threads, so a 64-core server CPU out-labels it: no GPU advantage, principally CPU-friendly'
|
||||
else:
|
||||
s = f'the card equals {eq:.0f} CPU threads'
|
||||
out.append(f"- {g}, {t}: {r['B']} instances of {r['inst_MiB']:.0f} MiB label {r['labels_per_s']/1e6:,.1f} M per second at {r['mean_board_W']:.0f} W board"
|
||||
f"{'' if nj is None else f' ({nj:,.0f} nJ per label)'}; one instance takes {r['gpu_instance_latency_s']:.2f} s on the GPU against {r['cpu_seq_instance_s']:.2f} s on one CPU thread; {s}.")
|
||||
elif t.startswith('ladder'):
|
||||
m = mains.get(r['n'])
|
||||
out.append(f"- {g}, {t}: {r['B']} instance(s) in flight label {r['labels_per_s']/1e6:,.2f} M per second at {r['mean_board_W']:.0f} W, about {r['B']} times one thread's {1e3/r['ns_per_label_per_inst']:.2f} M; throughput is linear in instances and the board draws nearly the same power at 1 as at {m['B'] if m else 'max'}, so the joules per label fall only by filling memory with instances (the trap, measured).")
|
||||
elif t.startswith('diag'):
|
||||
out.append(f"- {g}, {t} (not a B3 size): {r['inst_MiB']:.2f} MiB per instance lets {r['B']} instances fill the card ({r['mean_board_W']:.0f} W, {r['labels_per_s']/1e9:,.2f} G labels per second, {'-' if nj is None else f'{nj:,.0f}'} nJ per label); an instance this small ({2*r['inst_MiB']:.2f} MiB with its tree) fits in a specialist's on-die SRAM, which is the other side of the trap.")
|
||||
elif t.startswith('abl'):
|
||||
m = mains.get(r['n'])
|
||||
d = (r['labels_per_s'] / m['labels_per_s'] - 1) * 100 if m else 0
|
||||
what = 'instance-major (AOS) layout' if 'aos' in t else '32-thread blocks (one warp per block, spread over more SMs)'
|
||||
out.append(f"- {g}, {t}: the {what} changes the card's labels per second by {d:+.1f} percent against the SOA main row; layout is not the lever, the dependency chain is.")
|
||||
return '\n'.join(out)
|
||||
|
||||
def oracle(cs):
|
||||
lines = ['| card | encoding | rows | rows IDENTICAL | instances byte-checked | GPU proofs accepted by the verifier | instance 0 = B1 fixture at n = 20 | C port = B1 KATs (n = 4..20) | known-failed test |', '|---|---|---|---|---|---|---|---|---|']
|
||||
for d, c in zip(B1, cs):
|
||||
rs = c['rows']; ident = sum(r['oracle'] == 'IDENTICAL' for r in rs)
|
||||
acc = sum(r['accepted'] for r in rs); tot = sum(r['B'] for r in rs); chk = sum(r['checked'] for r in rs)
|
||||
k20 = [r['b1_kat_instance0'] for r in rs if r['n'] == 20]
|
||||
meta = open(os.path.join(ROWS, d, 'meta.txt')).read()
|
||||
kats = meta.count('"verdict":"IDENTICAL"')
|
||||
kf = ''
|
||||
for p in glob.glob(os.path.join(ROWS, d, 'known-failed*.log')):
|
||||
t = open(p).read()
|
||||
kf = 'PASS' if 'RESULT test_known_failed_b1 PASS' in t else 'FAIL'
|
||||
lines.append(f"| {short(c['gpu'])} | B1 | {len(rs)} | {ident} | {chk} | {acc} of {tot} | {'yes' if k20 and all(x == 1 for x in k20) else 'no'} ({len(k20)} rows) | {kats} of 5 | {kf or 'not logged'} |")
|
||||
return '\n'.join(lines)
|
||||
|
||||
def tiers(cs):
|
||||
# derived from the measured per-instance B1 rate on the 4090 (the slower card's figure is used for every tier)
|
||||
c = next((x for x in cs if '4090' in x['gpu']), cs[0])
|
||||
ns = sum(r['ns_per_label_per_inst'] for r in c['rows'] if r['tag'].startswith('main')) / max(1, sum(1 for r in c['rows'] if r['tag'].startswith('main')))
|
||||
cpu = {x['n']: x['labels_per_s_per_instance'] for x in c['cpu'] if x['threads'] == 1}
|
||||
lines = ['Derived, not measured, except the 24 and 32 GB rows above: instances = (card memory - 1.5 GB reserve) / (labels + tree + proof slot), labels per second = instances / one thread\'s measured time per label (' + f'{ns:,.0f}' + ' ns, the 4090 B1 main rows); "CPU threads" divides by the 4090 pod\'s one-thread C-port rate at the same size.', '',
|
||||
'| card memory | 32 MiB: instances, M labels/s, = CPU threads | 128 MiB | 512 MiB |', '|---|---|---|---|']
|
||||
for gb in (8, 12, 16, 24, 32):
|
||||
cells = []
|
||||
for n in (20, 22, 24):
|
||||
N = 1 << n; per = (2 * N + 1) * 32 + 64 * 3 * (n + 1) * 32 + 64 + 32
|
||||
inst = max(0, int((gb - 1.5) * (1 << 30) // per))
|
||||
lps = inst / (ns * 1e-9)
|
||||
cr = cpu.get(n)
|
||||
cells.append(f"{inst}, {lps/1e6:,.1f} M, {lps/cr:,.1f}" if cr else f"{inst}, {lps/1e6:,.1f} M, -")
|
||||
lines.append(f"| {gb} GB | " + ' | '.join(cells) + ' |')
|
||||
eqs = {}
|
||||
for gb in (8, 24, 32):
|
||||
for n in (20, 24):
|
||||
N = 1 << n; per = (2 * N + 1) * 32 + 64 * 3 * (n + 1) * 32 + 64 + 32
|
||||
inst = max(0, int((gb - 1.5) * (1 << 30) // per)); eqs[(gb, n)] = inst / (ns * 1e-9) / cpu[n] if cpu.get(n) else float('nan')
|
||||
lines += ['', f'What it means per tier: a home miner with one 8 GB card at 32 MiB per instance labels about as fast as {eqs[(8,20)]:.0f} CPU threads, at 512 MiB as fast as {eqs[(8,24)]:.1f} of one CPU thread; one 24 or 32 GB card equals {eqs[(24,20)]:.0f} to {eqs[(32,20)]:.0f} CPU threads at 32 MiB and {eqs[(24,24)]:.1f} to {eqs[(32,24)]:.1f} at 512 MiB (one-thread kernel; the measured rows above add the board\'s own figures); a rig scales linearly with cards and so does a server CPU with cores. A pool user sees the same per-card rate. Windows and Linux run the same CUDA kernel (measured on Linux only); AMD, Intel and Apple GPUs have no kernel here (the per-thread chain argument applies to them unchanged: one instance per lane, instances capped by memory). What this lane does about it: the B3 sizes are reported as failing the plan\'s GPU-competitiveness gate; the only GPU-favourable regime measured is instances under 2 MiB, which hands the specialist an SRAM-resident design (rows diag-n12 to n16), so B3 asks B1, B2 and B4 for a construction whose per-label work is memory-bound rather than hash-bound before any further GPU tuning.']
|
||||
return '\n'.join(lines)
|
||||
|
||||
def main():
|
||||
src = open('README.src.md').read()
|
||||
b1c = cards(B1)
|
||||
out = src.replace('<<B1_TABLES>>', tables(B1)).replace('<<B3P1_TABLES>>', tables(P1) if P1 else '(not run)')
|
||||
out = out.replace('<<MEANING>>', meaning(b1c)).replace('<<ORACLE>>', oracle(b1c)).replace('<<TIERS>>', tiers(b1c))
|
||||
open('README.md', 'w').write(out)
|
||||
print('README.md written,', len(out), 'bytes')
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
89
tools/mhpow/b3/parse_rows.py
Normal file
89
tools/mhpow/b3/parse_rows.py
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
#!/usr/bin/env python3
|
||||
"""parse_rows.py <out-dir> [<out-dir> ...] - the B3 rows tables from the pods' raw files.
|
||||
|
||||
Reads, per card directory: rows.jsonl (b3_gpu lines), power.csv (nvidia-smi 1 Hz board power),
|
||||
idle.json (the 30 s idle window), cpu.jsonl (cpu_ref on the pod's own CPU), meta.txt.
|
||||
Board power is integrated sample-and-hold over each row's labelling window; idle is NOT subtracted.
|
||||
Prints markdown tables (the README's figures are this script's output, verbatim) and writes
|
||||
summary.json beside the first directory's parent.
|
||||
"""
|
||||
import json, sys, os, datetime
|
||||
|
||||
def load_power(path):
|
||||
s = []
|
||||
for line in open(path):
|
||||
p = [x.strip() for x in line.split(',')]
|
||||
if len(p) < 8:
|
||||
continue
|
||||
try:
|
||||
t = datetime.datetime.strptime(p[0], '%Y/%m/%d %H:%M:%S.%f').replace(tzinfo=datetime.timezone.utc).timestamp() * 1000
|
||||
s.append((t, float(p[1]), float(p[2]), float(p[4]), float(p[6])))
|
||||
except ValueError:
|
||||
pass
|
||||
return s
|
||||
|
||||
def integrate(samples, t0, t1):
|
||||
"""sample-and-hold energy (J) and sample count over [t0, t1] ms"""
|
||||
e, n, util, clk = 0.0, 0, [], []
|
||||
for i, (t, w, u, c, m) in enumerate(samples):
|
||||
tn = samples[i + 1][0] if i + 1 < len(samples) else t + 1000
|
||||
a, b = max(t, t0), min(tn, t1)
|
||||
if b > a:
|
||||
e += w * (b - a) / 1000.0
|
||||
if t0 <= t <= t1:
|
||||
n += 1; util.append(u); clk.append(c)
|
||||
return e, n, (sum(util) / len(util) if util else 0), (sum(clk) / len(clk) if clk else 0)
|
||||
|
||||
def card(d):
|
||||
rows = [json.loads(l) for l in open(os.path.join(d, 'rows.jsonl')) if l.startswith('{')]
|
||||
cpu = [json.loads(l) for l in open(os.path.join(d, 'cpu.jsonl'))] if os.path.exists(os.path.join(d, 'cpu.jsonl')) else []
|
||||
pw = load_power(os.path.join(d, 'power.csv'))
|
||||
idle = json.load(open(os.path.join(d, 'idle.json')))['idle_window_unix_ms']
|
||||
ie, inn, _, _ = integrate(pw, idle[0], idle[1])
|
||||
meta = open(os.path.join(d, 'meta.txt')).read()
|
||||
cpu_model = next((l.split(':', 1)[1].strip() for l in meta.splitlines() if l.startswith('model name')), '?')
|
||||
cgroup = next((l for l in meta.splitlines() if 'cgroup_cpus' in l), '')
|
||||
seq = {c['n']: c for c in cpu if c['threads'] == 1}
|
||||
allc = {c['n']: c for c in cpu if c['threads'] > 1}
|
||||
out = []
|
||||
for r in rows:
|
||||
t0, t1 = r['label_window_unix_ms']
|
||||
e, ns, util, clk = integrate(pw, t0, t1)
|
||||
labels = r['N'] * r['B'] * r['passes']
|
||||
win = (t1 - t0) / 1000.0
|
||||
c1 = seq.get(r['n'])
|
||||
o = dict(r)
|
||||
o.update({
|
||||
'window_s': win, 'power_samples': ns, 'mean_board_W': e / win if win > 0 else 0, 'gpu_util_pct': util, 'sm_clock_MHz': clk,
|
||||
'nJ_per_label': (e / labels * 1e9) if ns >= 5 else None,
|
||||
'J_per_instance_labelling': (e / (r['B'] * r['passes'])) if ns >= 5 else None,
|
||||
'cpu_seq_labels_per_s': c1['labels_per_s_per_instance'] if c1 else None,
|
||||
'cpu_seq_instance_s': (c1['label_s_mean'] + c1['merkle_s_mean'] + c1['prove_s_mean']) if c1 else None,
|
||||
'gpu_instance_latency_s': r['label_s_per_pass'] + r['merkle_s'] + r['prove_s'],
|
||||
'cpu_core_equiv': (r['labels_per_s'] / c1['labels_per_s_per_instance']) if c1 else None,
|
||||
})
|
||||
out.append(o)
|
||||
return {'dir': d, 'gpu': rows[0]['gpu'] if rows else '?', 'cpu_model': cpu_model, 'cgroup': cgroup,
|
||||
'idle_W': ie / ((idle[1] - idle[0]) / 1000.0), 'idle_samples': inn, 'rows': out, 'cpu': cpu, 'cpu_all': allc}
|
||||
|
||||
def f(x, p=1):
|
||||
return '-' if x is None else (f'{x:,.{p}f}')
|
||||
|
||||
def main():
|
||||
cards = [card(d) for d in sys.argv[1:]]
|
||||
for c in cards:
|
||||
print(f"\n#### {c['gpu']} (rented pod, stock clocks; host CPU {c['cpu_model']}, {c['cgroup'].strip()}); idle board power {c['idle_W']:.1f} W over {c['idle_samples']} samples (not subtracted)\n")
|
||||
print('| row | MiB per instance | instances in flight | kernel, layout | label pass per batch (s) | labels/s, card | ns per label, per instance | board W (mean) | nJ per label | J per instance (labels) | commit per batch (s) | proof per batch (s) | GPU instance latency (s) | CPU sequential instance (s) | card = N one-thread CPU instances | oracle | accepted proofs |')
|
||||
print('|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|')
|
||||
for r in c['rows']:
|
||||
print(f"| {r['tag']} | {r['inst_MiB']:.1f} | {r['B']} of {r['Bmax']} | {r['kernel']}, {r['layout']} | {r['label_s_per_pass']:.3f} | {f(r['labels_per_s']/1e6,1)} M | {r['ns_per_label_per_inst']:,.0f} | {r['mean_board_W']:.0f} | {f(r['nJ_per_label'],1)} | {f(r['J_per_instance_labelling'],2)} | {r['merkle_s']:.4f} | {r['prove_s']:.4f} | {r['gpu_instance_latency_s']:.2f} | {f(r['cpu_seq_instance_s'],2)} | {f(r['cpu_core_equiv'],1)} | {r['oracle']} ({r['checked']} checked) | {r['accepted']} of {r['B']} |")
|
||||
enc = c['rows'][0].get('encoding', '?') if c['rows'] else '?'
|
||||
print('\nCPU reference on the same pod (' + ('cpu_ref_b1: the C port of B1, portable scalar BLAKE2b, byte-identical to B1\'s fixtures; a SIMD BLAKE2b would be faster, so this CPU figure is a floor for the CPU' if enc == 'B1' else 'cpu_ref: sha_ni SHA-256, byte-identical to the B3P1 spec by selftest') + '):\n')
|
||||
print('| n | MiB | threads | label s per instance | Merkle s | proof s | verify s | labels/s per instance | instance labels per wall second, whole prover, all threads | accepted |')
|
||||
print('|---|---|---|---|---|---|---|---|---|---|')
|
||||
for x in c['cpu']:
|
||||
print(f"| {x['n']} | {x['N']*32/1048576:.0f} | {x['threads']} | {x['label_s_mean']:.3f} | {x['merkle_s_mean']:.3f} | {x['prove_s_mean']:.5f} | {x['verify_s_mean']:.5f} | {x['labels_per_s_per_instance']/1e6:.2f} M | {x['labels_per_s_all']/1e6:.1f} M | {x['accepted']} of {x['threads']} |")
|
||||
json.dump(cards, open(os.path.join(os.path.dirname(os.path.abspath(sys.argv[1])), 'summary-' + os.path.basename(os.path.abspath(sys.argv[1])) + '.json'), 'w'), indent=1, default=str)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
44
tools/mhpow/b3/run_rows.sh
Executable file
44
tools/mhpow/b3/run_rows.sh
Executable file
|
|
@ -0,0 +1,44 @@
|
|||
#!/usr/bin/env bash
|
||||
# run_rows.sh <card-label> - the B3 rows on one rented pod, stock clocks. Writes /root/b3/out/<label>/.
|
||||
# Power: nvidia-smi board power at 1 Hz for the whole run (idle NOT subtracted), integrated per labelling window
|
||||
# by parse_rows.py. Each row's correctness gate is the in-harness spec oracle (byte identity + every proof verified).
|
||||
set -uo pipefail
|
||||
LABEL=${1:?label}; SRC=$(cd "$(dirname "$0")" && pwd); OUT=/root/b3/out/$LABEL; mkdir -p "$OUT" /root/b3/pids
|
||||
CPUQ=$(awk '{printf "%d", $1/$2}' /sys/fs/cgroup/cpu.max 2>/dev/null || nproc)
|
||||
export OMP_NUM_THREADS=$CPUQ
|
||||
{
|
||||
echo "label=$LABEL"; echo "src_id=$(cat "$SRC/SRC_ID")"; date -u +%FT%TZ
|
||||
grep -m1 'model name' /proc/cpuinfo; echo "nproc=$(nproc) cgroup_cpus=$CPUQ"; cat /proc/loadavg
|
||||
nvidia-smi --query-gpu=name,driver_version,vbios_version,power.limit,power.default_limit,clocks.max.sm,clocks.max.mem,memory.total,pcie.link.gen.current,pcie.link.width.current --format=csv
|
||||
/usr/local/cuda/bin/nvcc --version | tail -1
|
||||
} > "$OUT/meta.txt" 2>&1
|
||||
nvidia-smi --query-gpu=timestamp,power.draw,utilization.gpu,utilization.memory,clocks.sm,clocks.mem,memory.used,temperature.gpu --format=csv,noheader,nounits -lms 1000 > "$OUT/power.csv" &
|
||||
echo "$! $(date -u +%FT%TZ) b3-smi-$LABEL" > /root/b3/pids/smi.pid
|
||||
sleep 30 # idle baseline in the power log (reported, never subtracted)
|
||||
echo "{\"idle_window_unix_ms\":[$(( ($(date +%s) - 30) * 1000 )),$(( $(date +%s) * 1000 ))]}" > "$OUT/idle.json"
|
||||
R="$OUT/rows.jsonl"; : > /dev/null
|
||||
row() { "$SRC/b3_gpu" "$@" >> "$R" 2>> "$OUT/stderr.log"; echo "row rc=$? $*" >> "$OUT/progress.log"; }
|
||||
# main rows: the three B3 sizes, card filled, both kernels, SOA
|
||||
for n in 20 22 24; do
|
||||
row --n $n --kernel 1 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n$n-k1
|
||||
row --n $n --kernel 2 --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n$n-k2
|
||||
done
|
||||
# layout ablation at 32 MiB
|
||||
row --n 20 --kernel 1 --layout aos --min-label-s 20 --check 2 --k 64 --tag abl-n20-k1-aos
|
||||
# the under-utilisation ladder at 32 MiB per instance: instances in flight 1, 32, 128 (and max above)
|
||||
for b in 1 32 128; do
|
||||
row --n 20 --B $b --kernel 2 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B$b-k2
|
||||
row --n 20 --B $b --kernel 1 --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B$b-k1
|
||||
done
|
||||
# diagnostic sizes (NOT B3 sizes): where does the card fill? 512 KiB, 2 MiB, 8 MiB per instance
|
||||
for n in 14 16 18; do
|
||||
row --n $n --kernel 1 --layout soa --min-label-s 20 --check 2 --k 64 --tag diag-n$n-k1
|
||||
done
|
||||
# the CPU reference on this pod's own CPU: the sequential row (1 thread) per size, and the all-quota diagnostic
|
||||
for n in 20 22 24; do
|
||||
"$SRC/cpu_ref" time $n 1 64 1 >> "$OUT/cpu.jsonl"
|
||||
done
|
||||
for n in 20 22; do "$SRC/cpu_ref" time $n 1 64 "$CPUQ" >> "$OUT/cpu.jsonl"; done
|
||||
cat /proc/loadavg >> "$OUT/meta.txt"
|
||||
kill "$(cut -d' ' -f1 /root/b3/pids/smi.pid)"; rm -f /root/b3/pids/smi.pid
|
||||
echo "DONE $(date -u +%FT%TZ)" >> "$OUT/progress.log"
|
||||
32
tools/mhpow/b3/run_rows_b1.sh
Executable file
32
tools/mhpow/b3/run_rows_b1.sh
Executable file
|
|
@ -0,0 +1,32 @@
|
|||
#!/usr/bin/env bash
|
||||
# run_rows_b1.sh <card-label> <b1-kat-dir> - the B3 rows for the B1 reference encoding on one rented pod, stock clocks.
|
||||
# Writes /root/b3/out/<label>/. Board power: nvidia-smi 1 Hz for the whole run, idle NOT subtracted (parse_rows.py integrates).
|
||||
# Each row's correctness gate: the in-harness oracle (C port of B1, itself equal to B1's fixtures) + every proof verified.
|
||||
set -uo pipefail
|
||||
LABEL=${1:?label}; KAT=${2:?kat dir}; SRC=$(cd "$(dirname "$0")" && pwd); OUT=/root/b3/out/$LABEL; mkdir -p "$OUT" /root/b3/pids
|
||||
CPUQ=$(awk '{printf "%d", $1/$2}' /sys/fs/cgroup/cpu.max 2>/dev/null || nproc)
|
||||
export OMP_NUM_THREADS=$CPUQ
|
||||
{
|
||||
echo "label=$LABEL"; echo "encoding=B1 (tools/mhpow/b1 at build-6 09:26Z: params.py d47b8ff5, drsample.py 4169a5fc, mtp.py c0feed31)"
|
||||
echo "src_id_b1=$(cat "$SRC/SRC_ID_B1")"; date -u +%FT%TZ
|
||||
grep -m1 'model name' /proc/cpuinfo; echo "nproc=$(nproc --all) cgroup_cpus=$CPUQ"; cat /proc/loadavg
|
||||
nvidia-smi --query-gpu=name,driver_version,vbios_version,power.limit,power.default_limit,clocks.max.sm,clocks.max.mem,memory.total,pcie.link.gen.current,pcie.link.width.current --format=csv
|
||||
/usr/local/cuda/bin/nvcc --version | tail -1
|
||||
"$SRC/cpu_ref_b1" kat "$KAT"
|
||||
} > "$OUT/meta.txt" 2>&1
|
||||
nvidia-smi --query-gpu=timestamp,power.draw,utilization.gpu,utilization.memory,clocks.sm,clocks.mem,memory.used,temperature.gpu --format=csv,noheader,nounits -lms 1000 > "$OUT/power.csv" &
|
||||
echo "$! $(date -u +%FT%TZ) b3-smi-$LABEL" > /root/b3/pids/smi-b1.pid
|
||||
sleep 30
|
||||
echo "{\"idle_window_unix_ms\":[$(( ($(date +%s) - 30) * 1000 )),$(( $(date +%s) * 1000 ))]}" > "$OUT/idle.json"
|
||||
R="$OUT/rows.jsonl"
|
||||
row() { "$SRC/b3_gpu_b1" --kat-dir "$KAT" "$@" >> "$R" 2>> "$OUT/stderr.log"; echo "row rc=$? $*" >> "$OUT/progress.log"; }
|
||||
for n in 20 22 24; do row --n $n --layout soa --min-label-s 20 --check 2 --k 64 --tag main-n$n; done
|
||||
row --n 20 --layout aos --min-label-s 20 --check 2 --k 64 --tag abl-n20-aos
|
||||
row --n 20 --layout soa --min-label-s 20 --check 2 --k 64 --tpb 32 --tag abl-n20-tpb32
|
||||
for b in 1 32 128; do row --n 20 --B $b --layout soa --min-label-s 10 --check 1 --k 64 --tag ladder-n20-B$b; done
|
||||
for n in 12 14 16 18; do row --n $n --layout soa --min-label-s 20 --check 2 --k 64 --tag diag-n$n; done
|
||||
for n in 20 22 24; do "$SRC/cpu_ref_b1" time $n 64 1 >> "$OUT/cpu.jsonl"; done
|
||||
for n in 20 22; do "$SRC/cpu_ref_b1" time $n 64 "$CPUQ" >> "$OUT/cpu.jsonl"; done
|
||||
cat /proc/loadavg >> "$OUT/meta.txt"
|
||||
kill "$(cut -d' ' -f1 /root/b3/pids/smi-b1.pid)"; rm -f /root/b3/pids/smi-b1.pid
|
||||
echo "DONE $(date -u +%FT%TZ)" >> "$OUT/progress.log"
|
||||
22
tools/mhpow/b3/test_known_failed.sh
Executable file
22
tools/mhpow/b3/test_known_failed.sh
Executable file
|
|
@ -0,0 +1,22 @@
|
|||
#!/usr/bin/env bash
|
||||
# test_known_failed.sh - the oracle must fire on a known-failed GPU variant and stay quiet on the known-finished one.
|
||||
# known-failed : --wrong-edge (the GPU uses far(v) = v-2, i.e. DRSample's long edges deleted: "a faster graph with
|
||||
# the old proof"); the spec oracle must report MISMATCH and the harness must exit 1.
|
||||
# known-finished: the same run without the flag must report IDENTICAL and exit 0.
|
||||
# cpu selftest : the CPU fast path (sha_ni) must be byte-identical to the spec path.
|
||||
# Exit 0 only when all three behave as stated.
|
||||
set -uo pipefail
|
||||
cd "$(dirname "$0")"
|
||||
export OMP_NUM_THREADS=${OMP_NUM_THREADS:-16}
|
||||
fail=0
|
||||
./cpu_ref selftest; [ $? -eq 0 ] && echo "CASE cpu_selftest PASS" || { echo "CASE cpu_selftest FAIL"; fail=1; }
|
||||
out=$(./b3_gpu --n 12 --B 96 --k 32 --check 4 --wrong-edge --tag known-failed 2>/dev/null); rc=$?
|
||||
echo "$out"
|
||||
if [ $rc -eq 1 ] && echo "$out" | grep -q '"oracle":"MISMATCH"' && echo "$out" | grep -q '"accepted":0,'; then echo "CASE known_failed_wrong_edge PASS (oracle fired: MISMATCH, 0 proofs accepted, exit 1)"; else echo "CASE known_failed_wrong_edge FAIL (rc=$rc)"; fail=1; fi
|
||||
for kern in 1 2; do
|
||||
out=$(./b3_gpu --n 12 --B 96 --k 32 --check 4 --kernel $kern --tag known-finished-k$kern 2>/dev/null); rc=$?
|
||||
echo "$out"
|
||||
if [ $rc -eq 0 ] && echo "$out" | grep -q '"oracle":"IDENTICAL"'; then echo "CASE known_finished_k$kern PASS"; else echo "CASE known_finished_k$kern FAIL (rc=$rc)"; fail=1; fi
|
||||
done
|
||||
[ $fail -eq 0 ] && echo "RESULT test_known_failed PASS" || echo "RESULT test_known_failed FAIL"
|
||||
exit $fail
|
||||
19
tools/mhpow/b3/test_known_failed_b1.sh
Executable file
19
tools/mhpow/b3/test_known_failed_b1.sh
Executable file
|
|
@ -0,0 +1,19 @@
|
|||
#!/usr/bin/env bash
|
||||
# test_known_failed_b1.sh <b1-kat-dir> - the B1-encoding oracle chain must fire on a known-failed case and pass a known-finished one.
|
||||
# kat : the C port reproduces B1's five known-answer fixtures (graph, labels, tau, proof bytes) byte for byte;
|
||||
# known-failed : --wrong-edge (GPU graph far(v) = v-2, DRSample's long edges deleted: a faster graph that keeps the old
|
||||
# proof) must give MISMATCH, 0 accepted proofs and exit 1;
|
||||
# known-finished : the same batch without the flag must be IDENTICAL, instance 0 equal to B1's own fixture, exit 0.
|
||||
set -uo pipefail
|
||||
cd "$(dirname "$0")"; KAT=${1:?b1 kat dir}
|
||||
export OMP_NUM_THREADS=${OMP_NUM_THREADS:-16}
|
||||
fail=0
|
||||
./cpu_ref_b1 kat "$KAT"; [ $? -eq 0 ] && echo "CASE b1_kat_port PASS" || { echo "CASE b1_kat_port FAIL"; fail=1; }
|
||||
out=$(./b3_gpu_b1 --n 12 --B 96 --k 64 --check 4 --wrong-edge --kat-dir "$KAT" --tag known-failed-b1 2>/dev/null); rc=$?; echo "$out"
|
||||
if [ $rc -eq 1 ] && echo "$out" | grep -q '"oracle":"MISMATCH"' && echo "$out" | grep -q '"accepted":0,'; then echo "CASE known_failed_wrong_edge_b1 PASS (oracle fired)"; else echo "CASE known_failed_wrong_edge_b1 FAIL (rc=$rc)"; fail=1; fi
|
||||
for n in 8 12 16; do
|
||||
out=$(./b3_gpu_b1 --n $n --B 96 --k 64 --check 4 --kat-dir "$KAT" --tag known-finished-b1-n$n 2>/dev/null); rc=$?; echo "$out"
|
||||
if [ $rc -eq 0 ] && echo "$out" | grep -q '"oracle":"IDENTICAL"' && echo "$out" | grep -q '"b1_kat_instance0":1,'; then echo "CASE known_finished_b1_n$n PASS"; else echo "CASE known_finished_b1_n$n FAIL (rc=$rc)"; fail=1; fi
|
||||
done
|
||||
[ $fail -eq 0 ] && echo "RESULT test_known_failed_b1 PASS" || echo "RESULT test_known_failed_b1 FAIL"
|
||||
exit $fail
|
||||
Loading…
Reference in a new issue