// 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 #else #include #endif #ifndef IGNEUM_NO_CUDA #include #endif #define IGNEUM_SEED_STRING "igneum-genesis" #define IGNEUM_SEED_BYTES_HEX "69676e65756d2d67656e65736973" #define IGNEUM_GENERATOR 2 #define IGNEUM_PROGRAM_ATTEMPT 0 #define IGNEUM_PROGRAM_ID 0x9a3d4d853ae722fbull #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" // 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+sh256x2" #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 // Latency-shadow block (Counter ASIC 3.0 item 8, docs/analysis/latency-shadow-2026-10-06.md): NOT the lottery hash. A block of // IGNEUM_SHADOW_INSTRS ALU instructions (the ten non-load families) runs IGNEUM_SHADOW_REPS times at the end of every // iteration; the 16 loads, the acceptance rule and the base program are the class's without the shadow. #define IGNEUM_SHADOW_INSTRS 256 #define IGNEUM_SHADOW_REPS 2 #define IGNEUM_SHADOW_INSTRS_PER_HASH 4096 #define IGNEUM_SHADOW_OP_MIX "add=47 rotl=30 xor=30 shfl=29 mad=27 mul=22 sub=21 rotr=20 mulhi=18 or=12" // 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