71 lines
5.6 KiB
JSON
71 lines
5.6 KiB
JSON
{
|
|
"schema": "vortex-exact-attention-architecture-model",
|
|
"version": 1,
|
|
"status": "projected_not_measured",
|
|
"baseline": {
|
|
"device": "NVIDIA GB10", "architecture": "sm_121a", "tokens": 37810,
|
|
"heads": 56, "head_dimension": 128, "mainloop_p50_ms": 237.089,
|
|
"grid": [296, 56, 1], "block": [32, 4, 1], "kv_iterations": 591,
|
|
"stages": 2, "registers_per_thread": 255, "dynamic_shared_kib": 32,
|
|
"occupancy_percent": [16.65, 16.83], "no_eligible_cycles_percent": 63.53,
|
|
"l2_hit_percent": 98.85, "memory_throughput_percent": 31.74
|
|
},
|
|
"hard_gates": {
|
|
"mainloop_model_must_beat_ms": 220, "preferred_model_below_ms": 190,
|
|
"byte_exact": true, "material_score_tensor": false,
|
|
"material_local_spills": false,
|
|
"kv_tile_order": "strictly_increasing_0_through_590",
|
|
"pv_accumulation": "two_ordered_k32_fp16_mma_then_ordered_fp32_ro_add"
|
|
},
|
|
"model_basis": {
|
|
"kind": "heuristic_rejection_screen",
|
|
"formula": "baseline minus assumed recovered fraction of no-eligible region plus handoff budget",
|
|
"exact_preparation_components_ms": {"p1_entry": 12.33, "k_mean": 2.37, "k_quant": 3.83, "p2_v": 6.39},
|
|
"exact_preparation_ms": [25, 28],
|
|
"unresolved": ["compiled registers", "named barrier latency", "INT8_FP8 overlap", "DSM placement and latency"]
|
|
},
|
|
"candidates": [
|
|
{
|
|
"id": "VEA-A", "name": "Q64 split-D intra-CTA pipeline", "recommended_order": 3,
|
|
"geometry": {"q": 64, "k": 64, "d": 128, "threads": 256, "warps": 8},
|
|
"ownership": {"qk_fragments": "warps_1_2", "m_d": "warps_1_2", "output_accumulation": "warps_3_6_split_d64", "load_control": "warps_0_7"},
|
|
"handoff": {"mechanism": "two_slot_shared_ring_named_barriers", "payload": "fp8_probability_bytes_plus_fp32_ro_rescale", "bounded_tile_local": true, "consumer_order": "strict_epoch_order", "qk_and_pv_fragments_simultaneously_live": true, "same_warp": false},
|
|
"registers_per_thread": {"load": [32, 48], "qk_softmax": [96, 128], "pv_output": [88, 120], "control": [32, 64]},
|
|
"shared_kib": {"q": 8, "k_double": 16, "v_double": 16, "score_double": 8, "metadata": [3, 4], "total": [51, 52]},
|
|
"registers_per_cta_uniform_projection": 32768,
|
|
"resident_ctas_per_sm_projected": 1, "synchronization_ms_projected": [8, 18],
|
|
"recovered_no_eligible_fraction": [0.22, 0.35],
|
|
"mainloop_ms_projected": [192, 222], "complete_attention_ms_projected": [217, 250],
|
|
"capability_dependencies": ["named_barrier_cost", "INT8_FP8_overlap"],
|
|
"structural_difference": "RO is removed from QK warps and split by D; m/d and scores are removed from PV warps"
|
|
},
|
|
{
|
|
"id": "VEA-B", "name": "Q128 paired QK/PV owner pipeline", "recommended_order": 1,
|
|
"geometry": {"q": 128, "k": 64, "d": 128, "threads": 320, "warps": 10},
|
|
"ownership": {"qk_fragments": "warps_2_5", "m_d": "warps_2_5", "output_accumulation": "warps_6_9", "load_control": "warps_0_1"},
|
|
"handoff": {"mechanism": "four_paired_two_slot_shared_rings_named_barriers", "payload": "fp8_probability_bytes_plus_fp32_ro_rescale_and_final_reciprocal", "bounded_tile_local": true, "consumer_order": "strict_epoch_order", "qk_and_pv_fragments_simultaneously_live": true, "same_warp": false},
|
|
"registers_per_thread": {"k_producer": [32, 48], "v_producer": [40, 56], "qk_softmax": [96, 128], "pv_output": [144, 176]},
|
|
"logical_role_weighted_registers": 39000, "registers_per_cta_uniform_projection": 56320, "compiled_register_limit_per_thread": 200,
|
|
"shared_kib": {"unaliased": [66, 68], "alias_saving": 16, "total": [50, 52]},
|
|
"resident_ctas_per_sm_projected": 1, "synchronization_ms_projected": [6, 15],
|
|
"recovered_no_eligible_fraction": [0.30, 0.42],
|
|
"mainloop_ms_projected": [180, 207], "complete_attention_ms_projected": [205, 235],
|
|
"capability_dependencies": ["compiled_registers_at_or_below_200", "zero_material_spills", "named_barrier_cost", "INT8_FP8_overlap"],
|
|
"structural_difference": "QK/softmax and RO/PV have permanent disjoint owners; P1/P2 may feed slots but are not standalone boundaries"
|
|
},
|
|
{
|
|
"id": "VEA-C", "name": "two-CTA DSM ownership split", "recommended_order": 2,
|
|
"geometry": {"q": 128, "k": 64, "d": 128, "ctas": 2, "threads_total": 384, "warps_total": 12},
|
|
"ownership": {"qk_fragments": "producer_cta_warps_1_4", "m_d": "producer_cta_warps_1_4", "output_accumulation": "consumer_cta_warps_1_4", "load_control": "producer_and_consumer_warps_0_5"},
|
|
"handoff": {"mechanism": "two_slot_dsm_ring_cluster_barriers", "payload": "fp8_probability_bytes_plus_fp32_ro_rescale_and_final_reciprocal", "bounded_tile_local": true, "consumer_order": "strict_epoch_order", "qk_and_pv_fragments_simultaneously_live": true, "same_warp": false, "same_cta": false},
|
|
"registers_per_thread": {"producer_load_publish": [32, 48], "qk_softmax": [96, 128], "consumer_v": [40, 56], "pv_output": [144, 176], "consumer_store": [40, 64]},
|
|
"registers_per_cluster_projected": [50000, 60000], "shared_kib": {"producer": 50, "consumer": 18, "cluster_total": 68},
|
|
"resident_cluster_projection": "unverified", "synchronization_ms_projected": [12, 30],
|
|
"recovered_no_eligible_fraction": [0.38, 0.50],
|
|
"mainloop_ms_projected": [174, 210], "complete_attention_ms_projected": [199, 238],
|
|
"capability_dependencies": ["DSM_support", "cluster_simultaneous_residency", "DSM_round_trip_latency", "INT8_FP8_overlap"],
|
|
"structural_difference": "QK/softmax state and RO/PV state reside in separate CTAs and cross an explicit DSM byte handoff"
|
|
}
|
|
],
|
|
"decision": {"recommended_prototype": "VEA-B", "fallback": "VEA-A", "conditional_second": "VEA-C", "kernel_implementation_started": false, "production_dispatch_changed": false}
|
|
}
|