| 26312 | free(gpu_routed_mid_all); |
| 26313 | free(gpu_shared); |
| 26314 | free(gpu_shared_mid); |
| 26315 | free(gpu_shared_up); |
| 26316 | free(gpu_shared_gate); |
| 26317 | free(gpu_ffn_norm); |
| 26318 | free(gpu_ffn_cur); |
| 26319 | free(gpu_after_attn_hc); |
| 26320 | free(gpu_attn_out); |
| 26321 | free(gpu_kv); |
| 26322 | free(gpu_q); |
| 26323 | free(gpu_attn_norm); |
| 26324 | free(gpu_attn_cur); |
| 26325 | free(routed_q8_midscale); |
| 26326 | free(routed_q8_midq); |
| 26327 | free(routed_q8_xscale); |
| 26328 | free(routed_q8_xq); |
| 26329 | free(routed_midq); |
| 26330 | free(routed_xq); |
| 26331 | free(routed_mid_all); |
| 26332 | free(shared_xscale); |
| 26333 | free(shared_xq); |
| 26334 | free(cpu_after_ffn_hc); |
| 26335 | free(cpu_ffn_out); |
| 26336 | free(cpu_routed); |
| 26337 | free(cpu_shared); |
| 26338 | free(cpu_shared_mid); |
| 26339 | free(cpu_shared_up); |
| 26340 | free(cpu_shared_gate); |
| 26341 | free(cpu_ffn_norm); |
| 26342 | free(cpu_ffn_cur); |
| 26343 | free(cpu_after_attn_hc); |
| 26344 | free(cpu_attn_out); |
| 26345 | free(cpu_heads); |
| 26346 | free(cpu_kv); |
| 26347 | free(cpu_qr_norm); |
| 26348 | free(cpu_q); |
| 26349 | free(cpu_attn_norm); |
| 26350 | free(cpu_attn_cur); |
| 26351 | } |
| 26352 | |
| 26353 | static int metal_graph_decode_test( |
| 26354 | const ds4_model *model, |
| 26355 | const ds4_weights *weights, |
| 26356 | const token_vec *prompt, |
| 26357 | bool quality) { |
| 26358 | if (prompt->len <= 0) { |
| 26359 | fprintf(stderr, "ds4: Metal graph test needs a non-empty prompt\n"); |
| 26360 | return 1; |
| 26361 | } |
| 26362 | |
| 26363 | const int token = prompt->v[0]; |
| 26364 | const ds4_layer_weights *layer = &weights->layer[0]; |
| 26365 | const uint64_t hc_dim = (uint64_t)DS4_N_HC * DS4_N_EMBD; |
| 26366 | const uint64_t q_rank = layer->attn_q_a->dim[1]; |
| 26367 | const uint64_t q_dim = (uint64_t)DS4_N_HEAD * DS4_N_HEAD_DIM; |
| 26368 | const uint64_t expert_in_dim = layer->ffn_gate_exps->dim[0]; |
| 26369 | const uint64_t down_in_dim = layer->ffn_down_exps->dim[0]; |
| 26370 | const uint64_t vocab_dim = weights->output->dim[1]; |
| 26371 | const bool routed_q8_0 = |
no test coverage detected