docs/analysis/horizon/new-pow.md sections 0 to 9: scheme A (mining is proving) never, on bytes, the verifier and sampleability; scheme B (the tensor-shaped integer shadow) prototyped as proto-newpow/mma-shadow and measured, never as class content on the energy reading, with the R8 two-output correction; scheme C (proof of stored state, sd1: the daily dataset derived from the execution state) prototyped as proto-newpow/state-dataset, measured on the GPU and the box's CPU, and put forward as the class v5 candidate with its spec items and the Devnet 2 gate. The lane's standing rule: a shadow lever only works through joules the honest card is forced to spend, so shadow work goes where the GPU is least efficient per op. Chip rows in sim/horizon/new-pow/chip_rows.py by the chip-model-v3 method. Rented box addresses replaced by placeholders in the READMEs and the run script. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
66 lines
3.7 KiB
C++
66 lines
3.7 KiB
C++
// Generated by igneum-pow export (generator v2) for seed "igneum-genesis". Do not edit by hand.
|
|
// Program metadata for host.cu plus the launch wrappers defined in kernel.cu.
|
|
// Also included by proto-opencl/host.c (C99), which defines IGNEUM_NO_CUDA first and reads only the macros.
|
|
#pragma once
|
|
#ifdef __cplusplus
|
|
#include <cstdint>
|
|
#else
|
|
#include <stdint.h>
|
|
#endif
|
|
#ifndef IGNEUM_NO_CUDA
|
|
#include <cuda_runtime.h>
|
|
#endif
|
|
|
|
#define IGNEUM_SEED_STRING "igneum-genesis"
|
|
#define IGNEUM_SEED_BYTES_HEX "69676e65756d2d67656e65736973"
|
|
#define IGNEUM_GENERATOR 3
|
|
#define IGNEUM_PROGRAM_ATTEMPT 0
|
|
#define IGNEUM_PROGRAM_ID 0xe323b9dcaf283a6full
|
|
#define IGNEUM_DAY_STRING "2026-10-03"
|
|
#define IGNEUM_DAY_BYTES_HEX "6461792f323032362d31302d3033"
|
|
#define IGNEUM_DAY0 0x3067619fu
|
|
#define IGNEUM_DAY1 0x3c269176u
|
|
#define IGNEUM_DATASET_LOG2 28
|
|
#define IGNEUM_MASK 0x0fffffffu
|
|
#define IGNEUM_LANES 32
|
|
#define IGNEUM_ITERATIONS 8
|
|
#define IGNEUM_INSTR_COUNT 64
|
|
#define IGNEUM_LOADS_PER_HASH 128
|
|
#define IGNEUM_WIDE_LOADS_PER_HASH 0
|
|
#define IGNEUM_OP_MIX "load=16 add=8 shfl=8 xor=6 mad=5 mul=5 mulhi=5 sub=4 rotl=3 rotr=3 or=1"
|
|
// Program class v3 (Counter ASIC 2.0, docs/plans/counter-asic-2-rollout.md): generator version 3; a worker that
|
|
// runs another class refuses this pack, and a job line names the class it wants (class=v3 era=<hex>).
|
|
#define IGNEUM_PROGRAM_CLASS "v3"
|
|
// Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item
|
|
// derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule.
|
|
#define IGNEUM_LOAD_CLASS "mx8"
|
|
#define IGNEUM_CLASS_MIXER_MULT 8
|
|
#define IGNEUM_CACHE_GROWTH 1 // 1: cache words = 2^(26 + doublings(day)), doublings = floor(log2(1 + day / 1460))
|
|
#define IGNEUM_LOAD_SLOTS 16
|
|
#define IGNEUM_LOAD_MIX { 100, 0, 0 }
|
|
#define IGNEUM_LOAD_WIDTH_COUNTS { 16, 0, 0 } // loads of 4, 16, 64 bytes per program
|
|
#define IGNEUM_BYTES_PER_HASH 512
|
|
#define IGNEUM_FOLD_ROT 11
|
|
#define IGNEUM_FOLD_MUL 0x9e3779b1u
|
|
// 0 = closed-form dataset (ds_elem), 1 = memory-hard cache construction (MEMHARD.md, memhard.h)
|
|
#define IGNEUM_DATASET_MODE 1
|
|
|
|
#define IGNEUM_SEEDW_INIT { 0x67a9a7beu, 0x1a155b25u, 0xfddfb732u, 0x4b5af2e8u, 0xc55caf33u, 0xa27c13b7u, 0x06628a48u, 0x03852469u }
|
|
#define IGNEUM_KEY_INIT { 0x3067619fu, 0x3c269176u, 0x84a03b03u, 0xf8c63294u, 0xff977c5bu, 0xe60def3eu, 0x63630141u, 0xb8fbcb58u }
|
|
#define IGNEUM_CACHE_LOG2_WORDS 26
|
|
#define IGNEUM_CACHE_SEGMENT_LOG2_LINES 6
|
|
#define IGNEUM_CACHE_SEGMENTS 65536u
|
|
#define IGNEUM_ITEM_ROUNDS 8
|
|
#define IGNEUM_MIXER_MULT 8 // mixer applications per round and after the last read (class v3, docs/plans/mixer-x4.md)
|
|
#define IGNEUM_MIX_ROT_INIT { 20u, 20u, 19u, 4u, 26u, 3u, 3u, 27u }
|
|
#define IGNEUM_MIX_MUL_INIT { 0x42146205u, 0x52cbe0fbu, 0x7ecf4a03u, 0x6728907fu, 0xd81d9751u, 0x132952c3u, 0xf60de277u, 0x05358035u, 0xbaf6499du, 0xe4db9667u, 0x3e98f45du, 0xd0004eddu, 0x2691630du, 0x9beb3bcfu, 0xab310379u, 0x99cfb423u }
|
|
#define IGNEUM_MIX_RC_INIT { 0xbab68293u, 0xcc162340u, 0x6ce151ccu, 0xe62b8997u, 0xc9c80297u, 0xf74a1654u, 0x3d704af5u, 0x3cf522b7u, 0x2b9cac04u, 0xa880ac10u, 0x13e5dd1du, 0x6fc3e233u, 0x2d83eeacu, 0x9006e8bfu, 0x2c4b5362u, 0x31b49ee2u }
|
|
|
|
#ifndef IGNEUM_NO_CUDA
|
|
// Defined in kernel.cu. All launch on the default stream and return cudaGetLastError().
|
|
cudaError_t igneum_launch_cache_fill(uint32_t* cache, uint32_t nSegments);
|
|
cudaError_t igneum_launch_build(uint32_t* ds, const uint32_t* cache, uint32_t nItems);
|
|
cudaError_t igneum_launch_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonce, uint32_t mask,
|
|
uint32_t nonces, uint32_t blockWarps);
|
|
cudaError_t igneum_hash_info(int* numRegs, int* blocksPerSM, uint32_t blockWarps);
|
|
#endif
|