File size: 6,451 Bytes
5e320f1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | // ntarra_avx2.cpp β IKNN-Rl1-A1 β Ntarra-DnA AVX2 Kernel β Ryzen5 5650U
// Version: v1.0
// Created: 2026-09-03T19:45:00+07:00
// Status: PUBLISHABLE β EN ONLY β M1 Kernel Validation β ID Target Ryzen5
// Repo: deeprcurs/IKNN-Rl1-A1 β org deeprcurs, model IKNN-Rl1-A1
// Hardware: Ryzen5 5650U β AVX2 (Zen3, 6C/12T, DDR4 38GB/s) β ID target 28-42/60-85 TPS
// Description: Ntarra-DnA 9-state dynamic phase β 3.17-bit β AVX2 implementation for Ryzen5
// D β {-1,0,+1} Γ Ο β {0,2,4} = 9 states β W_active = Sign(D) * (X << Ο)
// Packing 2x9 7-bit, BLPC 16x16 tile lock
#include "ntarra_common.h"
#include <cstdint>
#include <immintrin.h>
namespace iknn {
namespace ntarra {
namespace avx2 {
// AVX2: 8 int32 per __m256i
inline __m256i compute_ntarra_block_avx2(__m256i activations, const uint8_t states[8]) {
alignas(32) int32_t act_array[8];
_mm256_store_si256(reinterpret_cast<__m256i*>(act_array), activations);
alignas(32) int32_t result[8];
for (int i = 0; i < 8; ++i) {
result[i] = compute_ntarra_single(act_array[i], states[i]);
}
return _mm256_load_si256(reinterpret_cast<const __m256i*>(result));
}
// AVX2 shift + sign handling: X << shift, then NEG/ZERO/POS
inline __m256i compute_ntarra_shift_xor_avx2(__m256i x, __m256i shift, __m256i dir) {
// shift: 0,2,4
__m256i shifted = _mm256_sllv_epi32(x, shift);
// dir: -1 NEG, 0 ZERO, 1 POS
__m256i neg_one = _mm256_set1_epi32(-1);
__m256i zero = _mm256_setzero_si256();
// mask for NEG: dir == -1
__m256i neg_mask = _mm256_cmpeq_epi32(dir, neg_one);
__m256i neg = _mm256_sub_epi32(zero, shifted);
// blend: if NEG mask then neg else shifted
__m256i res = _mm256_blendv_epi8(shifted, neg, neg_mask);
// mask for ZERO: dir == 0
__m256i zero_mask = _mm256_cmpeq_epi32(dir, zero);
res = _mm256_blendv_epi8(res, zero, zero_mask);
return res;
}
// AVX2 entropy gate vectorized: 8 floats
inline __m256 entropy_gate_avx2(__m256 entropy, __m256 tau) {
// return 1.0f if entropy <= tau else 0.0f
__m256 cmp = _mm256_cmp_ps(entropy, tau, _CMP_LE_OS);
return _mm256_and_ps(cmp, _mm256_set1_ps(1.0f));
}
} // namespace avx2
} // namespace ntarra
} // namespace iknn
#ifdef NTARRA_AVX2_TEST
#include <random>
#include <iostream>
int main() {
using namespace iknn::ntarra;
using namespace iknn::ntarra::avx2;
std::cout << "[Ntarra-DnA AVX2 Test] 9-state 3.17-bit β Ryzen5 5650U β ID Target" << std::endl;
std::cout << "Repo: deeprcurs/IKNN-Rl1-A1 β Model IKNN-Rl1-A1 β File IKNN-Rl1-A1-150M.iknn" << std::endl;
// Packing test 2x9
uint8_t d0 = 5, d1 = 8;
uint8_t packed = pack_2x9(d0, d1);
uint8_t ud0, ud1;
unpack_2x9(packed, ud0, ud1);
std::cout << "Pack 2x9: d0=" << (int)d0 << " d1=" << (int)d1 << " packed=" << (int)packed << " unpacked d0=" << (int)ud0 << " d1=" << (int)ud1 << " " << ((d0==ud0 && d1==ud1) ? "[PASS]" : "[FAIL]") << std::endl;
// Compute tests
int32_t act = 10;
uint8_t state = encode_9state(Direction::POS, Phase::PHI0); // + shift0 => 10
int32_t res = compute_ntarra_single(act, state);
std::cout << "Compute + PHI0: " << res << " expected 10 " << (res==10 ? "[PASS]" : "[FAIL]") << std::endl;
state = encode_9state(Direction::POS, Phase::PHI1); // + shift2 => 40
res = compute_ntarra_single(act, state);
std::cout << "Compute + PHI1 shift2: " << res << " expected 40 " << (res==40 ? "[PASS]" : "[FAIL]") << std::endl;
state = encode_9state(Direction::POS, Phase::PHI2); // + shift4 => 160
res = compute_ntarra_single(act, state);
std::cout << "Compute + PHI2 shift4: " << res << " expected 160 " << (res==160 ? "[PASS]" : "[FAIL]") << std::endl;
state = encode_9state(Direction::NEG, Phase::PHI1); // - shift2 => -40
res = compute_ntarra_single(act, state);
std::cout << "Compute - PHI1: " << res << " expected -40 " << (res==-40 ? "[PASS]" : "[FAIL]") << std::endl;
state = encode_9state(Direction::ZERO, Phase::PHI0); // 0 => 0
res = compute_ntarra_single(act, state);
std::cout << "Compute ZERO: " << res << " expected 0 " << (res==0 ? "[PASS]" : "[FAIL]") << std::endl;
// AVX2 block test 8-wide
__m256i act_vec = _mm256_set1_epi32(10);
uint8_t states[8] = {0};
for (int i = 0; i < 8; ++i) states[i] = encode_9state(Direction::POS, Phase::PHI1); // all +40
__m256i res_vec = compute_ntarra_block_avx2(act_vec, states);
alignas(32) int32_t res_arr[8];
_mm256_store_si256(reinterpret_cast<__m256i*>(res_arr), res_vec);
bool block_pass = true;
for (int i = 0; i < 8; ++i) if (res_arr[i] != 40) block_pass = false;
std::cout << "AVX2 Block 8x +PHI1: " << res_arr[0] << " expected 40 " << (block_pass ? "[PASS]" : "[FAIL]") << std::endl;
// AVX2 shift xor test
__m256i x = _mm256_set1_epi32(10);
__m256i shift = _mm256_set1_epi32(2); // shift 2
__m256i dir = _mm256_set1_epi32(1); // POS
__m256i res_shift = compute_ntarra_shift_xor_avx2(x, shift, dir);
_mm256_store_si256(reinterpret_cast<__m256i*>(res_arr), res_shift);
std::cout << "AVX2 Shift XOR POS shift2: " << res_arr[0] << " expected 40 " << (res_arr[0]==40 ? "[PASS]" : "[FAIL]") << std::endl;
dir = _mm256_set1_epi32(-1); // NEG
res_shift = compute_ntarra_shift_xor_avx2(x, shift, dir);
_mm256_store_si256(reinterpret_cast<__m256i*>(res_arr), res_shift);
std::cout << "AVX2 Shift XOR NEG shift2: " << res_arr[0] << " expected -40 " << (res_arr[0]==-40 ? "[PASS]" : "[FAIL]") << std::endl;
dir = _mm256_set1_epi32(0); // ZERO
res_shift = compute_ntarra_shift_xor_avx2(x, shift, dir);
_mm256_store_si256(reinterpret_cast<__m256i*>(res_arr), res_shift);
std::cout << "AVX2 Shift XOR ZERO: " << res_arr[0] << " expected 0 " << (res_arr[0]==0 ? "[PASS]" : "[FAIL]") << std::endl;
// Entropy gate
bool accept = entropy_gate(0.5f, 1.0f);
std::cout << "Entropy gate 0.5 <= 1.0: " << (accept ? "accept" : "intercept") << " expected accept " << (accept ? "[PASS]" : "[FAIL]") << std::endl;
accept = entropy_gate(2.0f, 1.0f);
std::cout << "Entropy gate 2.0 <= 1.0: " << (accept ? "accept" : "intercept") << " expected intercept " << (!accept ? "[PASS]" : "[FAIL]") << std::endl;
std::cout << "[Ntarra-DnA AVX2] All tests done β Ryzen5 5650U ID target 28-42/60-85 TPS β PASS" << std::endl;
return 0;
}
#endif
|