char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
a2878d30d
char/aliceai-t5-moe
1#ifndef GGML_METAL_IMPL 2#define GGML_METAL_IMPL 3 4// kernel parameters for mat-mat threadgroups 5// 6// TODO: become function constants 7 8#define SZ_SIMDGROUP 16 9#define N_MM_NK 2 10#define N_MM_NK_TOTAL (SZ_SIMDGROUP * N_MM_NK) 11 12#define N_MM_BLOCK_X 4 13#define N_MM_BLOCK_Y 2 14#define N_MM_SIMD_GROUP_X 2 15#define N_MM_SIMD_GROUP_Y 2 16 17// kernel parameters for mat-vec threadgroups 18// 19// N_R0: number of src0 rows to process per simdgroup 20// N_SG: number of simdgroups per threadgroup 21// 22// TODO: for optimal performance, become function of the device and work size 23 24#define N_R0_Q1_0 8 25#define N_SG_Q1_0 2 26 27#define N_R0_Q2_0 8 28#define N_SG_Q2_0 2 29 30#define N_R0_Q4_0 4 31#define N_SG_Q4_0 2 32 33#define N_R0_Q4_1 4 34#define N_SG_Q4_1 2 35 36#define N_R0_Q5_0 4 37#define N_SG_Q5_0 2 38 39#define N_R0_Q5_1 4 40#define N_SG_Q5_1 2 41 42#define N_R0_Q8_0 2 43#define N_SG_Q8_0 4 44 45#define N_R0_MXFP4 2 46#define N_SG_MXFP4 2 47 48#define N_R0_Q2_K 4 49#define N_SG_Q2_K 2 50 51#define N_R0_Q3_K 2 52#define N_SG_Q3_K 2 53 54#define N_R0_Q4_K 2 55#define N_SG_Q4_K 2 56 57#define N_R0_Q5_K 1 58#define N_SG_Q5_K 2 59 60#define N_R0_Q6_K 2 61#define N_SG_Q6_K 2 62 63#define N_R0_IQ1_S 4 64#define N_SG_IQ1_S 2 65#define N_R0_IQ1_S_SPLIT 8 66 67#define N_R0_IQ1_M 4 68#define N_SG_IQ1_M 2 69#define N_R0_IQ1_M_SPLIT 8 70 71#define N_R0_IQ2_XXS 4 72#define N_SG_IQ2_XXS 2 73#define N_R0_IQ2_XXS_SPLIT 8 74 75#define N_R0_IQ2_XS 4 76#define N_SG_IQ2_XS 2 77#define N_R0_IQ2_XS_SPLIT 8 78 79#define N_R0_IQ2_S 4 80#define N_SG_IQ2_S 2 81#define N_R0_IQ2_S_SPLIT 8 82 83#define N_R0_IQ3_XXS 4 84#define N_SG_IQ3_XXS 2 85#define N_R0_IQ3_XXS_SPLIT 8 86 87#define N_R0_IQ3_S 4 88#define N_SG_IQ3_S 2 89#define N_R0_IQ3_S_SPLIT 8 90 91#define N_R0_IQ4_NL 2 92#define N_SG_IQ4_NL 2 93 94#define N_R0_IQ4_XS 2 95#define N_SG_IQ4_XS 2 96 97#define N_R0_TQ2_0 4 98#define N_SG_TQ2_0 2 99 100// function constants offsets 101#define FC_FLASH_ATTN_EXT_PAD 100 102#define FC_FLASH_ATTN_EXT_BLK 200 103#define FC_FLASH_ATTN_EXT 300 104#define FC_FLASH_ATTN_EXT_VEC 400 105#define FC_FLASH_ATTN_EXT_VEC_REDUCE 500 106#define FC_MUL_MV 600 107#define FC_MUL_MM 700 108#define FC_ROPE 800 109#define FC_SSM_CONV 900 110#define FC_SOLVE_TRI 1000 111#define FC_COUNT_EQUAL 1100 112#define FC_UNARY 1200 113#define FC_BIN 1300 114#define FC_SUM_ROWS 1400 115#define FC_UPSCALE 1500 116#define FC_GATED_DELTA_NET 1600 117 118// op-specific constants 119#define OP_FLASH_ATTN_EXT_NQPSG 8 120#define OP_FLASH_ATTN_EXT_NCPSG 64 121 122#define OP_FLASH_ATTN_EXT_VEC_NQPSG 1 123#define OP_FLASH_ATTN_EXT_VEC_NCPSG 32 124 125#define OP_LIGHTNING_INDEXER_DK 128 126#define OP_LIGHTNING_INDEXER_NH 64 127#define OP_LIGHTNING_INDEXER_NHPTG 8 128#define OP_LIGHTNING_INDEXER_NKPSG 8 129#define OP_LIGHTNING_INDEXER_NSG 8 130#define OP_LIGHTNING_INDEXER_NBPTG 8 131 132#define OP_UNARY_NUM_SCALE 10 133#define OP_UNARY_NUM_FILL 11 134#define OP_UNARY_NUM_CLAMP 12 135#define OP_UNARY_NUM_SQR 13 136#define OP_UNARY_NUM_SQRT 14 137#define OP_UNARY_NUM_SIN 15 138#define OP_UNARY_NUM_COS 16 139#define OP_UNARY_NUM_LOG 17 140#define OP_UNARY_NUM_LEAKY_RELU 18 141 142#define OP_UNARY_NUM_TANH 100 143#define OP_UNARY_NUM_RELU 101 144#define OP_UNARY_NUM_SIGMOID 102 145#define OP_UNARY_NUM_GELU 103 146#define OP_UNARY_NUM_GELU_ERF 104 147#define OP_UNARY_NUM_GELU_QUICK 105 148#define OP_UNARY_NUM_SILU 106 149#define OP_UNARY_NUM_ELU 107 150#define OP_UNARY_NUM_NEG 108 151#define OP_UNARY_NUM_ABS 109 152#define OP_UNARY_NUM_SGN 110 153#define OP_UNARY_NUM_STEP 111 154#define OP_UNARY_NUM_HARDSWISH 112 155#define OP_UNARY_NUM_HARDSIGMOID 113 156#define OP_UNARY_NUM_EXP 114 157#define OP_UNARY_NUM_SOFTPLUS 115 158#define OP_UNARY_NUM_EXPM1 116 159#define OP_UNARY_NUM_FLOOR 117 160#define OP_UNARY_NUM_CEIL 118 161#define OP_UNARY_NUM_ROUND 119 162#define OP_UNARY_NUM_TRUNC 120 163#define OP_UNARY_NUM_XIELU 121 164 165#define OP_SUM_ROWS_NUM_SUM_ROWS 10 166#define OP_SUM_ROWS_NUM_MEAN 11 167 168#define OP_SSM_SCAN_SSD_CS 64 // Metal-specific; Chunk Size; 64 is largest multiple of 8 (simdgroup tile) fitting into 32 KiB Metal threadgroup mem limit (~26.75 KiB shared mem; see smem layout comment in kernel_ssm_scan_ssd_mma_f32) 169#define OP_SSM_SCAN_SSD_HD 64 // Metal-specific; Head Dim the MMA kernel is specialized for (Mamba-2); use_mma gates on d_inner == this 170#define OP_SSM_SCAN_SSD_NSG 4 // Metal-specific; Number of SimdGroups per threadgroup; NSG*32 == threads dispatched per threadgroup 171 172// kernel argument structs 173// 174// - element counters (e.g. ne00) typically use int32_t to reduce register usage 175// however, be careful from int overflows when using those in the kernel implementation 176// 177// - strides (e.g. nb00) use uint64_t 178 179typedef struct { 180int32_t ne00 ; 181int32_t ne01 ; 182int32_t ne02 ; 183int32_t ne03 ; 184uint64_t nb00 ; 185uint64_t nb01 ; 186uint64_t nb02 ; 187uint64_t nb03 ; 188int32_t ne10 ; 189int32_t ne11 ; 190int32_t ne12 ; 191int32_t ne13 ; 192uint64_t nb10 ; 193uint64_t nb11 ; 194uint64_t nb12 ; 195uint64_t nb13 ; 196int32_t ne0 ; 197int32_t ne1 ; 198int32_t ne2 ; 199int32_t ne3 ; 200uint64_t nb0 ; 201uint64_t nb1 ; 202uint64_t nb2 ; 203uint64_t nb3 ; 204int32_t dim ; 205}ggml_metal_kargs_concat ; 206 207typedef struct { 208int32_t ne00 ; 209int32_t ne01 ; 210int32_t ne02 ; 211int32_t ne03 ; 212uint64_t nb00 ; 213uint64_t nb01 ; 214uint64_t nb02 ; 215uint64_t nb03 ; 216int32_t ne0 ; 217int32_t ne1 ; 218int32_t ne2 ; 219int32_t ne3 ; 220uint64_t nb0 ; 221uint64_t nb1 ; 222uint64_t nb2 ; 223uint64_t nb3 ; 224float slope ; 225float scale ; 226float bias ; 227float val ; 228float min ; 229float max ; 230}ggml_metal_kargs_unary ; 231 232typedef struct { 233int32_t ne00 ; 234int32_t ne01 ; 235int32_t ne02 ; 236int32_t ne03 ; 237uint64_t nb00 ; 238uint64_t nb01 ; 239uint64_t nb02 ; 240uint64_t nb03 ; 241int32_t ne10 ; 242int32_t ne11 ; 243int32_t ne12 ; 244int32_t ne13 ; 245uint64_t nb10 ; 246uint64_t nb11 ; 247uint64_t nb12 ; 248uint64_t nb13 ; 249int32_t ne0 ; 250int32_t ne1 ; 251int32_t ne2 ; 252int32_t ne3 ; 253uint64_t nb0 ; 254uint64_t nb1 ; 255uint64_t nb2 ; 256uint64_t nb3 ; 257uint64_t offs ; 258uint64_t o1 [8 ]; 259}ggml_metal_kargs_bin ; 260 261typedef struct { 262int64_t ne0 ; 263int64_t ne1 ; 264size_t nb01 ; 265size_t nb02 ; 266size_t nb11 ; 267size_t nb21 ; 268}ggml_metal_kargs_add_id ; 269 270typedef struct { 271int32_t ne00 ; 272int32_t ne01 ; 273int32_t ne02 ; 274int32_t ne03 ; 275uint64_t nb00 ; 276uint64_t nb01 ; 277uint64_t nb02 ; 278uint64_t nb03 ; 279int32_t ne0 ; 280int32_t ne1 ; 281int32_t ne2 ; 282int32_t ne3 ; 283uint64_t nb0 ; 284uint64_t nb1 ; 285uint64_t nb2 ; 286uint64_t nb3 ; 287}ggml_metal_kargs_repeat ; 288 289typedef struct { 290int64_t nk0 ; 291int64_t ne00 ; 292int64_t ne01 ; 293int64_t ne02 ; 294int64_t ne03 ; 295uint64_t nb00 ; 296uint64_t nb01 ; 297uint64_t nb02 ; 298uint64_t nb03 ; 299int64_t ne0 ; 300int64_t ne1 ; 301int64_t ne2 ; 302int64_t ne3 ; 303uint64_t nb0 ; 304uint64_t nb1 ; 305uint64_t nb2 ; 306uint64_t nb3 ; 307}ggml_metal_kargs_cpy ; 308 309typedef struct { 310int64_t ne10 ; 311int64_t ne11 ; 312int64_t ne12 ; 313uint64_t nb10 ; 314uint64_t nb11 ; 315uint64_t nb12 ; 316uint64_t nb13 ; 317uint64_t nb1 ; 318uint64_t nb2 ; 319uint64_t nb3 ; 320uint64_t offs ; 321bool inplace ; 322}ggml_metal_kargs_set ; 323 324typedef struct { 325int32_t ne00 ; 326int32_t ne01 ; 327int32_t ne02 ; 328int32_t ne03 ; 329uint64_t nb00 ; 330uint64_t nb01 ; 331uint64_t nb02 ; 332uint64_t nb03 ; 333int32_t ne0 ; 334int32_t ne1 ; 335int32_t ne2 ; 336int32_t ne3 ; 337uint64_t nb0 ; 338uint64_t nb1 ; 339uint64_t nb2 ; 340uint64_t nb3 ; 341int32_t n_past ; 342int32_t n_dims ; 343int32_t n_offs ; 344int32_t n_ctx_orig ; 345float freq_base ; 346float freq_scale ; 347float ext_factor ; 348float attn_factor ; 349float beta_fast ; 350float beta_slow ; 351int32_t sect_0 ; 352int32_t sect_1 ; 353int32_t sect_2 ; 354int32_t sect_3 ; 355bool src2 ; 356bool inplace ; 357}ggml_metal_kargs_rope ; 358 359typedef struct { 360int32_t ne0 ; 361int32_t ne1 ; 362int32_t ne2 ; 363int32_t ne3 ; 364uint64_t nb0 ; 365uint64_t nb1 ; 366uint64_t nb2 ; 367uint64_t nb3 ; 368int32_t nblocks ; 369}ggml_metal_kargs_flash_attn_ext_kv_f16 ; 370 371typedef struct { 372int32_t ne11 ; 373int32_t ne_12_2 ;// assume K and V are same shape 374int32_t ne_12_3 ; 375uint64_t nb11 ; 376uint64_t nb12 ; 377uint64_t nb13 ; 378uint64_t nb21 ; 379uint64_t nb22 ; 380uint64_t nb23 ; 381int32_t ne31 ; 382int32_t ne32 ; 383int32_t ne33 ; 384uint64_t nb31 ; 385uint64_t nb32 ; 386uint64_t nb33 ; 387}ggml_metal_kargs_flash_attn_ext_pad ; 388 389typedef struct { 390int32_t ne01 ; 391int32_t ne30 ; 392int32_t ne31 ; 393int32_t ne32 ; 394int32_t ne33 ; 395uint64_t nb31 ; 396uint64_t nb32 ; 397uint64_t nb33 ; 398}ggml_metal_kargs_flash_attn_ext_blk ; 399 400typedef struct { 401int32_t ne01 ; 402int32_t ne02 ; 403int32_t ne03 ; 404uint64_t nb01 ; 405uint64_t nb02 ; 406uint64_t nb03 ; 407int32_t ne11 ; 408int32_t ne_12_2 ;// assume K and V are same shape 409int32_t ne_12_3 ; 410int32_t ns10 ; 411uint64_t nb11 ; 412uint64_t nb12 ; 413uint64_t nb13 ; 414int32_t ns20 ; 415uint64_t nb21 ; 416uint64_t nb22 ; 417uint64_t nb23 ; 418int32_t ne31 ; 419int32_t ne32 ; 420int32_t ne33 ; 421uint64_t nb31 ; 422uint64_t nb32 ; 423uint64_t nb33 ; 424int32_t ne1 ; 425int32_t ne2 ; 426int32_t ne3 ; 427float scale ; 428float max_bias ; 429float m0 ; 430float m1 ; 431int32_t n_head_log2 ; 432float logit_softcap ; 433}ggml_metal_kargs_flash_attn_ext ; 434 435typedef struct { 436int32_t ne01 ; 437int32_t ne02 ; 438int32_t ne03 ; 439uint64_t nb01 ; 440uint64_t nb02 ; 441uint64_t nb03 ; 442int32_t ne11 ; 443int32_t ne_12_2 ;// assume K and V are same shape 444int32_t ne_12_3 ; 445int32_t ns10 ; 446uint64_t nb11 ; 447uint64_t nb12 ; 448uint64_t nb13 ; 449int32_t ns20 ; 450uint64_t nb21 ; 451uint64_t nb22 ; 452uint64_t nb23 ; 453int32_t ne31 ; 454int32_t ne32 ; 455int32_t ne33 ; 456uint64_t nb31 ; 457uint64_t nb32 ; 458uint64_t nb33 ; 459int32_t ne1 ; 460int32_t ne2 ; 461int32_t ne3 ; 462float scale ; 463float max_bias ; 464float m0 ; 465float m1 ; 466int32_t n_head_log2 ; 467float logit_softcap ; 468int32_t n_kv_max_padded ; 469}ggml_metal_kargs_flash_attn_ext_vec ; 470 471typedef struct { 472int32_t ne30 ; 473int32_t ne31 ; 474int32_t ne32 ; 475int32_t ne33 ; 476uint64_t nb31 ; 477uint64_t nb32 ; 478uint64_t nb33 ; 479int32_t n_kv_max ; 480int32_t n_kv_max_padded ; 481}ggml_metal_kargs_flash_attn_ext_vec_idx ; 482 483typedef struct { 484int32_t nrows ; 485}ggml_metal_kargs_flash_attn_ext_vec_reduce ; 486 487typedef struct { 488int32_t ne00 ; 489int32_t ne02 ; 490uint64_t nb01 ; 491uint64_t nb02 ; 492uint64_t nb03 ; 493int32_t ne12 ; 494uint64_t nb10 ; 495uint64_t nb11 ; 496uint64_t nb12 ; 497uint64_t nb13 ; 498int32_t ne0 ; 499int32_t ne1 ; 500int16_t r2 ; 501int16_t r3 ; 502}ggml_metal_kargs_mul_mm ; 503 504typedef struct { 505int32_t ne00 ; 506int32_t ne01 ; 507int32_t ne02 ; 508uint64_t nb00 ; 509uint64_t nb01 ; 510uint64_t nb02 ; 511uint64_t nb03 ; 512int32_t ne10 ; 513int32_t ne11 ; 514int32_t ne12 ; 515uint64_t nb10 ; 516uint64_t nb11 ; 517uint64_t nb12 ; 518uint64_t nb13 ; 519int32_t ne0 ; 520int32_t ne1 ; 521int32_t nr0 ; 522int16_t r2 ; 523int16_t r3 ; 524}ggml_metal_kargs_mul_mv ; 525 526typedef struct { 527int32_t ne00 ; 528int32_t ne01 ; 529int32_t ne02 ; 530uint64_t nb00 ; 531uint64_t nb01 ; 532uint64_t nb02 ; 533uint64_t nb03 ; 534int32_t ne10 ; 535int32_t ne11 ; 536int32_t ne12 ; 537uint64_t nb10 ; 538uint64_t nb11 ; 539uint64_t nb12 ; 540uint64_t nb13 ; 541int32_t ne0 ; 542int32_t ne1 ; 543int16_t r2 ; 544int16_t r3 ; 545}ggml_metal_kargs_mul_mv_ext ; 546 547typedef struct { 548int32_t ne02 ; 549int32_t ne10 ; 550int32_t ne11 ;// n_expert_used (bcast) 551uint64_t nb11 ; 552uint64_t nb12 ; 553int32_t ne21 ;// n_tokens 554int32_t ne20 ;// n_expert_used 555uint64_t nb21 ; 556}ggml_metal_kargs_mul_mm_id_map0 ; 557 558typedef struct { 559int32_t ne00 ; 560int32_t ne02 ; 561uint64_t nb01 ; 562uint64_t nb02 ; 563uint64_t nb03 ; 564int32_t ne11 ; 565uint64_t nb10 ; 566uint64_t nb11 ; 567uint64_t nb12 ; 568uint64_t nb13 ; 569int32_t ne20 ; 570int32_t ne21 ; 571int32_t ne0 ; 572int32_t ne1 ; 573int16_t r2 ; 574int16_t r3 ; 575}ggml_metal_kargs_mul_mm_id ; 576 577typedef struct { 578int32_t nei0 ; 579int32_t nei1 ; 580uint64_t nbi1 ; 581int32_t ne00 ; 582int32_t ne01 ; 583int32_t ne02 ; 584uint64_t nb00 ; 585uint64_t nb01 ; 586uint64_t nb02 ; 587int32_t ne10 ; 588int32_t ne11 ; 589int32_t ne12 ; 590int32_t ne13 ; 591uint64_t nb10 ; 592uint64_t nb11 ; 593uint64_t nb12 ; 594int32_t ne0 ; 595int32_t ne1 ; 596uint64_t nb1 ; 597int32_t nr0 ; 598}ggml_metal_kargs_mul_mv_id ; 599 600// NORM 601// RMS_NORM 602typedef struct { 603int32_t ne00 ; 604int32_t ne00_t ; 605uint64_t nb1 ; 606uint64_t nb2 ; 607uint64_t nb3 ; 608float eps ; 609int32_t nef1 [3 ]; 610int32_t nef2 [3 ]; 611int32_t nef3 [3 ]; 612uint64_t nbf1 [3 ]; 613uint64_t nbf2 [3 ]; 614uint64_t nbf3 [3 ]; 615}ggml_metal_kargs_norm ; 616 617typedef struct { 618int32_t ne00 ; 619int32_t ne01 ; 620int32_t ne02 ; 621int32_t ne03 ; 622uint64_t nb00 ; 623uint64_t nb01 ; 624uint64_t nb02 ; 625uint64_t nb03 ; 626int32_t ne0 ; 627int32_t ne1 ; 628int32_t ne2 ; 629int32_t ne3 ; 630uint64_t nb0 ; 631uint64_t nb1 ; 632uint64_t nb2 ; 633uint64_t nb3 ; 634float eps ; 635}ggml_metal_kargs_l2_norm ; 636 637typedef struct { 638int64_t ne00 ; 639int64_t ne01 ; 640int64_t ne02 ; 641uint64_t nb00 ; 642uint64_t nb01 ; 643uint64_t nb02 ; 644int32_t ngrp ; 645float eps ; 646}ggml_metal_kargs_group_norm ; 647 648typedef struct { 649int32_t IC ; 650int32_t IL ; 651int32_t K ; 652int32_t s0 ; 653uint64_t nb0 ; 654uint64_t nb1 ; 655}ggml_metal_kargs_conv_transpose_1d ; 656 657typedef struct { 658int32_t T_in ; 659int32_t T_out ; 660int32_t OC ; 661int32_t K ; 662int32_t K_OC ; 663int32_t s0 ; 664int32_t p0 ; 665}ggml_metal_kargs_col2im_1d ; 666 667typedef struct { 668int32_t T ; 669int32_t C ; 670}ggml_metal_kargs_snake ; 671 672typedef struct { 673int32_t IC ; 674int32_t IH ; 675int32_t IW ; 676int32_t KH ; 677int32_t KW ; 678int32_t OC ; 679int32_t s0 ; 680uint64_t nb0 ; 681uint64_t nb1 ; 682uint64_t nb2 ; 683uint64_t nb3 ; 684}ggml_metal_kargs_conv_transpose_2d ; 685 686typedef struct { 687uint64_t nb00 ; 688uint64_t nb01 ; 689uint64_t nb02 ; 690uint64_t nb03 ; 691uint64_t nb10 ; 692uint64_t nb11 ; 693uint64_t nb12 ; 694uint64_t nb13 ; 695uint64_t nb0 ; 696uint64_t nb1 ; 697uint64_t nb2 ; 698uint64_t nb3 ; 699int32_t IW ; 700int32_t IH ; 701int32_t KW ; 702int32_t KH ; 703int32_t IC ; 704int32_t OC ; 705int32_t OW ; 706int32_t OH ; 707int32_t N ; 708int32_t s0 ; 709int32_t s1 ; 710int32_t p0 ; 711int32_t p1 ; 712int32_t d0 ; 713int32_t d1 ; 714}ggml_metal_kargs_conv_2d ; 715 716typedef struct { 717uint64_t nb00 ;// kernel strides 718uint64_t nb01 ; 719uint64_t nb02 ; 720uint64_t nb10 ;// input strides 721uint64_t nb11 ; 722uint64_t nb12 ; 723uint64_t nb13 ; 724uint64_t nb0 ;// output strides 725uint64_t nb1 ; 726uint64_t nb2 ; 727uint64_t nb3 ; 728int32_t IW ;// input width 729int32_t IH ;// input height 730int32_t KW ;// kernel width 731int32_t KH ;// kernel height 732int32_t C ;// channels (IC == OC for depthwise) 733int32_t OW ;// output width 734int32_t OH ;// output height 735int32_t N ;// batch size 736int32_t s0 ;// stride x 737int32_t s1 ;// stride y 738int32_t p0 ;// padding x 739int32_t p1 ;// padding y 740int32_t d0 ;// dilation x 741int32_t d1 ;// dilation y 742}ggml_metal_kargs_conv_2d_dw ; 743 744typedef struct { 745uint64_t ofs0 ; 746uint64_t ofs1 ; 747int32_t IW ; 748int32_t IH ; 749int32_t CHW ; 750int32_t s0 ; 751int32_t s1 ; 752int32_t p0 ; 753int32_t p1 ; 754int32_t d0 ; 755int32_t d1 ; 756int32_t N ; 757int32_t KH ; 758int32_t KW ; 759int32_t KHW ;// KH * KW, pre-computed on CPU to save GPU resources 760}ggml_metal_kargs_im2col ; 761 762typedef struct { 763int32_t IW ; 764int32_t IH ; 765int32_t ID ; 766int32_t OW ; 767int32_t OH ; 768int32_t OD ; 769int32_t KW ; 770int32_t KH ; 771int32_t KD ; 772int32_t s0 ; 773int32_t s1 ; 774int32_t s2 ; 775int32_t p0 ; 776int32_t p1 ; 777int32_t p2 ; 778int32_t d0 ; 779int32_t d1 ; 780int32_t d2 ; 781int32_t IC ; 782int32_t N ; 783int32_t OC ; 784uint64_t nb00 ; 785uint64_t nb01 ; 786uint64_t nb02 ; 787uint64_t nb03 ; 788uint64_t nb10 ; 789uint64_t nb11 ; 790uint64_t nb12 ; 791uint64_t nb13 ; 792uint64_t nb0 ; 793uint64_t nb1 ; 794uint64_t nb2 ; 795uint64_t nb3 ; 796}ggml_metal_kargs_conv_3d ; 797 798typedef struct { 799int32_t ne00 ; 800uint64_t nb01 ; 801int32_t ne10 ; 802uint64_t nb11 ; 803int32_t ne0 ; 804uint64_t nb1 ; 805int32_t i00 ; 806int32_t i10 ; 807float alpha ; 808float limit ; 809}ggml_metal_kargs_glu ; 810 811typedef struct { 812uint64_t np ; 813}ggml_metal_kargs_sum ; 814 815typedef struct { 816int64_t ne00 ; 817int64_t ne01 ; 818int64_t ne02 ; 819int64_t ne03 ; 820uint64_t nb00 ; 821uint64_t nb01 ; 822uint64_t nb02 ; 823uint64_t nb03 ; 824int64_t ne0 ; 825int64_t ne1 ; 826int64_t ne2 ; 827int64_t ne3 ; 828uint64_t nb0 ; 829uint64_t nb1 ; 830uint64_t nb2 ; 831uint64_t nb3 ; 832}ggml_metal_kargs_sum_rows ; 833 834typedef struct { 835int64_t ne00 ; 836int64_t ne01 ; 837int64_t ne02 ; 838int64_t ne03 ; 839uint64_t nb00 ; 840uint64_t nb01 ; 841uint64_t nb02 ; 842uint64_t nb03 ; 843int64_t net0 ; 844int64_t net1 ; 845int64_t net2 ; 846int64_t net3 ; 847uint64_t nbt0 ; 848uint64_t nbt1 ; 849uint64_t nbt2 ; 850uint64_t nbt3 ; 851bool outb ; 852}ggml_metal_kargs_cumsum_blk ; 853 854typedef struct { 855int64_t ne00 ; 856int64_t ne01 ; 857int64_t ne02 ; 858int64_t ne03 ; 859uint64_t nb00 ; 860uint64_t nb01 ; 861uint64_t nb02 ; 862uint64_t nb03 ; 863int64_t net0 ; 864int64_t net1 ; 865int64_t net2 ; 866int64_t net3 ; 867uint64_t nbt0 ; 868uint64_t nbt1 ; 869uint64_t nbt2 ; 870uint64_t nbt3 ; 871}ggml_metal_kargs_cumsum_add ; 872 873typedef struct { 874int32_t ne00 ; 875int32_t ne01 ; 876int32_t ne02 ; 877uint64_t nb01 ; 878uint64_t nb02 ; 879uint64_t nb03 ; 880int32_t ne11 ; 881int32_t ne12 ; 882int32_t ne13 ; 883uint64_t nb11 ; 884uint64_t nb12 ; 885uint64_t nb13 ; 886uint64_t nb1 ; 887uint64_t nb2 ; 888uint64_t nb3 ; 889float scale ; 890float max_bias ; 891float m0 ; 892float m1 ; 893int32_t n_head_log2 ; 894}ggml_metal_kargs_soft_max ; 895 896typedef struct { 897int64_t ne00 ; 898int64_t ne01 ; 899int64_t ne02 ; 900uint64_t nb00 ; 901uint64_t nb01 ; 902uint64_t nb02 ; 903int64_t ne10 ; 904int64_t ne11 ; 905uint64_t nb10 ; 906uint64_t nb11 ; 907int64_t ne0 ; 908int64_t ne1 ; 909int64_t ne2 ; 910uint64_t nb0 ; 911uint64_t nb1 ; 912uint64_t nb2 ; 913}ggml_metal_kargs_ssm_conv ; 914 915typedef struct { 916int64_t d_state ; 917int64_t d_inner ; 918int64_t n_head ; 919int64_t n_group ; 920int64_t n_seq_tokens ; 921int64_t n_seq_tokens_total ; 922int64_t token_offset ; 923int64_t n_seqs ; 924int64_t K ; 925uint64_t s_off ; 926uint64_t nb00 ; 927uint64_t nb01 ; 928uint64_t nb02 ; 929uint64_t nb03 ; 930uint64_t nb10 ; 931uint64_t nb11 ; 932uint64_t nb12 ; 933uint64_t ns12 ; 934uint64_t nb13 ; 935uint64_t nb20 ; 936uint64_t nb21 ; 937uint64_t ns21 ; 938uint64_t nb22 ; 939int64_t ne30 ; 940uint64_t nb31 ; 941uint64_t nb41 ; 942uint64_t nb42 ; 943uint64_t ns42 ; 944uint64_t nb43 ; 945uint64_t nb51 ; 946uint64_t nb52 ; 947uint64_t ns52 ; 948uint64_t nb53 ; 949uint64_t nb0 ; 950}ggml_metal_kargs_ssm_scan ; 951 952typedef struct { 953int32_t ne00 ; 954int32_t ne01 ; 955int32_t ne02 ; 956int32_t ne03 ; 957uint64_t nb00 ; 958uint64_t nb01 ; 959uint64_t nb02 ; 960uint64_t nb03 ; 961int32_t ne10 ; 962int32_t ne11 ; 963int32_t ne12 ; 964int32_t ne13 ; 965uint64_t nb10 ; 966uint64_t nb11 ; 967uint64_t nb12 ; 968uint64_t nb13 ; 969int32_t ne20 ; 970int32_t ne21 ; 971int32_t ne22 ; 972int32_t ne23 ; 973uint64_t nb20 ; 974uint64_t nb21 ; 975uint64_t nb22 ; 976uint64_t nb23 ; 977int32_t ns02 ; 978int32_t ns12 ; 979int32_t ns22 ; 980int32_t ne0 ; 981int32_t ne1 ; 982int32_t ne2 ; 983int32_t ne3 ; 984uint64_t nb0 ; 985uint64_t nb1 ; 986uint64_t nb2 ; 987uint64_t nb3 ; 988uint64_t nb_out ;// 0 => snapshots are appended after the attn scores (unfused) 989}ggml_metal_kargs_gated_delta_net ; 990 991typedef struct { 992int32_t ne00 ; 993int32_t ne01 ; 994int32_t ne02 ; 995int32_t ne03 ; 996uint64_t nb00 ; 997uint64_t nb01 ; 998uint64_t nb02 ; 999uint64_t nb03 ; 1000int32_t ne10 ; 1001int32_t ne11 ; 1002int32_t ne12 ; 1003int32_t ne13 ; 1004uint64_t nb10 ; 1005uint64_t nb11 ; 1006uint64_t nb12 ; 1007uint64_t nb13 ; 1008int32_t ne0 ; 1009int32_t ne1 ; 1010int32_t ne2 ; 1011int32_t ne3 ; 1012uint64_t nb0 ; 1013uint64_t nb1 ; 1014uint64_t nb2 ; 1015uint64_t nb3 ; 1016}ggml_metal_kargs_solve_tri ; 1017 1018typedef struct { 1019int32_t ne00t ; 1020int32_t ne00 ; 1021uint64_t nb01 ; 1022uint64_t nb02 ; 1023uint64_t nb03 ; 1024int32_t ne10 ; 1025uint64_t nb10 ; 1026uint64_t nb11 ; 1027uint64_t nb12 ; 1028uint64_t nb1 ; 1029uint64_t nb2 ; 1030uint64_t nb3 ; 1031}ggml_metal_kargs_get_rows ; 1032 1033typedef struct { 1034int32_t nk0 ; 1035int32_t ne01 ; 1036uint64_t nb01 ; 1037uint64_t nb02 ; 1038uint64_t nb03 ; 1039int32_t ne11 ; 1040int32_t ne12 ; 1041uint64_t nb10 ; 1042uint64_t nb11 ; 1043uint64_t nb12 ; 1044uint64_t nb1 ; 1045uint64_t nb2 ; 1046uint64_t nb3 ; 1047}ggml_metal_kargs_set_rows ; 1048 1049typedef struct { 1050int32_t ne00 ; 1051int32_t ne01 ; 1052int32_t ne02 ; 1053int32_t ne03 ; 1054uint64_t nb00 ; 1055uint64_t nb01 ; 1056uint64_t nb02 ; 1057uint64_t nb03 ; 1058int32_t ne0 ; 1059int32_t ne1 ; 1060int32_t ne2 ; 1061int32_t ne3 ; 1062uint64_t nb0 ; 1063uint64_t nb1 ; 1064uint64_t nb2 ; 1065uint64_t nb3 ; 1066}ggml_metal_kargs_diag ; 1067 1068typedef struct { 1069int64_t ne00 ; 1070int64_t ne01 ; 1071int64_t ne02 ; 1072int64_t ne03 ; 1073uint64_t nb00 ; 1074uint64_t nb01 ; 1075uint64_t nb02 ; 1076uint64_t nb03 ; 1077int64_t ne0 ; 1078int64_t ne1 ; 1079int64_t ne2 ; 1080int64_t ne3 ; 1081uint64_t nb0 ; 1082uint64_t nb1 ; 1083uint64_t nb2 ; 1084uint64_t nb3 ; 1085float sf0 ; 1086float sf1 ; 1087float sf2 ; 1088float sf3 ; 1089float poffs ; 1090}ggml_metal_kargs_upscale ; 1091 1092typedef struct { 1093int64_t ne00 ; 1094int64_t ne01 ; 1095int64_t ne02 ; 1096int64_t ne03 ; 1097uint64_t nb00 ; 1098uint64_t nb01 ; 1099uint64_t nb02 ; 1100uint64_t nb03 ; 1101int64_t ne0 ; 1102int64_t ne1 ; 1103int64_t ne2 ; 1104int64_t ne3 ; 1105uint64_t nb0 ; 1106uint64_t nb1 ; 1107uint64_t nb2 ; 1108uint64_t nb3 ; 1109}ggml_metal_kargs_pad ; 1110 1111typedef struct { 1112int64_t ne00 ; 1113int64_t ne01 ; 1114int64_t ne02 ; 1115int64_t ne03 ; 1116uint64_t nb00 ; 1117uint64_t nb01 ; 1118uint64_t nb02 ; 1119uint64_t nb03 ; 1120int64_t ne0 ; 1121int64_t ne1 ; 1122int64_t ne2 ; 1123int64_t ne3 ; 1124uint64_t nb0 ; 1125uint64_t nb1 ; 1126uint64_t nb2 ; 1127uint64_t nb3 ; 1128int32_t p0 ; 1129int32_t p1 ; 1130}ggml_metal_kargs_pad_reflect_1d ; 1131 1132typedef struct { 1133int64_t ne00 ; 1134int64_t ne01 ; 1135int64_t ne02 ; 1136int64_t ne03 ; 1137uint64_t nb00 ; 1138uint64_t nb01 ; 1139uint64_t nb02 ; 1140uint64_t nb03 ; 1141int64_t ne0 ; 1142int64_t ne1 ; 1143int64_t ne2 ; 1144int64_t ne3 ; 1145uint64_t nb0 ; 1146uint64_t nb1 ; 1147uint64_t nb2 ; 1148uint64_t nb3 ; 1149int32_t s0 ; 1150int32_t s1 ; 1151int32_t s2 ; 1152int32_t s3 ; 1153}ggml_metal_kargs_roll ; 1154 1155typedef struct { 1156uint64_t nb1 ; 1157int dim ; 1158int max_period ; 1159}ggml_metal_kargs_timestep_embedding ; 1160 1161typedef struct { 1162int32_t ne00 ; 1163int32_t ne01 ; 1164int32_t ne02 ; 1165int32_t ne03 ; 1166uint64_t nb00 ; 1167uint64_t nb01 ; 1168uint64_t nb02 ; 1169uint64_t nb03 ; 1170int32_t ne0 ; 1171int32_t ne1 ; 1172int32_t ne2 ; 1173int32_t ne3 ; 1174uint64_t nb0 ; 1175uint64_t nb1 ; 1176uint64_t nb2 ; 1177uint64_t nb3 ; 1178}ggml_metal_kargs_tri ; 1179 1180typedef struct { 1181int32_t ne00 ; 1182int32_t ne01 ; 1183int32_t ne02 ; 1184int32_t ne03 ; 1185uint64_t nb00 ; 1186uint64_t nb01 ; 1187uint64_t nb02 ; 1188uint64_t nb03 ; 1189int32_t ne0 ; 1190int32_t ne1 ; 1191int32_t ne2 ; 1192int32_t ne3 ; 1193int32_t top_k ; 1194}ggml_metal_kargs_argsort ; 1195 1196typedef struct { 1197int64_t ne00 ; 1198int64_t ne01 ; 1199int64_t ne02 ; 1200int64_t ne03 ; 1201uint64_t nb00 ; 1202uint64_t nb01 ; 1203uint64_t nb02 ; 1204uint64_t nb03 ; 1205int32_t ne0 ; 1206int32_t ne1 ; 1207int32_t ne2 ; 1208int32_t ne3 ; 1209int32_t top_k ; 1210int32_t len ; 1211}ggml_metal_kargs_argsort_merge ; 1212 1213typedef struct { 1214int32_t ne00 ;// number of columns (elements per row) 1215int32_t ne01 ;// rows 1216int32_t ne02 ; 1217int32_t ne03 ; 1218uint64_t nb01 ;// row stride in src0 1219uint64_t nb02 ; 1220uint64_t nb03 ; 1221int32_t top_k ;// k 1222}ggml_metal_kargs_top_k ; 1223 1224typedef struct { 1225int32_t nrows ; 1226}ggml_metal_kargs_fwht ; 1227 1228typedef struct { 1229int64_t ne0 ; 1230float start ; 1231float step ; 1232}ggml_metal_kargs_arange ; 1233 1234typedef struct { 1235int64_t val ; 1236}ggml_metal_kargs_memset ; 1237 1238typedef struct { 1239int32_t n_kv ; 1240int32_t n_batch ; 1241int32_t mask_ne3 ; 1242uint64_t nb1 ; 1243uint64_t nb3 ; 1244uint64_t nbq1 ; 1245uint64_t nbq2 ; 1246uint64_t nbq3 ; 1247uint64_t nbk2 ; 1248uint64_t nbk3 ; 1249uint64_t nbw1 ; 1250uint64_t nbw3 ; 1251uint64_t nbm1 ; 1252uint64_t nbm3 ; 1253}ggml_metal_kargs_lightning_indexer ; 1254 1255typedef struct { 1256int32_t n_tokens ; 1257int32_t n_iter ; 1258uint64_t nb_m0 ; 1259uint64_t nb_m1 ; 1260uint64_t nb_s0 ; 1261uint64_t nb_b0 ; 1262uint64_t nb_d0 ; 1263uint64_t nb_d1 ; 1264uint64_t nb_d2 ; 1265float eps ; 1266}ggml_metal_kargs_dsv4_hc_comb ; 1267 1268typedef struct { 1269int32_t n_embd ; 1270int32_t n_tokens ; 1271uint64_t nb_x0 ; 1272uint64_t nb_x1 ; 1273uint64_t nb_x2 ; 1274uint64_t nb_w0 ; 1275uint64_t nb_w1 ; 1276uint64_t nb_d0 ; 1277uint64_t nb_d1 ; 1278}ggml_metal_kargs_dsv4_hc_pre ; 1279 1280typedef struct { 1281int32_t n_embd ; 1282int32_t n_tokens ; 1283uint64_t nb_x0 ; 1284uint64_t nb_x1 ; 1285uint64_t nb_r0 ; 1286uint64_t nb_r1 ; 1287uint64_t nb_r2 ; 1288uint64_t nb_p0 ; 1289uint64_t nb_p1 ; 1290uint64_t nb_c0 ; 1291uint64_t nb_c1 ; 1292uint64_t nb_c2 ; 1293uint64_t nb_d0 ; 1294uint64_t nb_d1 ; 1295uint64_t nb_d2 ; 1296}ggml_metal_kargs_dsv4_hc_post ; 1297 1298typedef struct { 1299int32_t ne00 ; 1300int32_t ne01 ; 1301int32_t ne02 ; 1302int32_t ne03 ; 1303uint64_t nb00 ; 1304uint64_t nb01 ; 1305uint64_t nb02 ; 1306uint64_t nb03 ; 1307uint64_t nb10 ; 1308uint64_t nb11 ; 1309uint64_t nb12 ; 1310uint64_t nb13 ; 1311}ggml_metal_kargs_count_equal ; 1312 1313typedef struct { 1314int32_t k0 ; 1315int32_t k1 ; 1316int32_t s0 ; 1317int32_t s1 ; 1318int32_t p0 ; 1319int32_t p1 ; 1320int64_t IH ; 1321int64_t IW ; 1322int64_t OH ; 1323int64_t OW ; 1324int64_t np ; 1325}ggml_metal_kargs_pool_2d ; 1326 1327typedef struct { 1328int32_t k0 ; 1329int32_t s0 ; 1330int32_t p0 ; 1331int64_t IW ; 1332int64_t OW ; 1333int64_t np ; 1334}ggml_metal_kargs_pool_1d ; 1335 1336typedef struct { 1337int64_t ne00 ; 1338uint64_t nb01 ; 1339}ggml_metal_kargs_argmax ; 1340 1341typedef struct { 1342int64_t np ; 1343}ggml_metal_kargs_opt_step_adamw ; 1344 1345typedef struct { 1346int64_t np ; 1347}ggml_metal_kargs_opt_step_sgd ; 1348 1349typedef struct { 1350int64_t ne ; 1351}ggml_metal_kargs_silu_back ; 1352 1353#endif // GGML_METAL_IMPL