CPU dense decision and diagnostic evidence ========================================== The eight-accumulator CPU candidate was rejected at the fixed-work preflight. Its first configuration converged with different iterations and matvecs even though both revisions passed true-residual checks. No candidate CPU A/B timing campaign was started, so this is neither a measured slowdown nor a demonstrated speedup. Keep the baseline production arithmetic; retain useful independent boundary, cancellation and non-finite coverage. CPU 2048 prepared optimization remains open. This report records diagnostics from baseline ``84c88c98c895103395e1b6d6e98f7618848a14d3`` and rejected candidate ``abd655a20a6835b6b95b2e6c3aeae2b69b9957aa``. It is not a current-main NumPy/PyTorch scorecard. The 5% adoption threshold is unchanged. Fresh API, Session and prepared scopes remain separate; no backend, fusion or size AUTO policy is introduced. Fixed-work rejection -------------------- The refined source was frozen before candidate performance outcomes. The first configuration is CPU-release, dense float64, native kernel, standard CG without preconditioner, fused operations, fresh API, one CPU thread. For dense-64, two checks each reproduce baseline 49/51/0 versus candidate 48/50/0 (iterations/matvecs/restarts). Both true residuals pass the original tolerance. Rounding-group changes are numerically valid here but ineligible for this declared same-work optimization trial. There is no work normalization, selective size exception, timing comparison, or relaxed tolerance. .. csv-table:: All checks from the two completed first-configuration workers :header: "Revision","Case","Implementation","I/M/R","Checks","Maximum true residual","Minimum threshold" "baseline","dense-64","native","49/51/0","2","1.8582645e-06","3.0576161e-06" "baseline","dense-64","numpy-out","49/51/0","2","1.8734617e-06","3.0576161e-06" "baseline","dense-64","torch-eager-out","49/51/0","2","1.9437482e-06","3.0576161e-06" "baseline","dense-256","native","67/70/1","2","4.8815545e-06","5.0262292e-06" "baseline","dense-256","numpy-out","67/70/1","2","4.8752604e-06","5.0262292e-06" "baseline","dense-256","torch-eager-out","67/70/1","2","4.8872893e-06","5.0262292e-06" "baseline","dense-1024","native","70/73/1","2","9.6567151e-06","1.0405785e-05" "baseline","dense-1024","numpy-out","70/73/1","2","9.6567151e-06","1.0405785e-05" "baseline","dense-1024","torch-eager-out","70/73/1","2","9.6567151e-06","1.0405785e-05" "baseline","dense-2048","native","70/73/1","2","1.2911386e-05","1.4810685e-05" "baseline","dense-2048","numpy-out","70/73/1","2","1.2911386e-05","1.4810685e-05" "baseline","dense-2048","torch-eager-out","70/73/1","2","1.2911385e-05","1.4810685e-05" "current","dense-64","native","48/50/0","2","2.307155e-06","3.0576161e-06" "current","dense-64","numpy-out","49/51/0","2","1.8734617e-06","3.0576161e-06" "current","dense-64","torch-eager-out","49/51/0","2","1.9437482e-06","3.0576161e-06" "current","dense-256","native","67/70/1","2","4.9381732e-06","5.0262292e-06" "current","dense-256","numpy-out","67/70/1","2","4.8752604e-06","5.0262292e-06" "current","dense-256","torch-eager-out","67/70/1","2","4.8872893e-06","5.0262292e-06" "current","dense-1024","native","70/73/1","2","9.6567151e-06","1.0405785e-05" "current","dense-1024","numpy-out","70/73/1","2","9.6567151e-06","1.0405785e-05" "current","dense-1024","torch-eager-out","70/73/1","2","9.6567151e-06","1.0405785e-05" "current","dense-2048","native","70/73/1","2","1.2911385e-05","1.4810685e-05" "current","dense-2048","numpy-out","70/73/1","2","1.2911386e-05","1.4810685e-05" "current","dense-2048","torch-eager-out","70/73/1","2","1.2911385e-05","1.4810685e-05" The enclosing preflight manifest remains failed; later declared configurations were not completed by this aborted CPU trial. The full per-check values and source identities are preserved in the accompanying structured audit. Actual code-generation inspection --------------------------------- GNU C++ 16.0.1 used ``-O3 -DNDEBUG -std=c++20 -fPIC -Wall -Wextra -Wpedantic``. All inspected helpers use 128-bit SSE2, without AVX or FMA. The refined low/high four-element arrays preserve the first eight-accumulator prototype's per-lane recurrence and balanced reduction, but change association relative to the four-accumulator baseline. Static instruction and frame counts do not establish runtime performance, cache behavior or bandwidth. .. csv-table:: Actual serial two-row helper observations :header: "Observation","Baseline","713c8ae","abd655a" "Packed accumulation chains","4","8","8" "Distinct bulk-loop XMM register names","7","13","13" "Bulk-loop FP stack references","0","0","0" "Instructions per eight columns","36","34","34" "Unconditional frame bytes","0 on multiple-of-four path","168","104" "Entry array-zeroing bytes","0","128","64" "Post-bulk FP stores before optional four-column tail (bytes)","0","64","64" "Two-row helper symbol bytes","475","918","835" "Whole dense object .text bytes","3774","4667","4539" The refinement partially reduces setup and footprint; its unconditional frame, canary and post-loop stores remain. No further source variant was selected from performance outcomes. Earlier rejected four-row and four-accumulator unroll experiments are separate evidence and are not repeated or relabelled here. .. csv-table:: Previously preserved actual object SHA256 identities :header: "Representation","Preserved object","SHA256" "Baseline","codegen-halves/baseline.o","9315d269ab22598ddd4227a0fa6080681569b9fdf5c0b2baff07a4b43cbfdf95" "713c8ae","codegen/current-713-stage.o","778f5045420972e87161c5dd291a1f269ad6b5da807273ade4734c0563454b6b" "abd655a","codegen-halves/current.o","5b82b88229d0dcfd998974b5bc926413f08aae25dc4d3e1b7589cda18c7d7284" These object hashes were checked in the earlier static audit; report rendering does not rehash binaries. The full frame/instruction audit remains preserved as ``cpu-codegen-halves-note.rst``. Baseline same-call engine attribution ------------------------------------- The exact shared solver engine and actual CPU backends are instrumented on the same dense-2048 fixture (seed 20261017). There are 24 ordinary captures and six additional provider-wrapped captures, each in a fresh process with three warmups and ten measured engine calls. Every warmup and sample has a converged status, stable I/M/R within its capture, and an independent wider-long-double true residual check outside timing. Jacobi preparation, workspace allocation, x reset, Python dispatch and public solve validation are outside these engine intervals. The matvec-entry percentage is the median of each call's summed ``apply``, ``apply_and_dot`` and ``residual_squared_norm`` times divided by its engine time. Composite entries include vector arithmetic. The nested private CBLAS timer isolates actual provider-entry elapsed time inside those composites; it includes provider checks/dispatch and timer overhead, rather than exclusive microkernel CPU time. Provider time must not be added to entry sums. All percentages below come from same-call ratios; separate capture medians are not subtracted. .. csv-table:: All engine captures; times are medians in milliseconds :header: "Capture","I/M/R","Engine ms","Entry sum ms","Remainder ms","Matvec-entry %","Nested provider %","Maximum true-residual/threshold" "cpu-release-native-standard-none-fused0","70/73/1","100.8635","100.83195","0.0281545","99.720549","n/a","0.87176155" "cpu-release-native-standard-none-fused1","70/73/1","103.91455","103.88041","0.026821","99.790351","n/a","0.87176155" "cpu-release-native-standard-jacobi-fused0","3/5/0","6.1359045","6.133435","0.002723","99.655595","n/a","0.83641225" "cpu-release-native-standard-jacobi-fused1","3/5/0","5.8770945","5.875022","0.0021835","99.728347","n/a","0.83641225" "cpu-release-native-explicit-none-fused0","68/137/0","158.36342","158.27195","0.083896","99.752594","n/a","0.98130942" "cpu-release-native-explicit-none-fused1","68/137/0","159.26138","159.21603","0.046001","99.72865","n/a","0.98130942" "cpu-openmp-native-standard-none-fused0","70/73/1","48.546378","48.520315","0.0257545","99.248994","n/a","0.87176155" "cpu-openmp-native-standard-none-fused1","70/73/1","52.606431","52.584942","0.02666","99.224025","n/a","0.87176155" "cpu-openmp-native-standard-jacobi-fused0","3/5/0","3.450463","3.448252","0.002453","99.151357","n/a","0.83641225" "cpu-openmp-native-standard-jacobi-fused1","3/5/0","3.456848","3.454399","0.002546","99.104059","n/a","0.83641225" "cpu-openmp-native-explicit-none-fused0","68/137/0","101.59005","101.48882","0.046475","99.519448","n/a","0.98130942" "cpu-openmp-native-explicit-none-fused1","68/137/0","93.244557","93.199611","0.0442705","99.289699","n/a","0.98130942" "cpu-blas-native-standard-none-fused0","70/73/1","90.747881","90.725233","0.023825","99.697779","n/a","0.87176155" "cpu-blas-native-standard-none-fused1","70/73/1","90.203702","90.170068","0.028774","99.783773","n/a","0.87176155" "cpu-blas-native-standard-jacobi-fused0","3/5/0","6.6076875","6.6001355","0.0017715","99.715629","n/a","0.83641225" "cpu-blas-native-standard-jacobi-fused1","3/5/0","6.198311","6.1967285","0.0015495","99.640093","n/a","0.83641225" "cpu-blas-native-explicit-none-fused0","68/137/0","171.74281","171.68967","0.053137","99.801063","n/a","0.98130942" "cpu-blas-native-explicit-none-fused1","68/137/0","192.42125","192.38192","0.045734","99.794583","n/a","0.98130942" "cpu-blas-blas-standard-none-fused0","70/73/1","84.548345","84.516131","0.0312445","99.656482","n/a","0.87176155" "cpu-blas-blas-standard-none-fused1","70/73/1","79.859586","79.823885","0.0326855","99.726432","n/a","0.87176155" "cpu-blas-blas-standard-jacobi-fused0","3/5/0","5.456052","5.453814","0.0020045","99.623192","n/a","0.83641225" "cpu-blas-blas-standard-jacobi-fused1","3/5/0","5.3576465","5.356163","0.002013","99.718472","n/a","0.83641225" "cpu-blas-blas-explicit-none-fused0","68/137/0","150.38634","150.36122","0.0264545","99.759554","n/a","0.98130942" "cpu-blas-blas-explicit-none-fused1","68/137/0","141.27486","141.24558","0.025433","99.734617","n/a","0.98130942" "provider-standard-none-fused0","70/73/1","76.042181","76.010869","0.02529","99.664691","99.514132","0.87176155" "provider-standard-none-fused1","70/73/1","73.564548","73.541472","0.033333","99.741645","99.587221","0.87176155" "provider-standard-jacobi-fused0","3/5/0","5.433049","5.4304385","0.0025535","99.543501","99.32157","0.83641225" "provider-standard-jacobi-fused1","3/5/0","5.3692645","5.366724","0.002565","99.692583","99.522189","0.83641225" "provider-explicit-none-fused0","68/137/0","136.8543","136.6764","0.0458755","99.735184","99.521313","0.98130942" "provider-explicit-none-fused1","68/137/0","135.29772","135.25119","0.053275","99.732051","99.572332","0.98130942" Across the six provider-wrapped captures, the median fraction of an engine interval spent inside the actual private GEMV entry ranges from 99.322% to 99.587%. This supports investigating actual GEMV/provider/storage behavior before optimizing unrelated vector operations. It does not determine the cause of an earlier full-solver NumPy gap. Oracle matrix reads between calls and instrumentation overhead limit generalization to uninstrumented solves. Actual private provider identity after a checked GEMV: .. code-block:: json { "blasint_bytes": 4, "config": "OpenBLAS 0.3.30 NO_LAPACK NO_LAPACKE DYNAMIC_ARCH NO_AFFINITY USE_LOCKING Haswell SINGLE_THREADED", "environment_OPENBLAS_CORETYPE": null, "framework_score": false, "identity_dgemv_check_passes": true, "metric": "private_openblas_identity", "parallel_kind": 0, "reported_num_threads": 1, "schema_version": 1, "selected_core_after_dgemv": "Haswell" } All per-entry call/time medians are retained in the structured audit. Their separate medians are descriptive and need not sum to the median engine time. Same-buffer provider and storage probe -------------------------------------- A separate component diagnostic crosses two providers with two storage owners: actual baseline private BLAS through ``CpuBackend::apply`` and NumPy ``dot(out=)``; the exact fixture's NumPy allocation and an actual owning ``cg::DenseMatrix`` snapshot made with ``std::vector``. Both providers use the same matrix, vector and output addresses for a given storage choice. The fixture's rhs b is the fixed GEMV vector; these are not CG search directions. Native snapshot construction and all identity/oracle checks are outside timing. The NumPy borrowed allocation is not a claim about the full NumPy prepared adapter's separate copied matrix. For each size, all four fresh processes are retained in A/B/B/A label order. A and B reverse treatment enumeration before the same Williams scheduler; they use the same source and bridge, not different optimization builds. Each process uses CPU 0 and one thread in all providers, three warmups per treatment and 36 complete four-treatment Williams rounds with one call per treatment. No global THP setting or NumPy environment variable is changed. .. csv-table:: Every fresh-process component median in milliseconds :header: "Process","Size","Private / NumPy A","NumPy / NumPy A","Private / C++ A","NumPy / C++ A" "dense2048-p1-A","2048","1.22442","1.2408155","1.268276","1.2350245" "dense2048-p2-B","2048","1.372966","1.439262","1.415382","1.42037" "dense2048-p3-B","2048","1.0745405","1.100359","0.979196","1.025904" "dense2048-p4-A","2048","1.1087915","1.0762205","1.182623","1.165265" "dense1024-p1-A","1024","0.1485445","0.1442195","0.1485685","0.1483445" "dense1024-p2-B","1024","0.146474","0.1546845","0.1486875","0.151545" "dense1024-p3-B","1024","0.155286","0.1519175","0.1584395","0.15542" "dense1024-p4-A","1024","0.146485","0.148404","0.1498585","0.15461" .. csv-table:: Within-process ratios; values above one mean the numerator is slower :header: "Process","Private/NumPy on NumPy A","Private/NumPy on C++ A","C++/NumPy A private","C++/NumPy A NumPy" "dense2048-p1-A","0.98678651","1.0269238","1.0358178","0.99533291" "dense2048-p2-B","0.9539375","0.99648824","1.0308937","0.98687383" "dense2048-p3-B","0.97653629","0.95447137","0.91126951","0.93233572" "dense2048-p4-A","1.0302642","1.0148962","1.0665874","1.0827382" "dense1024-p1-A","1.029989","1.00151","1.0001616","1.0286022" "dense1024-p2-B","0.94692099","0.98114421","1.0151119","0.97970385" "dense1024-p3-B","1.0221732","1.019428","1.0203077","1.0230553" "dense1024-p4-A","0.98706908","0.96926784","1.0230297","1.0418183" The observed 2048 workers do not show a consistent large provider or ownership penalty. These component medians are not a full-solver score, a 5% adoption result, or a calibrated confidence interval. Between-process variation and treatment-dependent cache state remain visible. No aggregate winner is selected. The probe does not reproduce all prepared-adapter allocations, CG operands, or real solver memory-access sequences. Provider calls include their different Python/ctypes dispatch boundaries; this is not exclusive kernel timing. Product correctness and ownership evidence ------------------------------------------ Each worker performs four prechecks, twelve warmup checks and 144 timed-call checks, all outside timing. The oracle uses wider-long-double row products and sums, with a double forward-error bound plus a long-double oracle bound. All 160 checks per process pass. The maximum observed error and maximum rowwise bound below summarize different rows/calls; their ratio is not the per-row gate. Input and both matrix byte hashes remain unchanged. .. csv-table:: Every worker's independent product checks :header: "Process","Precision bits","Passing checks","Maximum absolute error","Maximum row bound","Canonical fixture SHA256" "dense2048-p1-A","64","160","6.0822458e-12","2.2138527e-08","8bda02fed9ccafa8c12f857ad51962b02d8c860ee96a006078aed872c40cae6c" "dense2048-p2-B","64","160","6.0822458e-12","2.2138527e-08","8bda02fed9ccafa8c12f857ad51962b02d8c860ee96a006078aed872c40cae6c" "dense2048-p3-B","64","160","6.0822458e-12","2.2138527e-08","8bda02fed9ccafa8c12f857ad51962b02d8c860ee96a006078aed872c40cae6c" "dense2048-p4-A","64","160","6.0822458e-12","2.2138527e-08","8bda02fed9ccafa8c12f857ad51962b02d8c860ee96a006078aed872c40cae6c" "dense1024-p1-A","64","160","4.5670134e-12","8.2972642e-09","204aa61929e5e8d34102ac2d0bda5714b6f0d17f8bf4796a7f71b535a21053bb" "dense1024-p2-B","64","160","4.5670134e-12","8.2972642e-09","204aa61929e5e8d34102ac2d0bda5714b6f0d17f8bf4796a7f71b535a21053bb" "dense1024-p3-B","64","160","4.5670134e-12","8.2972642e-09","204aa61929e5e8d34102ac2d0bda5714b6f0d17f8bf4796a7f71b535a21053bb" "dense1024-p4-A","64","160","4.5670134e-12","8.2972642e-09","204aa61929e5e8d34102ac2d0bda5714b6f0d17f8bf4796a7f71b535a21053bb" THP observations and limits --------------------------- The allocator policy was a source-grounded hypothesis: NumPy 2.2.6 can request ``MADV_HUGEPAGE`` for sufficiently large allocations, whereas the native owning snapshot uses ordinary vector storage. See the `NumPy global-state documentation `_ and `versioned allocator source `_. The following records describe actual overlapping VMAs, not a guessed allocator policy. ``AnonHugePages`` is VMA residency; ``THPeligible`` and ``hg`` are eligibility/advice observations. A VMA may include unrelated allocations, so its huge-page bytes cannot be assigned wholly to a matrix. ``KernelPageSize`` alone is not a huge-page-residency test. At 2048, the distinct VMA-wide AnonHugePages values are 0 kB, 30720 kB for the NumPy matrix and 0 kB for the C++ matrix. The table retains every overlapping matrix mapping in both phases. These residency/advice/eligibility fields remain unchanged across the probe. The component timings do not establish that this policy difference caused the historical prepared-solver gap. No allocator change follows from this evidence. All exact VMA records, including matrix/vector/output mappings before and after every worker, are retained below and in the structured audit. .. csv-table:: Every overlapping matrix VMA; AnonHugePages applies to the entire mapping :header: "Process","Phase","Buffer","VMA address range","AnonHugePages","THPeligible","VmFlags","VMA exceeds buffer" "dense2048-p1-A","before","borrowed-numpy","7d56eaa1c000-7d56eaa1d000","0 kB","0","rd wr mr mw me ac sd","True" "dense2048-p1-A","before","borrowed-numpy","7d56eaa1d000-7d56eca1d000","30720 kB","1","rd wr mr mw me ac sd hg","True" "dense2048-p1-A","before","owned-cpp","7d56e6a1b000-7d56e8a1c000","0 kB","0","rd wr mr mw me ac sd","True" "dense2048-p1-A","after","borrowed-numpy","7d56eaa1c000-7d56eaa1d000","0 kB","0","rd wr mr mw me ac sd","True" "dense2048-p1-A","after","borrowed-numpy","7d56eaa1d000-7d56eca1d000","30720 kB","1","rd wr mr mw me ac sd hg","True" "dense2048-p1-A","after","owned-cpp","7d56e6a1b000-7d56e8a1c000","0 kB","0","rd wr mr mw me ac sd","True" "dense2048-p2-B","before","borrowed-numpy","7b9f36d1c000-7b9f36d1d000","0 kB","0","rd wr mr mw me ac sd","True" "dense2048-p2-B","before","borrowed-numpy","7b9f36d1d000-7b9f38d1d000","30720 kB","1","rd wr mr mw me ac sd hg","True" "dense2048-p2-B","before","owned-cpp","7b9f32d1b000-7b9f34d1c000","0 kB","0","rd wr mr mw me ac sd","True" "dense2048-p2-B","after","borrowed-numpy","7b9f36d1c000-7b9f36d1d000","0 kB","0","rd wr mr mw me ac sd","True" "dense2048-p2-B","after","borrowed-numpy","7b9f36d1d000-7b9f38d1d000","30720 kB","1","rd wr mr mw me ac sd hg","True" "dense2048-p2-B","after","owned-cpp","7b9f32d1b000-7b9f34d1c000","0 kB","0","rd wr mr mw me ac sd","True" "dense2048-p3-B","before","borrowed-numpy","76ae53a1c000-76ae53a1d000","0 kB","0","rd wr mr mw me ac sd","True" "dense2048-p3-B","before","borrowed-numpy","76ae53a1d000-76ae55a1d000","30720 kB","1","rd wr mr mw me ac sd hg","True" "dense2048-p3-B","before","owned-cpp","76ae4fa1b000-76ae51a1c000","0 kB","0","rd wr mr mw me ac sd","True" "dense2048-p3-B","after","borrowed-numpy","76ae53a1c000-76ae53a1d000","0 kB","0","rd wr mr mw me ac sd","True" "dense2048-p3-B","after","borrowed-numpy","76ae53a1d000-76ae55a1d000","30720 kB","1","rd wr mr mw me ac sd hg","True" "dense2048-p3-B","after","owned-cpp","76ae4fa1b000-76ae51a1c000","0 kB","0","rd wr mr mw me ac sd","True" "dense2048-p4-A","before","borrowed-numpy","717aabc1c000-717aabc1d000","0 kB","0","rd wr mr mw me ac sd","True" "dense2048-p4-A","before","borrowed-numpy","717aabc1d000-717aadc1d000","30720 kB","1","rd wr mr mw me ac sd hg","True" "dense2048-p4-A","before","owned-cpp","717aa7c1b000-717aa9c1c000","0 kB","0","rd wr mr mw me ac sd","True" "dense2048-p4-A","after","borrowed-numpy","717aabc1c000-717aabc1d000","0 kB","0","rd wr mr mw me ac sd","True" "dense2048-p4-A","after","borrowed-numpy","717aabc1d000-717aadc1d000","30720 kB","1","rd wr mr mw me ac sd hg","True" "dense2048-p4-A","after","owned-cpp","717aa7c1b000-717aa9c1c000","0 kB","0","rd wr mr mw me ac sd","True" "dense1024-p1-A","before","borrowed-numpy","7b3d56d1c000-7b3d56d1d000","0 kB","0","rd wr mr mw me ac sd","True" "dense1024-p1-A","before","borrowed-numpy","7b3d56d1d000-7b3d5751d000","6144 kB","1","rd wr mr mw me ac sd hg","True" "dense1024-p1-A","before","owned-cpp","12796000-13e2e000","0 kB","0","rd wr mr mw me ac sd","True" "dense1024-p1-A","after","borrowed-numpy","7b3d56d1c000-7b3d56d1d000","0 kB","0","rd wr mr mw me ac sd","True" "dense1024-p1-A","after","borrowed-numpy","7b3d56d1d000-7b3d5751d000","6144 kB","1","rd wr mr mw me ac sd hg","True" "dense1024-p1-A","after","owned-cpp","12796000-13e2e000","0 kB","0","rd wr mr mw me ac sd","True" "dense1024-p2-B","before","borrowed-numpy","7ab58191c000-7ab58191d000","0 kB","0","rd wr mr mw me ac sd","True" "dense1024-p2-B","before","borrowed-numpy","7ab58191d000-7ab58211d000","6144 kB","1","rd wr mr mw me ac sd hg","True" "dense1024-p2-B","before","owned-cpp","30516000-31bae000","0 kB","0","rd wr mr mw me ac sd","True" "dense1024-p2-B","after","borrowed-numpy","7ab58191c000-7ab58191d000","0 kB","0","rd wr mr mw me ac sd","True" "dense1024-p2-B","after","borrowed-numpy","7ab58191d000-7ab58211d000","6144 kB","1","rd wr mr mw me ac sd hg","True" "dense1024-p2-B","after","owned-cpp","30516000-31bae000","0 kB","0","rd wr mr mw me ac sd","True" "dense1024-p3-B","before","borrowed-numpy","78d372a1c000-78d372a1d000","0 kB","0","rd wr mr mw me ac sd","True" "dense1024-p3-B","before","borrowed-numpy","78d372a1d000-78d37321d000","6144 kB","1","rd wr mr mw me ac sd hg","True" "dense1024-p3-B","before","owned-cpp","1ce4d000-1e4e5000","0 kB","0","rd wr mr mw me ac sd","True" "dense1024-p3-B","after","borrowed-numpy","78d372a1c000-78d372a1d000","0 kB","0","rd wr mr mw me ac sd","True" "dense1024-p3-B","after","borrowed-numpy","78d372a1d000-78d37321d000","6144 kB","1","rd wr mr mw me ac sd hg","True" "dense1024-p3-B","after","owned-cpp","1ce4d000-1e4e5000","0 kB","0","rd wr mr mw me ac sd","True" "dense1024-p4-A","before","borrowed-numpy","7586eed1c000-7586eed1d000","0 kB","0","rd wr mr mw me ac sd","True" "dense1024-p4-A","before","borrowed-numpy","7586eed1d000-7586ef51d000","6144 kB","1","rd wr mr mw me ac sd hg","True" "dense1024-p4-A","before","owned-cpp","224ab000-23b43000","0 kB","0","rd wr mr mw me ac sd","True" "dense1024-p4-A","after","borrowed-numpy","7586eed1c000-7586eed1d000","0 kB","0","rd wr mr mw me ac sd","True" "dense1024-p4-A","after","borrowed-numpy","7586eed1d000-7586ef51d000","6144 kB","1","rd wr mr mw me ac sd hg","True" "dense1024-p4-A","after","owned-cpp","224ab000-23b43000","0 kB","0","rd wr mr mw me ac sd","True" dense2048-p1-A: observed buffers, policies and every overlapping VMA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: json { "buffers": { "borrowed-numpy": { "address": 137812257128464, "address_hex": "0x7d56eaa1c010", "address_mod_2MiB": 114704, "address_mod_4096": 16, "address_mod_64": 16, "aligned_for_dtype": true, "c_contiguous": true, "dtype": "