code wiki / (root) / nx_tensor_placement_test.nx

nx_tensor_placement_test.nx source

↩ module page · 134 lines · 6809 B

1// nx_tensor_placement_test.nx -- smoke for nx_tensor_placement. 2 3import "nx_syscalls.nx" 4import "nx_tensor_placement.nx" 5 6func main() -> i64 { 7 let now: nx_size = 1000000 8 9 // 1: enum validity 10 if nx_tp_tier_is_valid(NX_TP_TIER_VRAM_HOT) != 1 { return 1 } 11 if nx_tp_tier_is_valid(NX_TP_TIER_NETWORK_PEER) != 1 { return 2 } 12 if nx_tp_tier_is_valid(-1) != 0 { return 3 } 13 if nx_tp_tier_is_valid(8) != 0 { return 4 } 14 if NX_TP_TIER_N != 8 { return 5 } 15 16 if nx_tp_v_is_valid(NX_TP_V_OK) != 1 { return 6 } 17 if nx_tp_v_is_valid(NX_TP_V_REFUSED_HOTLOCK) != 1 { return 7 } 18 19 // 2: tier classification predicates 20 if nx_tp_tier_is_gpu(NX_TP_TIER_VRAM_HOT) != 1 { return 8 } 21 if nx_tp_tier_is_gpu(NX_TP_TIER_VRAM_WARM) != 1 { return 9 } 22 if nx_tp_tier_is_gpu(NX_TP_TIER_RAM_HOT) != 0 { return 10 } 23 if nx_tp_tier_is_cpu_memory(NX_TP_TIER_RAM_HOT) != 1 { return 11 } 24 if nx_tp_tier_is_cpu_memory(NX_TP_TIER_RAM_WARM) != 1 { return 12 } 25 if nx_tp_tier_is_cpu_memory(NX_TP_TIER_VRAM_HOT) != 0 { return 13 } 26 if nx_tp_tier_is_cold(NX_TP_TIER_NVME_MMAP) != 1 { return 14 } 27 if nx_tp_tier_is_cold(NX_TP_TIER_NETWORK_PEER) != 1 { return 15 } 28 if nx_tp_tier_is_cold(NX_TP_TIER_VRAM_HOT) != 0 { return 16 } 29 30 // 3: construction -- RTX 5080 16GB VRAM, 64GB RAM example budgets 31 let r: *NxPlacementRegistry = nx_tp_new(64, 8000, 8000, 32000, 32000, 1000000) 32 if r.capacity != 64 { return 17 } 33 if r.n_placements != 0 { return 18 } 34 if r.vram_hot_budget != 8000 { return 19 } 35 if r.ram_warm_budget != 32000 { return 20 } 36 37 if nx_tp_new(0, 1, 1, 1, 1, 1) != (0 as *NxPlacementRegistry) { return 21 } 38 39 // 4: register a tensor in VRAM_WARM 40 if nx_tp_register(r, 1001, NX_TP_TIER_VRAM_WARM, 4000, 0xCAFE, now) != NX_TP_V_OK { return 22 } 41 if r.n_placements != 1 { return 23 } 42 43 // 5: find it 44 let t1: *NxTensorPlacement = nx_tp_find(r, 1001) 45 if t1.tier != NX_TP_TIER_VRAM_WARM { return 24 } 46 if t1.bytes != 4000 { return 25 } 47 if t1.pinned != 0 { return 26 } 48 if t1.access_count != 0 { return 27 } 49 50 // 6: invalid tier rejected 51 if nx_tp_register(r, 1002, 99, 100, 0, now) != NX_TP_V_INVALID { return 28 } 52 if nx_tp_register(r, 0, NX_TP_TIER_RAM_HOT, 100, 0, now) != NX_TP_V_INVALID { return 29 } 53 54 // 7: touch -- access_count increments + last_touched_us updates 55 if nx_tp_touch(r, 1001, now + 100) != NX_TP_V_OK { return 30 } 56 if nx_tp_touch(r, 1001, now + 200) != NX_TP_V_OK { return 31 } 57 let t1b: *NxTensorPlacement = nx_tp_find(r, 1001) 58 if t1b.access_count != 2 { return 32 } 59 if t1b.last_touched_us != (now + 200) { return 33 } 60 61 // 8: promote VRAM_WARM -> VRAM_HOT. vram_hot_budget=8000, current used=0, need 4000 -> OK 62 if nx_tp_promote(r, 1001, NX_TP_TIER_VRAM_HOT, 0xBEEF, now + 300) != NX_TP_V_PROMOTED { return 34 } 63 let t1c: *NxTensorPlacement = nx_tp_find(r, 1001) 64 if t1c.tier != NX_TP_TIER_VRAM_HOT { return 35 } 65 if t1c.home_address != 0xBEEF { return 36 } 66 67 // 9: tier accounting 68 if nx_tp_bytes_in_tier(r, NX_TP_TIER_VRAM_HOT) != 4000 { return 37 } 69 if nx_tp_bytes_in_tier(r, NX_TP_TIER_VRAM_WARM) != 0 { return 38 } 70 if nx_tp_count_in_tier(r, NX_TP_TIER_VRAM_HOT) != 1 { return 39 } 71 72 // 10: budget exhaustion -- register another big tensor in RAM_HOT then try to promote to VRAM_HOT 73 nx_tp_register(r, 1002, NX_TP_TIER_RAM_HOT, 6000, 0, now) 74 // VRAM_HOT now has 4000, budget 8000; promoting 6000-byte tensor would need 10000 -> NO_BUDGET 75 if nx_tp_promote(r, 1002, NX_TP_TIER_VRAM_HOT, 0, now) != NX_TP_V_NO_BUDGET { return 40 } 76 // Tier unchanged 77 let t2: *NxTensorPlacement = nx_tp_find(r, 1002) 78 if t2.tier != NX_TP_TIER_RAM_HOT { return 41 } 79 80 // 11: promote to same tier or colder rejected 81 if nx_tp_promote(r, 1001, NX_TP_TIER_VRAM_HOT, 0, now) != NX_TP_V_INVALID { return 42 } 82 if nx_tp_promote(r, 1001, NX_TP_TIER_RAM_HOT, 0, now) != NX_TP_V_INVALID { return 43 } 83 84 // 12: demote VRAM_HOT -> RAM_WARM 85 if nx_tp_demote(r, 1001, NX_TP_TIER_RAM_WARM, 0xDEAD, now + 400) != NX_TP_V_DEMOTED { return 44 } 86 let t1d: *NxTensorPlacement = nx_tp_find(r, 1001) 87 if t1d.tier != NX_TP_TIER_RAM_WARM { return 45 } 88 if nx_tp_bytes_in_tier(r, NX_TP_TIER_VRAM_HOT) != 0 { return 46 } 89 if nx_tp_bytes_in_tier(r, NX_TP_TIER_RAM_WARM) != 4000 { return 47 } 90 91 // 13: pin + try demote 92 if nx_tp_pin(r, 1002) != NX_TP_V_OK { return 48 } 93 let t2_pin: *NxTensorPlacement = nx_tp_find(r, 1002) 94 if t2_pin.pinned != 1 { return 49 } 95 if nx_tp_demote(r, 1002, NX_TP_TIER_NVME_MMAP, 0, now) != NX_TP_V_REFUSED_HOTLOCK { return 50 } 96 if nx_tp_unpin(r, 1002) != NX_TP_V_OK { return 51 } 97 if nx_tp_demote(r, 1002, NX_TP_TIER_NVME_MMAP, 0, now) != NX_TP_V_DEMOTED { return 52 } 98 99 // 14: demote to same or hotter rejected 100 nx_tp_register(r, 1003, NX_TP_TIER_RAM_HOT, 100, 0, now) 101 if nx_tp_demote(r, 1003, NX_TP_TIER_RAM_HOT, 0, now) != NX_TP_V_INVALID { return 53 } 102 if nx_tp_demote(r, 1003, NX_TP_TIER_VRAM_HOT, 0, now) != NX_TP_V_INVALID { return 54 } 103 104 // 15: tier pressure -- VRAM_HOT used=0/8000 = 0; RAM_WARM used=4000/32000 = Q10 128 105 if nx_tp_tier_pressure_q10(r, NX_TP_TIER_VRAM_HOT) != 0 { return 55 } 106 let ram_warm_pressure: nx_int = nx_tp_tier_pressure_q10(r, NX_TP_TIER_RAM_WARM) 107 if ram_warm_pressure != 128 { return 56 } 108 109 // 16: capacity exceeded 110 let r_full: *NxPlacementRegistry = nx_tp_new(2, 1000, 1000, 1000, 1000, 1000) 111 nx_tp_register(r_full, 1, NX_TP_TIER_RAM_HOT, 10, 0, now) 112 nx_tp_register(r_full, 2, NX_TP_TIER_RAM_HOT, 10, 0, now) 113 if nx_tp_register(r_full, 3, NX_TP_TIER_RAM_HOT, 10, 0, now) != NX_TP_V_INVALID { return 57 } 114 115 // 17: null handling 116 let null_r: *NxPlacementRegistry = (0 as i64) as *NxPlacementRegistry 117 if nx_tp_register(null_r, 1, NX_TP_TIER_RAM_HOT, 100, 0, now) != NX_TP_V_NULL { return 58 } 118 if (nx_tp_find(null_r, 1) as i64) != 0 { return 59 } 119 if nx_tp_touch(null_r, 1, now) != NX_TP_V_NULL { return 60 } 120 if nx_tp_promote(null_r, 1, NX_TP_TIER_VRAM_HOT, 0, now) != NX_TP_V_NULL { return 61 } 121 if nx_tp_demote(null_r, 1, NX_TP_TIER_RAM_WARM, 0, now) != NX_TP_V_NULL { return 62 } 122 if nx_tp_pin(null_r, 1) != NX_TP_V_NULL { return 63 } 123 if nx_tp_unpin(null_r, 1) != NX_TP_V_NULL { return 64 } 124 if nx_tp_bytes_in_tier(null_r, NX_TP_TIER_VRAM_HOT) != 0 { return 65 } 125 if nx_tp_count_in_tier(null_r, NX_TP_TIER_VRAM_HOT) != 0 { return 66 } 126 if nx_tp_tier_pressure_q10(null_r, NX_TP_TIER_VRAM_HOT) != 0 { return 67 } 127 128 // 18: unknown id refused 129 if nx_tp_touch(r, 9999, now) != NX_TP_V_INVALID { return 68 } 130 if nx_tp_pin(r, 9999) != NX_TP_V_INVALID { return 69 } 131 if nx_tp_promote(r, 9999, NX_TP_TIER_VRAM_HOT, 0, now) != NX_TP_V_INVALID { return 70 } 132 133 return 0 134}