toy 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2107) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1124 -0
  3. data/LICENSE +21 -0
  4. data/Makefile +2022 -0
  5. data/README.md +154 -0
  6. data/bin/toy +10 -0
  7. data/lib/toy/compute.rb +135 -0
  8. data/lib/toy/compute_cuda.rb +104 -0
  9. data/lib/toy/compute_metal.rb +97 -0
  10. data/lib/toy/core/cli/describe.rb +188 -0
  11. data/lib/toy/core/cli/eval.rb +385 -0
  12. data/lib/toy/core/cli/exit_codes.rb +15 -0
  13. data/lib/toy/core/cli/fetch.rb +238 -0
  14. data/lib/toy/core/cli/infer.rb +268 -0
  15. data/lib/toy/core/cli/install.rb +228 -0
  16. data/lib/toy/core/cli/list.rb +86 -0
  17. data/lib/toy/core/cli/manifest.rb +49 -0
  18. data/lib/toy/core/cli/new.rb +594 -0
  19. data/lib/toy/core/cli/serve.rb +237 -0
  20. data/lib/toy/core/cli/train.rb +471 -0
  21. data/lib/toy/core/cli.rb +165 -0
  22. data/lib/toy/core/config.rb +64 -0
  23. data/lib/toy/core/gguf_meta.rb +161 -0
  24. data/lib/toy/core/model_scan.rb +221 -0
  25. data/lib/toy/core/run_log.rb +94 -0
  26. data/lib/toy/core/toy_root.rb +95 -0
  27. data/lib/toy/dev/toy_card.rb +299 -0
  28. data/lib/toy/dev/toy_describe_flow.rb +412 -0
  29. data/lib/toy/dev/toy_logprobs.rb +86 -0
  30. data/lib/toy/dev/toy_tap.rb +183 -0
  31. data/lib/toy/dev/toy_token_drift.rb +121 -0
  32. data/lib/toy/ffi/tinynn.rb +1491 -0
  33. data/lib/toy/ffi/tinynn_cuda.rb +1124 -0
  34. data/lib/toy/ffi/tinynn_metal.rb +359 -0
  35. data/lib/toy/ffi_manifest.rb +84 -0
  36. data/lib/toy/io/bpe.rb +325 -0
  37. data/lib/toy/io/gguf_kv.rb +35 -0
  38. data/lib/toy/io/gguf_load.rb +331 -0
  39. data/lib/toy/io/loaders/toy_gpt2_loader.rb +70 -0
  40. data/lib/toy/io/loaders/toy_smollm2_loader.rb +754 -0
  41. data/lib/toy/io/model_index.rb +206 -0
  42. data/lib/toy/io/run_bundle.rb +280 -0
  43. data/lib/toy/io/tokenizer.rb +613 -0
  44. data/lib/toy/io/toy_corpus_loader.rb +52 -0
  45. data/lib/toy/io/toy_events.rb +56 -0
  46. data/lib/toy/io/toy_image_loader.rb +48 -0
  47. data/lib/toy/llm/adamw.rb +169 -0
  48. data/lib/toy/llm/archs/llama_arch.rb +233 -0
  49. data/lib/toy/llm/archs/llama_arch_cuda.rb +237 -0
  50. data/lib/toy/llm/archs/llama_arch_metal.rb +237 -0
  51. data/lib/toy/llm/blocks/transformer_block.rb +876 -0
  52. data/lib/toy/llm/blocks/transformer_block_cuda.rb +880 -0
  53. data/lib/toy/llm/blocks/transformer_block_metal.rb +880 -0
  54. data/lib/toy/llm/classify_batch.rb +88 -0
  55. data/lib/toy/llm/engine/gpt2_fwd_engine.rb +360 -0
  56. data/lib/toy/llm/engine/gpt2_fwd_engine_cuda.rb +362 -0
  57. data/lib/toy/llm/engine/gpt2_fwd_engine_metal.rb +362 -0
  58. data/lib/toy/llm/engine/gpt2_kv_engine.rb +346 -0
  59. data/lib/toy/llm/engine/gpt2_kv_engine_cuda.rb +348 -0
  60. data/lib/toy/llm/engine/gpt2_kv_engine_metal.rb +348 -0
  61. data/lib/toy/llm/engine/gpt2_seq_engine.rb +289 -0
  62. data/lib/toy/llm/engine/gpt2_seq_engine_cuda.rb +293 -0
  63. data/lib/toy/llm/engine/gpt2_seq_engine_metal.rb +293 -0
  64. data/lib/toy/llm/engine/llama_kv_engine.rb +1593 -0
  65. data/lib/toy/llm/engine/llama_kv_engine_cuda.rb +1526 -0
  66. data/lib/toy/llm/engine/llama_kv_engine_metal.rb +1526 -0
  67. data/lib/toy/llm/engine/llama_seq_engine.rb +1233 -0
  68. data/lib/toy/llm/engine/llama_seq_engine_cuda.rb +1238 -0
  69. data/lib/toy/llm/engine/llama_seq_engine_metal.rb +1238 -0
  70. data/lib/toy/llm/engine/vit_tiny_engine.rb +467 -0
  71. data/lib/toy/llm/labels.rb +142 -0
  72. data/lib/toy/llm/primitives/gqa.rb +62 -0
  73. data/lib/toy/llm/primitives/gqa_cuda.rb +66 -0
  74. data/lib/toy/llm/primitives/gqa_metal.rb +66 -0
  75. data/lib/toy/llm/primitives/rms_norm.rb +39 -0
  76. data/lib/toy/llm/primitives/rms_norm_cuda.rb +43 -0
  77. data/lib/toy/llm/primitives/rms_norm_metal.rb +43 -0
  78. data/lib/toy/llm/primitives/rope.rb +68 -0
  79. data/lib/toy/llm/primitives/rope_cuda.rb +72 -0
  80. data/lib/toy/llm/primitives/rope_metal.rb +72 -0
  81. data/lib/toy/llm/primitives/swiglu.rb +41 -0
  82. data/lib/toy/llm/primitives/swiglu_cuda.rb +45 -0
  83. data/lib/toy/llm/primitives/swiglu_metal.rb +45 -0
  84. data/lib/toy/llm/recipe_options.rb +71 -0
  85. data/lib/toy/llm/recipes/from_scratch.rb +105 -0
  86. data/lib/toy/llm/recipes/from_scratch_cuda.rb +109 -0
  87. data/lib/toy/llm/recipes/from_scratch_metal.rb +109 -0
  88. data/lib/toy/llm/recipes/lora.rb +110 -0
  89. data/lib/toy/llm/recipes/lora_cuda.rb +114 -0
  90. data/lib/toy/llm/recipes/lora_metal.rb +114 -0
  91. data/lib/toy/llm/recipes/vit_tiny.rb +75 -0
  92. data/lib/toy/llm/recipes/warm_start.rb +235 -0
  93. data/lib/toy/llm/recipes/warm_start_cuda.rb +239 -0
  94. data/lib/toy/llm/recipes/warm_start_metal.rb +239 -0
  95. data/lib/toy/llm/training_batch.rb +133 -0
  96. data/lib/toy/models/arch.rb +253 -0
  97. data/lib/toy/models/gpt2.rb +311 -0
  98. data/lib/toy/models/toy_gpt2.rb +177 -0
  99. data/lib/toy/models/toy_smollm2.rb +393 -0
  100. data/lib/toy/models/toy_vit.rb +83 -0
  101. data/lib/toy/models/transformer.rb +1494 -0
  102. data/lib/toy/models/transformer_lm.rb +298 -0
  103. data/lib/toy/models/transformer_lm_cuda.rb +159 -0
  104. data/lib/toy/models/transformer_lm_metal.rb +142 -0
  105. data/lib/toy/mri.rb +300 -0
  106. data/lib/toy/run/eval.rb +76 -0
  107. data/lib/toy/run/eval_cuda.rb +66 -0
  108. data/lib/toy/run/eval_lmc.rb +334 -0
  109. data/lib/toy/run/eval_metal.rb +67 -0
  110. data/lib/toy/run/infer.rb +130 -0
  111. data/lib/toy/run/infer_cuda.rb +118 -0
  112. data/lib/toy/run/infer_metal.rb +119 -0
  113. data/lib/toy/run/infer_trace.rb +37 -0
  114. data/lib/toy/run/serve.rb +144 -0
  115. data/lib/toy/run/train.rb +404 -0
  116. data/lib/toy/run/train_cuda.rb +397 -0
  117. data/lib/toy/run/train_gpt2.rb +103 -0
  118. data/lib/toy/run/train_gpt2_cuda.rb +85 -0
  119. data/lib/toy/run/train_gpt2_metal.rb +85 -0
  120. data/lib/toy/run/train_lora.rb +207 -0
  121. data/lib/toy/run/train_lora_cuda.rb +219 -0
  122. data/lib/toy/run/train_metal.rb +227 -0
  123. data/lib/toy/run/train_vit.rb +251 -0
  124. data/lib/toy/serve/openai/embeddings_handler.rb +92 -0
  125. data/lib/toy/serve/openai/handlers.rb +143 -0
  126. data/lib/toy/serve/openai/server.rb +159 -0
  127. data/lib/toy/train/sampler.rb +314 -0
  128. data/lib/toy/train/toy_chat_template.rb +179 -0
  129. data/lib/toy/train/toy_drift_grad.rb +176 -0
  130. data/lib/toy/train/toy_gguf_fuse.rb +428 -0
  131. data/lib/toy/train/toy_gguf_writer.rb +100 -0
  132. data/lib/toy/train/toy_lr_schedule.rb +39 -0
  133. data/lib/toy/train/toy_sample.rb +125 -0
  134. data/lib/toy/train/toy_trainer.rb +86 -0
  135. data/lib/toy/train/training.rb +160 -0
  136. data/lib/toy/version.rb +11 -0
  137. data/lib/toy.rb +902 -0
  138. data/prep/progress +118 -0
  139. data/prep/quietly +64 -0
  140. data/sig/toy.rbs +397 -0
  141. data/sig/toy_compute.rbs +450 -0
  142. data/spinel-ext.json +122 -0
  143. data/tinynn/Makefile +71 -0
  144. data/tinynn/tinynn_backend_cuda.c +99 -0
  145. data/tinynn/tinynn_backend_metal.m +75 -0
  146. data/tinynn/tinynn_events.c +122 -0
  147. data/tinynn/tinynn_events.h +83 -0
  148. data/tinynn/tinynn_ggml.c +2460 -0
  149. data/tinynn/tinynn_ggml.h +545 -0
  150. data/tinynn/tinynn_gguf.c +783 -0
  151. data/tinynn/tinynn_gguf.h +167 -0
  152. data/tinynn/tinynn_trace.c +180 -0
  153. data/tinynn/tinynn_trace.h +85 -0
  154. data/vendor/ggml/AUTHORS +335 -0
  155. data/vendor/ggml/CMakeLists.txt +505 -0
  156. data/vendor/ggml/CONTRIBUTING.md +3 -0
  157. data/vendor/ggml/LICENSE +21 -0
  158. data/vendor/ggml/README.md +50 -0
  159. data/vendor/ggml/ci/run.sh +395 -0
  160. data/vendor/ggml/cmake/FindNCCL.cmake +36 -0
  161. data/vendor/ggml/cmake/GitVars.cmake +22 -0
  162. data/vendor/ggml/cmake/common.cmake +50 -0
  163. data/vendor/ggml/cmake/ggml-config.cmake.in +191 -0
  164. data/vendor/ggml/docs/gguf.md +828 -0
  165. data/vendor/ggml/examples/CMakeLists.txt +34 -0
  166. data/vendor/ggml/examples/common-ggml.cpp +244 -0
  167. data/vendor/ggml/examples/common-ggml.h +18 -0
  168. data/vendor/ggml/examples/common.cpp +675 -0
  169. data/vendor/ggml/examples/common.h +322 -0
  170. data/vendor/ggml/examples/gpt-2/CMakeLists.txt +32 -0
  171. data/vendor/ggml/examples/gpt-2/README.md +225 -0
  172. data/vendor/ggml/examples/gpt-2/convert-cerebras-to-ggml.py +183 -0
  173. data/vendor/ggml/examples/gpt-2/convert-ckpt-to-ggml.py +159 -0
  174. data/vendor/ggml/examples/gpt-2/convert-h5-to-ggml.py +195 -0
  175. data/vendor/ggml/examples/gpt-2/download-ggml-model.sh +69 -0
  176. data/vendor/ggml/examples/gpt-2/download-model.sh +48 -0
  177. data/vendor/ggml/examples/gpt-2/main-alloc.cpp +880 -0
  178. data/vendor/ggml/examples/gpt-2/main-backend.cpp +946 -0
  179. data/vendor/ggml/examples/gpt-2/main-batched.cpp +1210 -0
  180. data/vendor/ggml/examples/gpt-2/main-ctx.cpp +840 -0
  181. data/vendor/ggml/examples/gpt-2/main-sched.cpp +1079 -0
  182. data/vendor/ggml/examples/gpt-2/quantize.cpp +184 -0
  183. data/vendor/ggml/examples/gpt-j/CMakeLists.txt +13 -0
  184. data/vendor/ggml/examples/gpt-j/README.md +239 -0
  185. data/vendor/ggml/examples/gpt-j/convert-h5-to-ggml.py +173 -0
  186. data/vendor/ggml/examples/gpt-j/download-ggml-model.sh +69 -0
  187. data/vendor/ggml/examples/gpt-j/download-model.sh +11 -0
  188. data/vendor/ggml/examples/gpt-j/main.cpp +755 -0
  189. data/vendor/ggml/examples/gpt-j/quantize.cpp +182 -0
  190. data/vendor/ggml/examples/magika/CMakeLists.txt +17 -0
  191. data/vendor/ggml/examples/magika/README.md +23 -0
  192. data/vendor/ggml/examples/magika/convert.py +32 -0
  193. data/vendor/ggml/examples/magika/main.cpp +374 -0
  194. data/vendor/ggml/examples/mnist/CMakeLists.txt +58 -0
  195. data/vendor/ggml/examples/mnist/README.md +206 -0
  196. data/vendor/ggml/examples/mnist/mnist-common.cpp +496 -0
  197. data/vendor/ggml/examples/mnist/mnist-common.h +166 -0
  198. data/vendor/ggml/examples/mnist/mnist-eval.cpp +67 -0
  199. data/vendor/ggml/examples/mnist/mnist-train-cnn.py +91 -0
  200. data/vendor/ggml/examples/mnist/mnist-train-fc.py +131 -0
  201. data/vendor/ggml/examples/mnist/mnist-train.cpp +39 -0
  202. data/vendor/ggml/examples/mnist/server.py +36 -0
  203. data/vendor/ggml/examples/mnist/web/index.html +178 -0
  204. data/vendor/ggml/examples/perf-metal/CMakeLists.txt +7 -0
  205. data/vendor/ggml/examples/perf-metal/perf-metal.cpp +152 -0
  206. data/vendor/ggml/examples/prompts/dolly-v2.txt +100 -0
  207. data/vendor/ggml/examples/prompts/gpt-2-chinese.txt +1 -0
  208. data/vendor/ggml/examples/prompts/gpt-2.txt +100 -0
  209. data/vendor/ggml/examples/prompts/gpt-j.txt +100 -0
  210. data/vendor/ggml/examples/prompts/gpt-neox-japanese.txt +1 -0
  211. data/vendor/ggml/examples/prompts/gpt-neox.txt +100 -0
  212. data/vendor/ggml/examples/prompts/polyglot-ko.txt +3 -0
  213. data/vendor/ggml/examples/prompts/replit.txt +100 -0
  214. data/vendor/ggml/examples/prompts/starcoder.txt +100 -0
  215. data/vendor/ggml/examples/prompts/test-cases.txt +110 -0
  216. data/vendor/ggml/examples/prompts/tokenize_huggingface.py +65 -0
  217. data/vendor/ggml/examples/prompts/whisper.txt +100 -0
  218. data/vendor/ggml/examples/python/README.md +115 -0
  219. data/vendor/ggml/examples/python/api.h +14 -0
  220. data/vendor/ggml/examples/python/example_add_quant.py +25 -0
  221. data/vendor/ggml/examples/python/example_test_all_quants.py +68 -0
  222. data/vendor/ggml/examples/python/ggml/__init__.py +58 -0
  223. data/vendor/ggml/examples/python/ggml/__init__.pyi +2406 -0
  224. data/vendor/ggml/examples/python/ggml/cffi.py +11 -0
  225. data/vendor/ggml/examples/python/ggml/ffi/__init__.pyi +7 -0
  226. data/vendor/ggml/examples/python/ggml/utils.py +182 -0
  227. data/vendor/ggml/examples/python/regenerate.py +42 -0
  228. data/vendor/ggml/examples/python/stubs.py +128 -0
  229. data/vendor/ggml/examples/python/test_tensor.py +258 -0
  230. data/vendor/ggml/examples/sam/CMakeLists.txt +13 -0
  231. data/vendor/ggml/examples/sam/README.md +95 -0
  232. data/vendor/ggml/examples/sam/convert-pth-to-ggml.py +147 -0
  233. data/vendor/ggml/examples/sam/example.jpg +0 -0
  234. data/vendor/ggml/examples/sam/sam.cpp +2370 -0
  235. data/vendor/ggml/examples/simple/CMakeLists.txt +21 -0
  236. data/vendor/ggml/examples/simple/README.md +61 -0
  237. data/vendor/ggml/examples/simple/simple-backend.cpp +153 -0
  238. data/vendor/ggml/examples/simple/simple-ctx.cpp +127 -0
  239. data/vendor/ggml/examples/stb_image.h +7987 -0
  240. data/vendor/ggml/examples/stb_image_write.h +1724 -0
  241. data/vendor/ggml/examples/test-cmake/CMakeLists.txt +10 -0
  242. data/vendor/ggml/examples/test-cmake/README.md +3 -0
  243. data/vendor/ggml/examples/test-cmake/test-cmake.cpp +6 -0
  244. data/vendor/ggml/examples/yolo/CMakeLists.txt +6 -0
  245. data/vendor/ggml/examples/yolo/README.md +59 -0
  246. data/vendor/ggml/examples/yolo/convert-yolov3-tiny.py +53 -0
  247. data/vendor/ggml/examples/yolo/data/coco.names +80 -0
  248. data/vendor/ggml/examples/yolo/data/labels/100_0.png +0 -0
  249. data/vendor/ggml/examples/yolo/data/labels/100_1.png +0 -0
  250. data/vendor/ggml/examples/yolo/data/labels/100_2.png +0 -0
  251. data/vendor/ggml/examples/yolo/data/labels/100_3.png +0 -0
  252. data/vendor/ggml/examples/yolo/data/labels/100_4.png +0 -0
  253. data/vendor/ggml/examples/yolo/data/labels/100_5.png +0 -0
  254. data/vendor/ggml/examples/yolo/data/labels/100_6.png +0 -0
  255. data/vendor/ggml/examples/yolo/data/labels/100_7.png +0 -0
  256. data/vendor/ggml/examples/yolo/data/labels/101_0.png +0 -0
  257. data/vendor/ggml/examples/yolo/data/labels/101_1.png +0 -0
  258. data/vendor/ggml/examples/yolo/data/labels/101_2.png +0 -0
  259. data/vendor/ggml/examples/yolo/data/labels/101_3.png +0 -0
  260. data/vendor/ggml/examples/yolo/data/labels/101_4.png +0 -0
  261. data/vendor/ggml/examples/yolo/data/labels/101_5.png +0 -0
  262. data/vendor/ggml/examples/yolo/data/labels/101_6.png +0 -0
  263. data/vendor/ggml/examples/yolo/data/labels/101_7.png +0 -0
  264. data/vendor/ggml/examples/yolo/data/labels/102_0.png +0 -0
  265. data/vendor/ggml/examples/yolo/data/labels/102_1.png +0 -0
  266. data/vendor/ggml/examples/yolo/data/labels/102_2.png +0 -0
  267. data/vendor/ggml/examples/yolo/data/labels/102_3.png +0 -0
  268. data/vendor/ggml/examples/yolo/data/labels/102_4.png +0 -0
  269. data/vendor/ggml/examples/yolo/data/labels/102_5.png +0 -0
  270. data/vendor/ggml/examples/yolo/data/labels/102_6.png +0 -0
  271. data/vendor/ggml/examples/yolo/data/labels/102_7.png +0 -0
  272. data/vendor/ggml/examples/yolo/data/labels/103_0.png +0 -0
  273. data/vendor/ggml/examples/yolo/data/labels/103_1.png +0 -0
  274. data/vendor/ggml/examples/yolo/data/labels/103_2.png +0 -0
  275. data/vendor/ggml/examples/yolo/data/labels/103_3.png +0 -0
  276. data/vendor/ggml/examples/yolo/data/labels/103_4.png +0 -0
  277. data/vendor/ggml/examples/yolo/data/labels/103_5.png +0 -0
  278. data/vendor/ggml/examples/yolo/data/labels/103_6.png +0 -0
  279. data/vendor/ggml/examples/yolo/data/labels/103_7.png +0 -0
  280. data/vendor/ggml/examples/yolo/data/labels/104_0.png +0 -0
  281. data/vendor/ggml/examples/yolo/data/labels/104_1.png +0 -0
  282. data/vendor/ggml/examples/yolo/data/labels/104_2.png +0 -0
  283. data/vendor/ggml/examples/yolo/data/labels/104_3.png +0 -0
  284. data/vendor/ggml/examples/yolo/data/labels/104_4.png +0 -0
  285. data/vendor/ggml/examples/yolo/data/labels/104_5.png +0 -0
  286. data/vendor/ggml/examples/yolo/data/labels/104_6.png +0 -0
  287. data/vendor/ggml/examples/yolo/data/labels/104_7.png +0 -0
  288. data/vendor/ggml/examples/yolo/data/labels/105_0.png +0 -0
  289. data/vendor/ggml/examples/yolo/data/labels/105_1.png +0 -0
  290. data/vendor/ggml/examples/yolo/data/labels/105_2.png +0 -0
  291. data/vendor/ggml/examples/yolo/data/labels/105_3.png +0 -0
  292. data/vendor/ggml/examples/yolo/data/labels/105_4.png +0 -0
  293. data/vendor/ggml/examples/yolo/data/labels/105_5.png +0 -0
  294. data/vendor/ggml/examples/yolo/data/labels/105_6.png +0 -0
  295. data/vendor/ggml/examples/yolo/data/labels/105_7.png +0 -0
  296. data/vendor/ggml/examples/yolo/data/labels/106_0.png +0 -0
  297. data/vendor/ggml/examples/yolo/data/labels/106_1.png +0 -0
  298. data/vendor/ggml/examples/yolo/data/labels/106_2.png +0 -0
  299. data/vendor/ggml/examples/yolo/data/labels/106_3.png +0 -0
  300. data/vendor/ggml/examples/yolo/data/labels/106_4.png +0 -0
  301. data/vendor/ggml/examples/yolo/data/labels/106_5.png +0 -0
  302. data/vendor/ggml/examples/yolo/data/labels/106_6.png +0 -0
  303. data/vendor/ggml/examples/yolo/data/labels/106_7.png +0 -0
  304. data/vendor/ggml/examples/yolo/data/labels/107_0.png +0 -0
  305. data/vendor/ggml/examples/yolo/data/labels/107_1.png +0 -0
  306. data/vendor/ggml/examples/yolo/data/labels/107_2.png +0 -0
  307. data/vendor/ggml/examples/yolo/data/labels/107_3.png +0 -0
  308. data/vendor/ggml/examples/yolo/data/labels/107_4.png +0 -0
  309. data/vendor/ggml/examples/yolo/data/labels/107_5.png +0 -0
  310. data/vendor/ggml/examples/yolo/data/labels/107_6.png +0 -0
  311. data/vendor/ggml/examples/yolo/data/labels/107_7.png +0 -0
  312. data/vendor/ggml/examples/yolo/data/labels/108_0.png +0 -0
  313. data/vendor/ggml/examples/yolo/data/labels/108_1.png +0 -0
  314. data/vendor/ggml/examples/yolo/data/labels/108_2.png +0 -0
  315. data/vendor/ggml/examples/yolo/data/labels/108_3.png +0 -0
  316. data/vendor/ggml/examples/yolo/data/labels/108_4.png +0 -0
  317. data/vendor/ggml/examples/yolo/data/labels/108_5.png +0 -0
  318. data/vendor/ggml/examples/yolo/data/labels/108_6.png +0 -0
  319. data/vendor/ggml/examples/yolo/data/labels/108_7.png +0 -0
  320. data/vendor/ggml/examples/yolo/data/labels/109_0.png +0 -0
  321. data/vendor/ggml/examples/yolo/data/labels/109_1.png +0 -0
  322. data/vendor/ggml/examples/yolo/data/labels/109_2.png +0 -0
  323. data/vendor/ggml/examples/yolo/data/labels/109_3.png +0 -0
  324. data/vendor/ggml/examples/yolo/data/labels/109_4.png +0 -0
  325. data/vendor/ggml/examples/yolo/data/labels/109_5.png +0 -0
  326. data/vendor/ggml/examples/yolo/data/labels/109_6.png +0 -0
  327. data/vendor/ggml/examples/yolo/data/labels/109_7.png +0 -0
  328. data/vendor/ggml/examples/yolo/data/labels/110_0.png +0 -0
  329. data/vendor/ggml/examples/yolo/data/labels/110_1.png +0 -0
  330. data/vendor/ggml/examples/yolo/data/labels/110_2.png +0 -0
  331. data/vendor/ggml/examples/yolo/data/labels/110_3.png +0 -0
  332. data/vendor/ggml/examples/yolo/data/labels/110_4.png +0 -0
  333. data/vendor/ggml/examples/yolo/data/labels/110_5.png +0 -0
  334. data/vendor/ggml/examples/yolo/data/labels/110_6.png +0 -0
  335. data/vendor/ggml/examples/yolo/data/labels/110_7.png +0 -0
  336. data/vendor/ggml/examples/yolo/data/labels/111_0.png +0 -0
  337. data/vendor/ggml/examples/yolo/data/labels/111_1.png +0 -0
  338. data/vendor/ggml/examples/yolo/data/labels/111_2.png +0 -0
  339. data/vendor/ggml/examples/yolo/data/labels/111_3.png +0 -0
  340. data/vendor/ggml/examples/yolo/data/labels/111_4.png +0 -0
  341. data/vendor/ggml/examples/yolo/data/labels/111_5.png +0 -0
  342. data/vendor/ggml/examples/yolo/data/labels/111_6.png +0 -0
  343. data/vendor/ggml/examples/yolo/data/labels/111_7.png +0 -0
  344. data/vendor/ggml/examples/yolo/data/labels/112_0.png +0 -0
  345. data/vendor/ggml/examples/yolo/data/labels/112_1.png +0 -0
  346. data/vendor/ggml/examples/yolo/data/labels/112_2.png +0 -0
  347. data/vendor/ggml/examples/yolo/data/labels/112_3.png +0 -0
  348. data/vendor/ggml/examples/yolo/data/labels/112_4.png +0 -0
  349. data/vendor/ggml/examples/yolo/data/labels/112_5.png +0 -0
  350. data/vendor/ggml/examples/yolo/data/labels/112_6.png +0 -0
  351. data/vendor/ggml/examples/yolo/data/labels/112_7.png +0 -0
  352. data/vendor/ggml/examples/yolo/data/labels/113_0.png +0 -0
  353. data/vendor/ggml/examples/yolo/data/labels/113_1.png +0 -0
  354. data/vendor/ggml/examples/yolo/data/labels/113_2.png +0 -0
  355. data/vendor/ggml/examples/yolo/data/labels/113_3.png +0 -0
  356. data/vendor/ggml/examples/yolo/data/labels/113_4.png +0 -0
  357. data/vendor/ggml/examples/yolo/data/labels/113_5.png +0 -0
  358. data/vendor/ggml/examples/yolo/data/labels/113_6.png +0 -0
  359. data/vendor/ggml/examples/yolo/data/labels/113_7.png +0 -0
  360. data/vendor/ggml/examples/yolo/data/labels/114_0.png +0 -0
  361. data/vendor/ggml/examples/yolo/data/labels/114_1.png +0 -0
  362. data/vendor/ggml/examples/yolo/data/labels/114_2.png +0 -0
  363. data/vendor/ggml/examples/yolo/data/labels/114_3.png +0 -0
  364. data/vendor/ggml/examples/yolo/data/labels/114_4.png +0 -0
  365. data/vendor/ggml/examples/yolo/data/labels/114_5.png +0 -0
  366. data/vendor/ggml/examples/yolo/data/labels/114_6.png +0 -0
  367. data/vendor/ggml/examples/yolo/data/labels/114_7.png +0 -0
  368. data/vendor/ggml/examples/yolo/data/labels/115_0.png +0 -0
  369. data/vendor/ggml/examples/yolo/data/labels/115_1.png +0 -0
  370. data/vendor/ggml/examples/yolo/data/labels/115_2.png +0 -0
  371. data/vendor/ggml/examples/yolo/data/labels/115_3.png +0 -0
  372. data/vendor/ggml/examples/yolo/data/labels/115_4.png +0 -0
  373. data/vendor/ggml/examples/yolo/data/labels/115_5.png +0 -0
  374. data/vendor/ggml/examples/yolo/data/labels/115_6.png +0 -0
  375. data/vendor/ggml/examples/yolo/data/labels/115_7.png +0 -0
  376. data/vendor/ggml/examples/yolo/data/labels/116_0.png +0 -0
  377. data/vendor/ggml/examples/yolo/data/labels/116_1.png +0 -0
  378. data/vendor/ggml/examples/yolo/data/labels/116_2.png +0 -0
  379. data/vendor/ggml/examples/yolo/data/labels/116_3.png +0 -0
  380. data/vendor/ggml/examples/yolo/data/labels/116_4.png +0 -0
  381. data/vendor/ggml/examples/yolo/data/labels/116_5.png +0 -0
  382. data/vendor/ggml/examples/yolo/data/labels/116_6.png +0 -0
  383. data/vendor/ggml/examples/yolo/data/labels/116_7.png +0 -0
  384. data/vendor/ggml/examples/yolo/data/labels/117_0.png +0 -0
  385. data/vendor/ggml/examples/yolo/data/labels/117_1.png +0 -0
  386. data/vendor/ggml/examples/yolo/data/labels/117_2.png +0 -0
  387. data/vendor/ggml/examples/yolo/data/labels/117_3.png +0 -0
  388. data/vendor/ggml/examples/yolo/data/labels/117_4.png +0 -0
  389. data/vendor/ggml/examples/yolo/data/labels/117_5.png +0 -0
  390. data/vendor/ggml/examples/yolo/data/labels/117_6.png +0 -0
  391. data/vendor/ggml/examples/yolo/data/labels/117_7.png +0 -0
  392. data/vendor/ggml/examples/yolo/data/labels/118_0.png +0 -0
  393. data/vendor/ggml/examples/yolo/data/labels/118_1.png +0 -0
  394. data/vendor/ggml/examples/yolo/data/labels/118_2.png +0 -0
  395. data/vendor/ggml/examples/yolo/data/labels/118_3.png +0 -0
  396. data/vendor/ggml/examples/yolo/data/labels/118_4.png +0 -0
  397. data/vendor/ggml/examples/yolo/data/labels/118_5.png +0 -0
  398. data/vendor/ggml/examples/yolo/data/labels/118_6.png +0 -0
  399. data/vendor/ggml/examples/yolo/data/labels/118_7.png +0 -0
  400. data/vendor/ggml/examples/yolo/data/labels/119_0.png +0 -0
  401. data/vendor/ggml/examples/yolo/data/labels/119_1.png +0 -0
  402. data/vendor/ggml/examples/yolo/data/labels/119_2.png +0 -0
  403. data/vendor/ggml/examples/yolo/data/labels/119_3.png +0 -0
  404. data/vendor/ggml/examples/yolo/data/labels/119_4.png +0 -0
  405. data/vendor/ggml/examples/yolo/data/labels/119_5.png +0 -0
  406. data/vendor/ggml/examples/yolo/data/labels/119_6.png +0 -0
  407. data/vendor/ggml/examples/yolo/data/labels/119_7.png +0 -0
  408. data/vendor/ggml/examples/yolo/data/labels/120_0.png +0 -0
  409. data/vendor/ggml/examples/yolo/data/labels/120_1.png +0 -0
  410. data/vendor/ggml/examples/yolo/data/labels/120_2.png +0 -0
  411. data/vendor/ggml/examples/yolo/data/labels/120_3.png +0 -0
  412. data/vendor/ggml/examples/yolo/data/labels/120_4.png +0 -0
  413. data/vendor/ggml/examples/yolo/data/labels/120_5.png +0 -0
  414. data/vendor/ggml/examples/yolo/data/labels/120_6.png +0 -0
  415. data/vendor/ggml/examples/yolo/data/labels/120_7.png +0 -0
  416. data/vendor/ggml/examples/yolo/data/labels/121_0.png +0 -0
  417. data/vendor/ggml/examples/yolo/data/labels/121_1.png +0 -0
  418. data/vendor/ggml/examples/yolo/data/labels/121_2.png +0 -0
  419. data/vendor/ggml/examples/yolo/data/labels/121_3.png +0 -0
  420. data/vendor/ggml/examples/yolo/data/labels/121_4.png +0 -0
  421. data/vendor/ggml/examples/yolo/data/labels/121_5.png +0 -0
  422. data/vendor/ggml/examples/yolo/data/labels/121_6.png +0 -0
  423. data/vendor/ggml/examples/yolo/data/labels/121_7.png +0 -0
  424. data/vendor/ggml/examples/yolo/data/labels/122_0.png +0 -0
  425. data/vendor/ggml/examples/yolo/data/labels/122_1.png +0 -0
  426. data/vendor/ggml/examples/yolo/data/labels/122_2.png +0 -0
  427. data/vendor/ggml/examples/yolo/data/labels/122_3.png +0 -0
  428. data/vendor/ggml/examples/yolo/data/labels/122_4.png +0 -0
  429. data/vendor/ggml/examples/yolo/data/labels/122_5.png +0 -0
  430. data/vendor/ggml/examples/yolo/data/labels/122_6.png +0 -0
  431. data/vendor/ggml/examples/yolo/data/labels/122_7.png +0 -0
  432. data/vendor/ggml/examples/yolo/data/labels/123_0.png +0 -0
  433. data/vendor/ggml/examples/yolo/data/labels/123_1.png +0 -0
  434. data/vendor/ggml/examples/yolo/data/labels/123_2.png +0 -0
  435. data/vendor/ggml/examples/yolo/data/labels/123_3.png +0 -0
  436. data/vendor/ggml/examples/yolo/data/labels/123_4.png +0 -0
  437. data/vendor/ggml/examples/yolo/data/labels/123_5.png +0 -0
  438. data/vendor/ggml/examples/yolo/data/labels/123_6.png +0 -0
  439. data/vendor/ggml/examples/yolo/data/labels/123_7.png +0 -0
  440. data/vendor/ggml/examples/yolo/data/labels/124_0.png +0 -0
  441. data/vendor/ggml/examples/yolo/data/labels/124_1.png +0 -0
  442. data/vendor/ggml/examples/yolo/data/labels/124_2.png +0 -0
  443. data/vendor/ggml/examples/yolo/data/labels/124_3.png +0 -0
  444. data/vendor/ggml/examples/yolo/data/labels/124_4.png +0 -0
  445. data/vendor/ggml/examples/yolo/data/labels/124_5.png +0 -0
  446. data/vendor/ggml/examples/yolo/data/labels/124_6.png +0 -0
  447. data/vendor/ggml/examples/yolo/data/labels/124_7.png +0 -0
  448. data/vendor/ggml/examples/yolo/data/labels/125_0.png +0 -0
  449. data/vendor/ggml/examples/yolo/data/labels/125_1.png +0 -0
  450. data/vendor/ggml/examples/yolo/data/labels/125_2.png +0 -0
  451. data/vendor/ggml/examples/yolo/data/labels/125_3.png +0 -0
  452. data/vendor/ggml/examples/yolo/data/labels/125_4.png +0 -0
  453. data/vendor/ggml/examples/yolo/data/labels/125_5.png +0 -0
  454. data/vendor/ggml/examples/yolo/data/labels/125_6.png +0 -0
  455. data/vendor/ggml/examples/yolo/data/labels/125_7.png +0 -0
  456. data/vendor/ggml/examples/yolo/data/labels/126_0.png +0 -0
  457. data/vendor/ggml/examples/yolo/data/labels/126_1.png +0 -0
  458. data/vendor/ggml/examples/yolo/data/labels/126_2.png +0 -0
  459. data/vendor/ggml/examples/yolo/data/labels/126_3.png +0 -0
  460. data/vendor/ggml/examples/yolo/data/labels/126_4.png +0 -0
  461. data/vendor/ggml/examples/yolo/data/labels/126_5.png +0 -0
  462. data/vendor/ggml/examples/yolo/data/labels/126_6.png +0 -0
  463. data/vendor/ggml/examples/yolo/data/labels/126_7.png +0 -0
  464. data/vendor/ggml/examples/yolo/data/labels/32_0.png +0 -0
  465. data/vendor/ggml/examples/yolo/data/labels/32_1.png +0 -0
  466. data/vendor/ggml/examples/yolo/data/labels/32_2.png +0 -0
  467. data/vendor/ggml/examples/yolo/data/labels/32_3.png +0 -0
  468. data/vendor/ggml/examples/yolo/data/labels/32_4.png +0 -0
  469. data/vendor/ggml/examples/yolo/data/labels/32_5.png +0 -0
  470. data/vendor/ggml/examples/yolo/data/labels/32_6.png +0 -0
  471. data/vendor/ggml/examples/yolo/data/labels/32_7.png +0 -0
  472. data/vendor/ggml/examples/yolo/data/labels/33_0.png +0 -0
  473. data/vendor/ggml/examples/yolo/data/labels/33_1.png +0 -0
  474. data/vendor/ggml/examples/yolo/data/labels/33_2.png +0 -0
  475. data/vendor/ggml/examples/yolo/data/labels/33_3.png +0 -0
  476. data/vendor/ggml/examples/yolo/data/labels/33_4.png +0 -0
  477. data/vendor/ggml/examples/yolo/data/labels/33_5.png +0 -0
  478. data/vendor/ggml/examples/yolo/data/labels/33_6.png +0 -0
  479. data/vendor/ggml/examples/yolo/data/labels/33_7.png +0 -0
  480. data/vendor/ggml/examples/yolo/data/labels/34_0.png +0 -0
  481. data/vendor/ggml/examples/yolo/data/labels/34_1.png +0 -0
  482. data/vendor/ggml/examples/yolo/data/labels/34_2.png +0 -0
  483. data/vendor/ggml/examples/yolo/data/labels/34_3.png +0 -0
  484. data/vendor/ggml/examples/yolo/data/labels/34_4.png +0 -0
  485. data/vendor/ggml/examples/yolo/data/labels/34_5.png +0 -0
  486. data/vendor/ggml/examples/yolo/data/labels/34_6.png +0 -0
  487. data/vendor/ggml/examples/yolo/data/labels/34_7.png +0 -0
  488. data/vendor/ggml/examples/yolo/data/labels/35_0.png +0 -0
  489. data/vendor/ggml/examples/yolo/data/labels/35_1.png +0 -0
  490. data/vendor/ggml/examples/yolo/data/labels/35_2.png +0 -0
  491. data/vendor/ggml/examples/yolo/data/labels/35_3.png +0 -0
  492. data/vendor/ggml/examples/yolo/data/labels/35_4.png +0 -0
  493. data/vendor/ggml/examples/yolo/data/labels/35_5.png +0 -0
  494. data/vendor/ggml/examples/yolo/data/labels/35_6.png +0 -0
  495. data/vendor/ggml/examples/yolo/data/labels/35_7.png +0 -0
  496. data/vendor/ggml/examples/yolo/data/labels/36_0.png +0 -0
  497. data/vendor/ggml/examples/yolo/data/labels/36_1.png +0 -0
  498. data/vendor/ggml/examples/yolo/data/labels/36_2.png +0 -0
  499. data/vendor/ggml/examples/yolo/data/labels/36_3.png +0 -0
  500. data/vendor/ggml/examples/yolo/data/labels/36_4.png +0 -0
  501. data/vendor/ggml/examples/yolo/data/labels/36_5.png +0 -0
  502. data/vendor/ggml/examples/yolo/data/labels/36_6.png +0 -0
  503. data/vendor/ggml/examples/yolo/data/labels/36_7.png +0 -0
  504. data/vendor/ggml/examples/yolo/data/labels/37_0.png +0 -0
  505. data/vendor/ggml/examples/yolo/data/labels/37_1.png +0 -0
  506. data/vendor/ggml/examples/yolo/data/labels/37_2.png +0 -0
  507. data/vendor/ggml/examples/yolo/data/labels/37_3.png +0 -0
  508. data/vendor/ggml/examples/yolo/data/labels/37_4.png +0 -0
  509. data/vendor/ggml/examples/yolo/data/labels/37_5.png +0 -0
  510. data/vendor/ggml/examples/yolo/data/labels/37_6.png +0 -0
  511. data/vendor/ggml/examples/yolo/data/labels/37_7.png +0 -0
  512. data/vendor/ggml/examples/yolo/data/labels/38_0.png +0 -0
  513. data/vendor/ggml/examples/yolo/data/labels/38_1.png +0 -0
  514. data/vendor/ggml/examples/yolo/data/labels/38_2.png +0 -0
  515. data/vendor/ggml/examples/yolo/data/labels/38_3.png +0 -0
  516. data/vendor/ggml/examples/yolo/data/labels/38_4.png +0 -0
  517. data/vendor/ggml/examples/yolo/data/labels/38_5.png +0 -0
  518. data/vendor/ggml/examples/yolo/data/labels/38_6.png +0 -0
  519. data/vendor/ggml/examples/yolo/data/labels/38_7.png +0 -0
  520. data/vendor/ggml/examples/yolo/data/labels/39_0.png +0 -0
  521. data/vendor/ggml/examples/yolo/data/labels/39_1.png +0 -0
  522. data/vendor/ggml/examples/yolo/data/labels/39_2.png +0 -0
  523. data/vendor/ggml/examples/yolo/data/labels/39_3.png +0 -0
  524. data/vendor/ggml/examples/yolo/data/labels/39_4.png +0 -0
  525. data/vendor/ggml/examples/yolo/data/labels/39_5.png +0 -0
  526. data/vendor/ggml/examples/yolo/data/labels/39_6.png +0 -0
  527. data/vendor/ggml/examples/yolo/data/labels/39_7.png +0 -0
  528. data/vendor/ggml/examples/yolo/data/labels/40_0.png +0 -0
  529. data/vendor/ggml/examples/yolo/data/labels/40_1.png +0 -0
  530. data/vendor/ggml/examples/yolo/data/labels/40_2.png +0 -0
  531. data/vendor/ggml/examples/yolo/data/labels/40_3.png +0 -0
  532. data/vendor/ggml/examples/yolo/data/labels/40_4.png +0 -0
  533. data/vendor/ggml/examples/yolo/data/labels/40_5.png +0 -0
  534. data/vendor/ggml/examples/yolo/data/labels/40_6.png +0 -0
  535. data/vendor/ggml/examples/yolo/data/labels/40_7.png +0 -0
  536. data/vendor/ggml/examples/yolo/data/labels/41_0.png +0 -0
  537. data/vendor/ggml/examples/yolo/data/labels/41_1.png +0 -0
  538. data/vendor/ggml/examples/yolo/data/labels/41_2.png +0 -0
  539. data/vendor/ggml/examples/yolo/data/labels/41_3.png +0 -0
  540. data/vendor/ggml/examples/yolo/data/labels/41_4.png +0 -0
  541. data/vendor/ggml/examples/yolo/data/labels/41_5.png +0 -0
  542. data/vendor/ggml/examples/yolo/data/labels/41_6.png +0 -0
  543. data/vendor/ggml/examples/yolo/data/labels/41_7.png +0 -0
  544. data/vendor/ggml/examples/yolo/data/labels/42_0.png +0 -0
  545. data/vendor/ggml/examples/yolo/data/labels/42_1.png +0 -0
  546. data/vendor/ggml/examples/yolo/data/labels/42_2.png +0 -0
  547. data/vendor/ggml/examples/yolo/data/labels/42_3.png +0 -0
  548. data/vendor/ggml/examples/yolo/data/labels/42_4.png +0 -0
  549. data/vendor/ggml/examples/yolo/data/labels/42_5.png +0 -0
  550. data/vendor/ggml/examples/yolo/data/labels/42_6.png +0 -0
  551. data/vendor/ggml/examples/yolo/data/labels/42_7.png +0 -0
  552. data/vendor/ggml/examples/yolo/data/labels/43_0.png +0 -0
  553. data/vendor/ggml/examples/yolo/data/labels/43_1.png +0 -0
  554. data/vendor/ggml/examples/yolo/data/labels/43_2.png +0 -0
  555. data/vendor/ggml/examples/yolo/data/labels/43_3.png +0 -0
  556. data/vendor/ggml/examples/yolo/data/labels/43_4.png +0 -0
  557. data/vendor/ggml/examples/yolo/data/labels/43_5.png +0 -0
  558. data/vendor/ggml/examples/yolo/data/labels/43_6.png +0 -0
  559. data/vendor/ggml/examples/yolo/data/labels/43_7.png +0 -0
  560. data/vendor/ggml/examples/yolo/data/labels/44_0.png +0 -0
  561. data/vendor/ggml/examples/yolo/data/labels/44_1.png +0 -0
  562. data/vendor/ggml/examples/yolo/data/labels/44_2.png +0 -0
  563. data/vendor/ggml/examples/yolo/data/labels/44_3.png +0 -0
  564. data/vendor/ggml/examples/yolo/data/labels/44_4.png +0 -0
  565. data/vendor/ggml/examples/yolo/data/labels/44_5.png +0 -0
  566. data/vendor/ggml/examples/yolo/data/labels/44_6.png +0 -0
  567. data/vendor/ggml/examples/yolo/data/labels/44_7.png +0 -0
  568. data/vendor/ggml/examples/yolo/data/labels/45_0.png +0 -0
  569. data/vendor/ggml/examples/yolo/data/labels/45_1.png +0 -0
  570. data/vendor/ggml/examples/yolo/data/labels/45_2.png +0 -0
  571. data/vendor/ggml/examples/yolo/data/labels/45_3.png +0 -0
  572. data/vendor/ggml/examples/yolo/data/labels/45_4.png +0 -0
  573. data/vendor/ggml/examples/yolo/data/labels/45_5.png +0 -0
  574. data/vendor/ggml/examples/yolo/data/labels/45_6.png +0 -0
  575. data/vendor/ggml/examples/yolo/data/labels/45_7.png +0 -0
  576. data/vendor/ggml/examples/yolo/data/labels/46_0.png +0 -0
  577. data/vendor/ggml/examples/yolo/data/labels/46_1.png +0 -0
  578. data/vendor/ggml/examples/yolo/data/labels/46_2.png +0 -0
  579. data/vendor/ggml/examples/yolo/data/labels/46_3.png +0 -0
  580. data/vendor/ggml/examples/yolo/data/labels/46_4.png +0 -0
  581. data/vendor/ggml/examples/yolo/data/labels/46_5.png +0 -0
  582. data/vendor/ggml/examples/yolo/data/labels/46_6.png +0 -0
  583. data/vendor/ggml/examples/yolo/data/labels/46_7.png +0 -0
  584. data/vendor/ggml/examples/yolo/data/labels/47_0.png +0 -0
  585. data/vendor/ggml/examples/yolo/data/labels/47_1.png +0 -0
  586. data/vendor/ggml/examples/yolo/data/labels/47_2.png +0 -0
  587. data/vendor/ggml/examples/yolo/data/labels/47_3.png +0 -0
  588. data/vendor/ggml/examples/yolo/data/labels/47_4.png +0 -0
  589. data/vendor/ggml/examples/yolo/data/labels/47_5.png +0 -0
  590. data/vendor/ggml/examples/yolo/data/labels/47_6.png +0 -0
  591. data/vendor/ggml/examples/yolo/data/labels/47_7.png +0 -0
  592. data/vendor/ggml/examples/yolo/data/labels/48_0.png +0 -0
  593. data/vendor/ggml/examples/yolo/data/labels/48_1.png +0 -0
  594. data/vendor/ggml/examples/yolo/data/labels/48_2.png +0 -0
  595. data/vendor/ggml/examples/yolo/data/labels/48_3.png +0 -0
  596. data/vendor/ggml/examples/yolo/data/labels/48_4.png +0 -0
  597. data/vendor/ggml/examples/yolo/data/labels/48_5.png +0 -0
  598. data/vendor/ggml/examples/yolo/data/labels/48_6.png +0 -0
  599. data/vendor/ggml/examples/yolo/data/labels/48_7.png +0 -0
  600. data/vendor/ggml/examples/yolo/data/labels/49_0.png +0 -0
  601. data/vendor/ggml/examples/yolo/data/labels/49_1.png +0 -0
  602. data/vendor/ggml/examples/yolo/data/labels/49_2.png +0 -0
  603. data/vendor/ggml/examples/yolo/data/labels/49_3.png +0 -0
  604. data/vendor/ggml/examples/yolo/data/labels/49_4.png +0 -0
  605. data/vendor/ggml/examples/yolo/data/labels/49_5.png +0 -0
  606. data/vendor/ggml/examples/yolo/data/labels/49_6.png +0 -0
  607. data/vendor/ggml/examples/yolo/data/labels/49_7.png +0 -0
  608. data/vendor/ggml/examples/yolo/data/labels/50_0.png +0 -0
  609. data/vendor/ggml/examples/yolo/data/labels/50_1.png +0 -0
  610. data/vendor/ggml/examples/yolo/data/labels/50_2.png +0 -0
  611. data/vendor/ggml/examples/yolo/data/labels/50_3.png +0 -0
  612. data/vendor/ggml/examples/yolo/data/labels/50_4.png +0 -0
  613. data/vendor/ggml/examples/yolo/data/labels/50_5.png +0 -0
  614. data/vendor/ggml/examples/yolo/data/labels/50_6.png +0 -0
  615. data/vendor/ggml/examples/yolo/data/labels/50_7.png +0 -0
  616. data/vendor/ggml/examples/yolo/data/labels/51_0.png +0 -0
  617. data/vendor/ggml/examples/yolo/data/labels/51_1.png +0 -0
  618. data/vendor/ggml/examples/yolo/data/labels/51_2.png +0 -0
  619. data/vendor/ggml/examples/yolo/data/labels/51_3.png +0 -0
  620. data/vendor/ggml/examples/yolo/data/labels/51_4.png +0 -0
  621. data/vendor/ggml/examples/yolo/data/labels/51_5.png +0 -0
  622. data/vendor/ggml/examples/yolo/data/labels/51_6.png +0 -0
  623. data/vendor/ggml/examples/yolo/data/labels/51_7.png +0 -0
  624. data/vendor/ggml/examples/yolo/data/labels/52_0.png +0 -0
  625. data/vendor/ggml/examples/yolo/data/labels/52_1.png +0 -0
  626. data/vendor/ggml/examples/yolo/data/labels/52_2.png +0 -0
  627. data/vendor/ggml/examples/yolo/data/labels/52_3.png +0 -0
  628. data/vendor/ggml/examples/yolo/data/labels/52_4.png +0 -0
  629. data/vendor/ggml/examples/yolo/data/labels/52_5.png +0 -0
  630. data/vendor/ggml/examples/yolo/data/labels/52_6.png +0 -0
  631. data/vendor/ggml/examples/yolo/data/labels/52_7.png +0 -0
  632. data/vendor/ggml/examples/yolo/data/labels/53_0.png +0 -0
  633. data/vendor/ggml/examples/yolo/data/labels/53_1.png +0 -0
  634. data/vendor/ggml/examples/yolo/data/labels/53_2.png +0 -0
  635. data/vendor/ggml/examples/yolo/data/labels/53_3.png +0 -0
  636. data/vendor/ggml/examples/yolo/data/labels/53_4.png +0 -0
  637. data/vendor/ggml/examples/yolo/data/labels/53_5.png +0 -0
  638. data/vendor/ggml/examples/yolo/data/labels/53_6.png +0 -0
  639. data/vendor/ggml/examples/yolo/data/labels/53_7.png +0 -0
  640. data/vendor/ggml/examples/yolo/data/labels/54_0.png +0 -0
  641. data/vendor/ggml/examples/yolo/data/labels/54_1.png +0 -0
  642. data/vendor/ggml/examples/yolo/data/labels/54_2.png +0 -0
  643. data/vendor/ggml/examples/yolo/data/labels/54_3.png +0 -0
  644. data/vendor/ggml/examples/yolo/data/labels/54_4.png +0 -0
  645. data/vendor/ggml/examples/yolo/data/labels/54_5.png +0 -0
  646. data/vendor/ggml/examples/yolo/data/labels/54_6.png +0 -0
  647. data/vendor/ggml/examples/yolo/data/labels/54_7.png +0 -0
  648. data/vendor/ggml/examples/yolo/data/labels/55_0.png +0 -0
  649. data/vendor/ggml/examples/yolo/data/labels/55_1.png +0 -0
  650. data/vendor/ggml/examples/yolo/data/labels/55_2.png +0 -0
  651. data/vendor/ggml/examples/yolo/data/labels/55_3.png +0 -0
  652. data/vendor/ggml/examples/yolo/data/labels/55_4.png +0 -0
  653. data/vendor/ggml/examples/yolo/data/labels/55_5.png +0 -0
  654. data/vendor/ggml/examples/yolo/data/labels/55_6.png +0 -0
  655. data/vendor/ggml/examples/yolo/data/labels/55_7.png +0 -0
  656. data/vendor/ggml/examples/yolo/data/labels/56_0.png +0 -0
  657. data/vendor/ggml/examples/yolo/data/labels/56_1.png +0 -0
  658. data/vendor/ggml/examples/yolo/data/labels/56_2.png +0 -0
  659. data/vendor/ggml/examples/yolo/data/labels/56_3.png +0 -0
  660. data/vendor/ggml/examples/yolo/data/labels/56_4.png +0 -0
  661. data/vendor/ggml/examples/yolo/data/labels/56_5.png +0 -0
  662. data/vendor/ggml/examples/yolo/data/labels/56_6.png +0 -0
  663. data/vendor/ggml/examples/yolo/data/labels/56_7.png +0 -0
  664. data/vendor/ggml/examples/yolo/data/labels/57_0.png +0 -0
  665. data/vendor/ggml/examples/yolo/data/labels/57_1.png +0 -0
  666. data/vendor/ggml/examples/yolo/data/labels/57_2.png +0 -0
  667. data/vendor/ggml/examples/yolo/data/labels/57_3.png +0 -0
  668. data/vendor/ggml/examples/yolo/data/labels/57_4.png +0 -0
  669. data/vendor/ggml/examples/yolo/data/labels/57_5.png +0 -0
  670. data/vendor/ggml/examples/yolo/data/labels/57_6.png +0 -0
  671. data/vendor/ggml/examples/yolo/data/labels/57_7.png +0 -0
  672. data/vendor/ggml/examples/yolo/data/labels/58_0.png +0 -0
  673. data/vendor/ggml/examples/yolo/data/labels/58_1.png +0 -0
  674. data/vendor/ggml/examples/yolo/data/labels/58_2.png +0 -0
  675. data/vendor/ggml/examples/yolo/data/labels/58_3.png +0 -0
  676. data/vendor/ggml/examples/yolo/data/labels/58_4.png +0 -0
  677. data/vendor/ggml/examples/yolo/data/labels/58_5.png +0 -0
  678. data/vendor/ggml/examples/yolo/data/labels/58_6.png +0 -0
  679. data/vendor/ggml/examples/yolo/data/labels/58_7.png +0 -0
  680. data/vendor/ggml/examples/yolo/data/labels/59_0.png +0 -0
  681. data/vendor/ggml/examples/yolo/data/labels/59_1.png +0 -0
  682. data/vendor/ggml/examples/yolo/data/labels/59_2.png +0 -0
  683. data/vendor/ggml/examples/yolo/data/labels/59_3.png +0 -0
  684. data/vendor/ggml/examples/yolo/data/labels/59_4.png +0 -0
  685. data/vendor/ggml/examples/yolo/data/labels/59_5.png +0 -0
  686. data/vendor/ggml/examples/yolo/data/labels/59_6.png +0 -0
  687. data/vendor/ggml/examples/yolo/data/labels/59_7.png +0 -0
  688. data/vendor/ggml/examples/yolo/data/labels/60_0.png +0 -0
  689. data/vendor/ggml/examples/yolo/data/labels/60_1.png +0 -0
  690. data/vendor/ggml/examples/yolo/data/labels/60_2.png +0 -0
  691. data/vendor/ggml/examples/yolo/data/labels/60_3.png +0 -0
  692. data/vendor/ggml/examples/yolo/data/labels/60_4.png +0 -0
  693. data/vendor/ggml/examples/yolo/data/labels/60_5.png +0 -0
  694. data/vendor/ggml/examples/yolo/data/labels/60_6.png +0 -0
  695. data/vendor/ggml/examples/yolo/data/labels/60_7.png +0 -0
  696. data/vendor/ggml/examples/yolo/data/labels/61_0.png +0 -0
  697. data/vendor/ggml/examples/yolo/data/labels/61_1.png +0 -0
  698. data/vendor/ggml/examples/yolo/data/labels/61_2.png +0 -0
  699. data/vendor/ggml/examples/yolo/data/labels/61_3.png +0 -0
  700. data/vendor/ggml/examples/yolo/data/labels/61_4.png +0 -0
  701. data/vendor/ggml/examples/yolo/data/labels/61_5.png +0 -0
  702. data/vendor/ggml/examples/yolo/data/labels/61_6.png +0 -0
  703. data/vendor/ggml/examples/yolo/data/labels/61_7.png +0 -0
  704. data/vendor/ggml/examples/yolo/data/labels/62_0.png +0 -0
  705. data/vendor/ggml/examples/yolo/data/labels/62_1.png +0 -0
  706. data/vendor/ggml/examples/yolo/data/labels/62_2.png +0 -0
  707. data/vendor/ggml/examples/yolo/data/labels/62_3.png +0 -0
  708. data/vendor/ggml/examples/yolo/data/labels/62_4.png +0 -0
  709. data/vendor/ggml/examples/yolo/data/labels/62_5.png +0 -0
  710. data/vendor/ggml/examples/yolo/data/labels/62_6.png +0 -0
  711. data/vendor/ggml/examples/yolo/data/labels/62_7.png +0 -0
  712. data/vendor/ggml/examples/yolo/data/labels/63_0.png +0 -0
  713. data/vendor/ggml/examples/yolo/data/labels/63_1.png +0 -0
  714. data/vendor/ggml/examples/yolo/data/labels/63_2.png +0 -0
  715. data/vendor/ggml/examples/yolo/data/labels/63_3.png +0 -0
  716. data/vendor/ggml/examples/yolo/data/labels/63_4.png +0 -0
  717. data/vendor/ggml/examples/yolo/data/labels/63_5.png +0 -0
  718. data/vendor/ggml/examples/yolo/data/labels/63_6.png +0 -0
  719. data/vendor/ggml/examples/yolo/data/labels/63_7.png +0 -0
  720. data/vendor/ggml/examples/yolo/data/labels/64_0.png +0 -0
  721. data/vendor/ggml/examples/yolo/data/labels/64_1.png +0 -0
  722. data/vendor/ggml/examples/yolo/data/labels/64_2.png +0 -0
  723. data/vendor/ggml/examples/yolo/data/labels/64_3.png +0 -0
  724. data/vendor/ggml/examples/yolo/data/labels/64_4.png +0 -0
  725. data/vendor/ggml/examples/yolo/data/labels/64_5.png +0 -0
  726. data/vendor/ggml/examples/yolo/data/labels/64_6.png +0 -0
  727. data/vendor/ggml/examples/yolo/data/labels/64_7.png +0 -0
  728. data/vendor/ggml/examples/yolo/data/labels/65_0.png +0 -0
  729. data/vendor/ggml/examples/yolo/data/labels/65_1.png +0 -0
  730. data/vendor/ggml/examples/yolo/data/labels/65_2.png +0 -0
  731. data/vendor/ggml/examples/yolo/data/labels/65_3.png +0 -0
  732. data/vendor/ggml/examples/yolo/data/labels/65_4.png +0 -0
  733. data/vendor/ggml/examples/yolo/data/labels/65_5.png +0 -0
  734. data/vendor/ggml/examples/yolo/data/labels/65_6.png +0 -0
  735. data/vendor/ggml/examples/yolo/data/labels/65_7.png +0 -0
  736. data/vendor/ggml/examples/yolo/data/labels/66_0.png +0 -0
  737. data/vendor/ggml/examples/yolo/data/labels/66_1.png +0 -0
  738. data/vendor/ggml/examples/yolo/data/labels/66_2.png +0 -0
  739. data/vendor/ggml/examples/yolo/data/labels/66_3.png +0 -0
  740. data/vendor/ggml/examples/yolo/data/labels/66_4.png +0 -0
  741. data/vendor/ggml/examples/yolo/data/labels/66_5.png +0 -0
  742. data/vendor/ggml/examples/yolo/data/labels/66_6.png +0 -0
  743. data/vendor/ggml/examples/yolo/data/labels/66_7.png +0 -0
  744. data/vendor/ggml/examples/yolo/data/labels/67_0.png +0 -0
  745. data/vendor/ggml/examples/yolo/data/labels/67_1.png +0 -0
  746. data/vendor/ggml/examples/yolo/data/labels/67_2.png +0 -0
  747. data/vendor/ggml/examples/yolo/data/labels/67_3.png +0 -0
  748. data/vendor/ggml/examples/yolo/data/labels/67_4.png +0 -0
  749. data/vendor/ggml/examples/yolo/data/labels/67_5.png +0 -0
  750. data/vendor/ggml/examples/yolo/data/labels/67_6.png +0 -0
  751. data/vendor/ggml/examples/yolo/data/labels/67_7.png +0 -0
  752. data/vendor/ggml/examples/yolo/data/labels/68_0.png +0 -0
  753. data/vendor/ggml/examples/yolo/data/labels/68_1.png +0 -0
  754. data/vendor/ggml/examples/yolo/data/labels/68_2.png +0 -0
  755. data/vendor/ggml/examples/yolo/data/labels/68_3.png +0 -0
  756. data/vendor/ggml/examples/yolo/data/labels/68_4.png +0 -0
  757. data/vendor/ggml/examples/yolo/data/labels/68_5.png +0 -0
  758. data/vendor/ggml/examples/yolo/data/labels/68_6.png +0 -0
  759. data/vendor/ggml/examples/yolo/data/labels/68_7.png +0 -0
  760. data/vendor/ggml/examples/yolo/data/labels/69_0.png +0 -0
  761. data/vendor/ggml/examples/yolo/data/labels/69_1.png +0 -0
  762. data/vendor/ggml/examples/yolo/data/labels/69_2.png +0 -0
  763. data/vendor/ggml/examples/yolo/data/labels/69_3.png +0 -0
  764. data/vendor/ggml/examples/yolo/data/labels/69_4.png +0 -0
  765. data/vendor/ggml/examples/yolo/data/labels/69_5.png +0 -0
  766. data/vendor/ggml/examples/yolo/data/labels/69_6.png +0 -0
  767. data/vendor/ggml/examples/yolo/data/labels/69_7.png +0 -0
  768. data/vendor/ggml/examples/yolo/data/labels/70_0.png +0 -0
  769. data/vendor/ggml/examples/yolo/data/labels/70_1.png +0 -0
  770. data/vendor/ggml/examples/yolo/data/labels/70_2.png +0 -0
  771. data/vendor/ggml/examples/yolo/data/labels/70_3.png +0 -0
  772. data/vendor/ggml/examples/yolo/data/labels/70_4.png +0 -0
  773. data/vendor/ggml/examples/yolo/data/labels/70_5.png +0 -0
  774. data/vendor/ggml/examples/yolo/data/labels/70_6.png +0 -0
  775. data/vendor/ggml/examples/yolo/data/labels/70_7.png +0 -0
  776. data/vendor/ggml/examples/yolo/data/labels/71_0.png +0 -0
  777. data/vendor/ggml/examples/yolo/data/labels/71_1.png +0 -0
  778. data/vendor/ggml/examples/yolo/data/labels/71_2.png +0 -0
  779. data/vendor/ggml/examples/yolo/data/labels/71_3.png +0 -0
  780. data/vendor/ggml/examples/yolo/data/labels/71_4.png +0 -0
  781. data/vendor/ggml/examples/yolo/data/labels/71_5.png +0 -0
  782. data/vendor/ggml/examples/yolo/data/labels/71_6.png +0 -0
  783. data/vendor/ggml/examples/yolo/data/labels/71_7.png +0 -0
  784. data/vendor/ggml/examples/yolo/data/labels/72_0.png +0 -0
  785. data/vendor/ggml/examples/yolo/data/labels/72_1.png +0 -0
  786. data/vendor/ggml/examples/yolo/data/labels/72_2.png +0 -0
  787. data/vendor/ggml/examples/yolo/data/labels/72_3.png +0 -0
  788. data/vendor/ggml/examples/yolo/data/labels/72_4.png +0 -0
  789. data/vendor/ggml/examples/yolo/data/labels/72_5.png +0 -0
  790. data/vendor/ggml/examples/yolo/data/labels/72_6.png +0 -0
  791. data/vendor/ggml/examples/yolo/data/labels/72_7.png +0 -0
  792. data/vendor/ggml/examples/yolo/data/labels/73_0.png +0 -0
  793. data/vendor/ggml/examples/yolo/data/labels/73_1.png +0 -0
  794. data/vendor/ggml/examples/yolo/data/labels/73_2.png +0 -0
  795. data/vendor/ggml/examples/yolo/data/labels/73_3.png +0 -0
  796. data/vendor/ggml/examples/yolo/data/labels/73_4.png +0 -0
  797. data/vendor/ggml/examples/yolo/data/labels/73_5.png +0 -0
  798. data/vendor/ggml/examples/yolo/data/labels/73_6.png +0 -0
  799. data/vendor/ggml/examples/yolo/data/labels/73_7.png +0 -0
  800. data/vendor/ggml/examples/yolo/data/labels/74_0.png +0 -0
  801. data/vendor/ggml/examples/yolo/data/labels/74_1.png +0 -0
  802. data/vendor/ggml/examples/yolo/data/labels/74_2.png +0 -0
  803. data/vendor/ggml/examples/yolo/data/labels/74_3.png +0 -0
  804. data/vendor/ggml/examples/yolo/data/labels/74_4.png +0 -0
  805. data/vendor/ggml/examples/yolo/data/labels/74_5.png +0 -0
  806. data/vendor/ggml/examples/yolo/data/labels/74_6.png +0 -0
  807. data/vendor/ggml/examples/yolo/data/labels/74_7.png +0 -0
  808. data/vendor/ggml/examples/yolo/data/labels/75_0.png +0 -0
  809. data/vendor/ggml/examples/yolo/data/labels/75_1.png +0 -0
  810. data/vendor/ggml/examples/yolo/data/labels/75_2.png +0 -0
  811. data/vendor/ggml/examples/yolo/data/labels/75_3.png +0 -0
  812. data/vendor/ggml/examples/yolo/data/labels/75_4.png +0 -0
  813. data/vendor/ggml/examples/yolo/data/labels/75_5.png +0 -0
  814. data/vendor/ggml/examples/yolo/data/labels/75_6.png +0 -0
  815. data/vendor/ggml/examples/yolo/data/labels/75_7.png +0 -0
  816. data/vendor/ggml/examples/yolo/data/labels/76_0.png +0 -0
  817. data/vendor/ggml/examples/yolo/data/labels/76_1.png +0 -0
  818. data/vendor/ggml/examples/yolo/data/labels/76_2.png +0 -0
  819. data/vendor/ggml/examples/yolo/data/labels/76_3.png +0 -0
  820. data/vendor/ggml/examples/yolo/data/labels/76_4.png +0 -0
  821. data/vendor/ggml/examples/yolo/data/labels/76_5.png +0 -0
  822. data/vendor/ggml/examples/yolo/data/labels/76_6.png +0 -0
  823. data/vendor/ggml/examples/yolo/data/labels/76_7.png +0 -0
  824. data/vendor/ggml/examples/yolo/data/labels/77_0.png +0 -0
  825. data/vendor/ggml/examples/yolo/data/labels/77_1.png +0 -0
  826. data/vendor/ggml/examples/yolo/data/labels/77_2.png +0 -0
  827. data/vendor/ggml/examples/yolo/data/labels/77_3.png +0 -0
  828. data/vendor/ggml/examples/yolo/data/labels/77_4.png +0 -0
  829. data/vendor/ggml/examples/yolo/data/labels/77_5.png +0 -0
  830. data/vendor/ggml/examples/yolo/data/labels/77_6.png +0 -0
  831. data/vendor/ggml/examples/yolo/data/labels/77_7.png +0 -0
  832. data/vendor/ggml/examples/yolo/data/labels/78_0.png +0 -0
  833. data/vendor/ggml/examples/yolo/data/labels/78_1.png +0 -0
  834. data/vendor/ggml/examples/yolo/data/labels/78_2.png +0 -0
  835. data/vendor/ggml/examples/yolo/data/labels/78_3.png +0 -0
  836. data/vendor/ggml/examples/yolo/data/labels/78_4.png +0 -0
  837. data/vendor/ggml/examples/yolo/data/labels/78_5.png +0 -0
  838. data/vendor/ggml/examples/yolo/data/labels/78_6.png +0 -0
  839. data/vendor/ggml/examples/yolo/data/labels/78_7.png +0 -0
  840. data/vendor/ggml/examples/yolo/data/labels/79_0.png +0 -0
  841. data/vendor/ggml/examples/yolo/data/labels/79_1.png +0 -0
  842. data/vendor/ggml/examples/yolo/data/labels/79_2.png +0 -0
  843. data/vendor/ggml/examples/yolo/data/labels/79_3.png +0 -0
  844. data/vendor/ggml/examples/yolo/data/labels/79_4.png +0 -0
  845. data/vendor/ggml/examples/yolo/data/labels/79_5.png +0 -0
  846. data/vendor/ggml/examples/yolo/data/labels/79_6.png +0 -0
  847. data/vendor/ggml/examples/yolo/data/labels/79_7.png +0 -0
  848. data/vendor/ggml/examples/yolo/data/labels/80_0.png +0 -0
  849. data/vendor/ggml/examples/yolo/data/labels/80_1.png +0 -0
  850. data/vendor/ggml/examples/yolo/data/labels/80_2.png +0 -0
  851. data/vendor/ggml/examples/yolo/data/labels/80_3.png +0 -0
  852. data/vendor/ggml/examples/yolo/data/labels/80_4.png +0 -0
  853. data/vendor/ggml/examples/yolo/data/labels/80_5.png +0 -0
  854. data/vendor/ggml/examples/yolo/data/labels/80_6.png +0 -0
  855. data/vendor/ggml/examples/yolo/data/labels/80_7.png +0 -0
  856. data/vendor/ggml/examples/yolo/data/labels/81_0.png +0 -0
  857. data/vendor/ggml/examples/yolo/data/labels/81_1.png +0 -0
  858. data/vendor/ggml/examples/yolo/data/labels/81_2.png +0 -0
  859. data/vendor/ggml/examples/yolo/data/labels/81_3.png +0 -0
  860. data/vendor/ggml/examples/yolo/data/labels/81_4.png +0 -0
  861. data/vendor/ggml/examples/yolo/data/labels/81_5.png +0 -0
  862. data/vendor/ggml/examples/yolo/data/labels/81_6.png +0 -0
  863. data/vendor/ggml/examples/yolo/data/labels/81_7.png +0 -0
  864. data/vendor/ggml/examples/yolo/data/labels/82_0.png +0 -0
  865. data/vendor/ggml/examples/yolo/data/labels/82_1.png +0 -0
  866. data/vendor/ggml/examples/yolo/data/labels/82_2.png +0 -0
  867. data/vendor/ggml/examples/yolo/data/labels/82_3.png +0 -0
  868. data/vendor/ggml/examples/yolo/data/labels/82_4.png +0 -0
  869. data/vendor/ggml/examples/yolo/data/labels/82_5.png +0 -0
  870. data/vendor/ggml/examples/yolo/data/labels/82_6.png +0 -0
  871. data/vendor/ggml/examples/yolo/data/labels/82_7.png +0 -0
  872. data/vendor/ggml/examples/yolo/data/labels/83_0.png +0 -0
  873. data/vendor/ggml/examples/yolo/data/labels/83_1.png +0 -0
  874. data/vendor/ggml/examples/yolo/data/labels/83_2.png +0 -0
  875. data/vendor/ggml/examples/yolo/data/labels/83_3.png +0 -0
  876. data/vendor/ggml/examples/yolo/data/labels/83_4.png +0 -0
  877. data/vendor/ggml/examples/yolo/data/labels/83_5.png +0 -0
  878. data/vendor/ggml/examples/yolo/data/labels/83_6.png +0 -0
  879. data/vendor/ggml/examples/yolo/data/labels/83_7.png +0 -0
  880. data/vendor/ggml/examples/yolo/data/labels/84_0.png +0 -0
  881. data/vendor/ggml/examples/yolo/data/labels/84_1.png +0 -0
  882. data/vendor/ggml/examples/yolo/data/labels/84_2.png +0 -0
  883. data/vendor/ggml/examples/yolo/data/labels/84_3.png +0 -0
  884. data/vendor/ggml/examples/yolo/data/labels/84_4.png +0 -0
  885. data/vendor/ggml/examples/yolo/data/labels/84_5.png +0 -0
  886. data/vendor/ggml/examples/yolo/data/labels/84_6.png +0 -0
  887. data/vendor/ggml/examples/yolo/data/labels/84_7.png +0 -0
  888. data/vendor/ggml/examples/yolo/data/labels/85_0.png +0 -0
  889. data/vendor/ggml/examples/yolo/data/labels/85_1.png +0 -0
  890. data/vendor/ggml/examples/yolo/data/labels/85_2.png +0 -0
  891. data/vendor/ggml/examples/yolo/data/labels/85_3.png +0 -0
  892. data/vendor/ggml/examples/yolo/data/labels/85_4.png +0 -0
  893. data/vendor/ggml/examples/yolo/data/labels/85_5.png +0 -0
  894. data/vendor/ggml/examples/yolo/data/labels/85_6.png +0 -0
  895. data/vendor/ggml/examples/yolo/data/labels/85_7.png +0 -0
  896. data/vendor/ggml/examples/yolo/data/labels/86_0.png +0 -0
  897. data/vendor/ggml/examples/yolo/data/labels/86_1.png +0 -0
  898. data/vendor/ggml/examples/yolo/data/labels/86_2.png +0 -0
  899. data/vendor/ggml/examples/yolo/data/labels/86_3.png +0 -0
  900. data/vendor/ggml/examples/yolo/data/labels/86_4.png +0 -0
  901. data/vendor/ggml/examples/yolo/data/labels/86_5.png +0 -0
  902. data/vendor/ggml/examples/yolo/data/labels/86_6.png +0 -0
  903. data/vendor/ggml/examples/yolo/data/labels/86_7.png +0 -0
  904. data/vendor/ggml/examples/yolo/data/labels/87_0.png +0 -0
  905. data/vendor/ggml/examples/yolo/data/labels/87_1.png +0 -0
  906. data/vendor/ggml/examples/yolo/data/labels/87_2.png +0 -0
  907. data/vendor/ggml/examples/yolo/data/labels/87_3.png +0 -0
  908. data/vendor/ggml/examples/yolo/data/labels/87_4.png +0 -0
  909. data/vendor/ggml/examples/yolo/data/labels/87_5.png +0 -0
  910. data/vendor/ggml/examples/yolo/data/labels/87_6.png +0 -0
  911. data/vendor/ggml/examples/yolo/data/labels/87_7.png +0 -0
  912. data/vendor/ggml/examples/yolo/data/labels/88_0.png +0 -0
  913. data/vendor/ggml/examples/yolo/data/labels/88_1.png +0 -0
  914. data/vendor/ggml/examples/yolo/data/labels/88_2.png +0 -0
  915. data/vendor/ggml/examples/yolo/data/labels/88_3.png +0 -0
  916. data/vendor/ggml/examples/yolo/data/labels/88_4.png +0 -0
  917. data/vendor/ggml/examples/yolo/data/labels/88_5.png +0 -0
  918. data/vendor/ggml/examples/yolo/data/labels/88_6.png +0 -0
  919. data/vendor/ggml/examples/yolo/data/labels/88_7.png +0 -0
  920. data/vendor/ggml/examples/yolo/data/labels/89_0.png +0 -0
  921. data/vendor/ggml/examples/yolo/data/labels/89_1.png +0 -0
  922. data/vendor/ggml/examples/yolo/data/labels/89_2.png +0 -0
  923. data/vendor/ggml/examples/yolo/data/labels/89_3.png +0 -0
  924. data/vendor/ggml/examples/yolo/data/labels/89_4.png +0 -0
  925. data/vendor/ggml/examples/yolo/data/labels/89_5.png +0 -0
  926. data/vendor/ggml/examples/yolo/data/labels/89_6.png +0 -0
  927. data/vendor/ggml/examples/yolo/data/labels/89_7.png +0 -0
  928. data/vendor/ggml/examples/yolo/data/labels/90_0.png +0 -0
  929. data/vendor/ggml/examples/yolo/data/labels/90_1.png +0 -0
  930. data/vendor/ggml/examples/yolo/data/labels/90_2.png +0 -0
  931. data/vendor/ggml/examples/yolo/data/labels/90_3.png +0 -0
  932. data/vendor/ggml/examples/yolo/data/labels/90_4.png +0 -0
  933. data/vendor/ggml/examples/yolo/data/labels/90_5.png +0 -0
  934. data/vendor/ggml/examples/yolo/data/labels/90_6.png +0 -0
  935. data/vendor/ggml/examples/yolo/data/labels/90_7.png +0 -0
  936. data/vendor/ggml/examples/yolo/data/labels/91_0.png +0 -0
  937. data/vendor/ggml/examples/yolo/data/labels/91_1.png +0 -0
  938. data/vendor/ggml/examples/yolo/data/labels/91_2.png +0 -0
  939. data/vendor/ggml/examples/yolo/data/labels/91_3.png +0 -0
  940. data/vendor/ggml/examples/yolo/data/labels/91_4.png +0 -0
  941. data/vendor/ggml/examples/yolo/data/labels/91_5.png +0 -0
  942. data/vendor/ggml/examples/yolo/data/labels/91_6.png +0 -0
  943. data/vendor/ggml/examples/yolo/data/labels/91_7.png +0 -0
  944. data/vendor/ggml/examples/yolo/data/labels/92_0.png +0 -0
  945. data/vendor/ggml/examples/yolo/data/labels/92_1.png +0 -0
  946. data/vendor/ggml/examples/yolo/data/labels/92_2.png +0 -0
  947. data/vendor/ggml/examples/yolo/data/labels/92_3.png +0 -0
  948. data/vendor/ggml/examples/yolo/data/labels/92_4.png +0 -0
  949. data/vendor/ggml/examples/yolo/data/labels/92_5.png +0 -0
  950. data/vendor/ggml/examples/yolo/data/labels/92_6.png +0 -0
  951. data/vendor/ggml/examples/yolo/data/labels/92_7.png +0 -0
  952. data/vendor/ggml/examples/yolo/data/labels/93_0.png +0 -0
  953. data/vendor/ggml/examples/yolo/data/labels/93_1.png +0 -0
  954. data/vendor/ggml/examples/yolo/data/labels/93_2.png +0 -0
  955. data/vendor/ggml/examples/yolo/data/labels/93_3.png +0 -0
  956. data/vendor/ggml/examples/yolo/data/labels/93_4.png +0 -0
  957. data/vendor/ggml/examples/yolo/data/labels/93_5.png +0 -0
  958. data/vendor/ggml/examples/yolo/data/labels/93_6.png +0 -0
  959. data/vendor/ggml/examples/yolo/data/labels/93_7.png +0 -0
  960. data/vendor/ggml/examples/yolo/data/labels/94_0.png +0 -0
  961. data/vendor/ggml/examples/yolo/data/labels/94_1.png +0 -0
  962. data/vendor/ggml/examples/yolo/data/labels/94_2.png +0 -0
  963. data/vendor/ggml/examples/yolo/data/labels/94_3.png +0 -0
  964. data/vendor/ggml/examples/yolo/data/labels/94_4.png +0 -0
  965. data/vendor/ggml/examples/yolo/data/labels/94_5.png +0 -0
  966. data/vendor/ggml/examples/yolo/data/labels/94_6.png +0 -0
  967. data/vendor/ggml/examples/yolo/data/labels/94_7.png +0 -0
  968. data/vendor/ggml/examples/yolo/data/labels/95_0.png +0 -0
  969. data/vendor/ggml/examples/yolo/data/labels/95_1.png +0 -0
  970. data/vendor/ggml/examples/yolo/data/labels/95_2.png +0 -0
  971. data/vendor/ggml/examples/yolo/data/labels/95_3.png +0 -0
  972. data/vendor/ggml/examples/yolo/data/labels/95_4.png +0 -0
  973. data/vendor/ggml/examples/yolo/data/labels/95_5.png +0 -0
  974. data/vendor/ggml/examples/yolo/data/labels/95_6.png +0 -0
  975. data/vendor/ggml/examples/yolo/data/labels/95_7.png +0 -0
  976. data/vendor/ggml/examples/yolo/data/labels/96_0.png +0 -0
  977. data/vendor/ggml/examples/yolo/data/labels/96_1.png +0 -0
  978. data/vendor/ggml/examples/yolo/data/labels/96_2.png +0 -0
  979. data/vendor/ggml/examples/yolo/data/labels/96_3.png +0 -0
  980. data/vendor/ggml/examples/yolo/data/labels/96_4.png +0 -0
  981. data/vendor/ggml/examples/yolo/data/labels/96_5.png +0 -0
  982. data/vendor/ggml/examples/yolo/data/labels/96_6.png +0 -0
  983. data/vendor/ggml/examples/yolo/data/labels/96_7.png +0 -0
  984. data/vendor/ggml/examples/yolo/data/labels/97_0.png +0 -0
  985. data/vendor/ggml/examples/yolo/data/labels/97_1.png +0 -0
  986. data/vendor/ggml/examples/yolo/data/labels/97_2.png +0 -0
  987. data/vendor/ggml/examples/yolo/data/labels/97_3.png +0 -0
  988. data/vendor/ggml/examples/yolo/data/labels/97_4.png +0 -0
  989. data/vendor/ggml/examples/yolo/data/labels/97_5.png +0 -0
  990. data/vendor/ggml/examples/yolo/data/labels/97_6.png +0 -0
  991. data/vendor/ggml/examples/yolo/data/labels/97_7.png +0 -0
  992. data/vendor/ggml/examples/yolo/data/labels/98_0.png +0 -0
  993. data/vendor/ggml/examples/yolo/data/labels/98_1.png +0 -0
  994. data/vendor/ggml/examples/yolo/data/labels/98_2.png +0 -0
  995. data/vendor/ggml/examples/yolo/data/labels/98_3.png +0 -0
  996. data/vendor/ggml/examples/yolo/data/labels/98_4.png +0 -0
  997. data/vendor/ggml/examples/yolo/data/labels/98_5.png +0 -0
  998. data/vendor/ggml/examples/yolo/data/labels/98_6.png +0 -0
  999. data/vendor/ggml/examples/yolo/data/labels/98_7.png +0 -0
  1000. data/vendor/ggml/examples/yolo/data/labels/99_0.png +0 -0
  1001. data/vendor/ggml/examples/yolo/data/labels/99_1.png +0 -0
  1002. data/vendor/ggml/examples/yolo/data/labels/99_2.png +0 -0
  1003. data/vendor/ggml/examples/yolo/data/labels/99_3.png +0 -0
  1004. data/vendor/ggml/examples/yolo/data/labels/99_4.png +0 -0
  1005. data/vendor/ggml/examples/yolo/data/labels/99_5.png +0 -0
  1006. data/vendor/ggml/examples/yolo/data/labels/99_6.png +0 -0
  1007. data/vendor/ggml/examples/yolo/data/labels/99_7.png +0 -0
  1008. data/vendor/ggml/examples/yolo/yolo-image.cpp +210 -0
  1009. data/vendor/ggml/examples/yolo/yolo-image.h +39 -0
  1010. data/vendor/ggml/examples/yolo/yolov3-tiny.cpp +661 -0
  1011. data/vendor/ggml/ggml.pc.in +10 -0
  1012. data/vendor/ggml/include/ggml-alloc.h +85 -0
  1013. data/vendor/ggml/include/ggml-backend.h +431 -0
  1014. data/vendor/ggml/include/ggml-blas.h +25 -0
  1015. data/vendor/ggml/include/ggml-cann.h +123 -0
  1016. data/vendor/ggml/include/ggml-cpp.h +39 -0
  1017. data/vendor/ggml/include/ggml-cpu.h +151 -0
  1018. data/vendor/ggml/include/ggml-cuda.h +50 -0
  1019. data/vendor/ggml/include/ggml-hexagon.h +19 -0
  1020. data/vendor/ggml/include/ggml-metal.h +61 -0
  1021. data/vendor/ggml/include/ggml-opencl.h +26 -0
  1022. data/vendor/ggml/include/ggml-openvino.h +37 -0
  1023. data/vendor/ggml/include/ggml-opt.h +256 -0
  1024. data/vendor/ggml/include/ggml-rpc.h +35 -0
  1025. data/vendor/ggml/include/ggml-sycl.h +49 -0
  1026. data/vendor/ggml/include/ggml-virtgpu.h +14 -0
  1027. data/vendor/ggml/include/ggml-vulkan.h +29 -0
  1028. data/vendor/ggml/include/ggml-webgpu.h +19 -0
  1029. data/vendor/ggml/include/ggml-zdnn.h +17 -0
  1030. data/vendor/ggml/include/ggml-zendnn.h +22 -0
  1031. data/vendor/ggml/include/ggml.h +2845 -0
  1032. data/vendor/ggml/include/gguf.h +204 -0
  1033. data/vendor/ggml/requirements.txt +12 -0
  1034. data/vendor/ggml/scripts/gen-authors.sh +9 -0
  1035. data/vendor/ggml/scripts/release.sh +296 -0
  1036. data/vendor/ggml/scripts/sync-llama-am.sh +167 -0
  1037. data/vendor/ggml/scripts/sync-llama.last +1 -0
  1038. data/vendor/ggml/scripts/sync-llama.sh +21 -0
  1039. data/vendor/ggml/scripts/sync-whisper-am.sh +138 -0
  1040. data/vendor/ggml/scripts/sync-whisper.last +1 -0
  1041. data/vendor/ggml/scripts/sync-whisper.sh +17 -0
  1042. data/vendor/ggml/src/CMakeLists.txt +493 -0
  1043. data/vendor/ggml/src/ggml-alloc.c +1248 -0
  1044. data/vendor/ggml/src/ggml-backend-dl.cpp +48 -0
  1045. data/vendor/ggml/src/ggml-backend-dl.h +45 -0
  1046. data/vendor/ggml/src/ggml-backend-impl.h +275 -0
  1047. data/vendor/ggml/src/ggml-backend-meta.cpp +2144 -0
  1048. data/vendor/ggml/src/ggml-backend-reg.cpp +586 -0
  1049. data/vendor/ggml/src/ggml-backend.cpp +2371 -0
  1050. data/vendor/ggml/src/ggml-blas/CMakeLists.txt +101 -0
  1051. data/vendor/ggml/src/ggml-blas/ggml-blas.cpp +522 -0
  1052. data/vendor/ggml/src/ggml-cann/CMakeLists.txt +89 -0
  1053. data/vendor/ggml/src/ggml-cann/acl_tensor.cpp +195 -0
  1054. data/vendor/ggml/src/ggml-cann/acl_tensor.h +349 -0
  1055. data/vendor/ggml/src/ggml-cann/aclnn_ops.cpp +4436 -0
  1056. data/vendor/ggml/src/ggml-cann/aclnn_ops.h +1190 -0
  1057. data/vendor/ggml/src/ggml-cann/common.h +651 -0
  1058. data/vendor/ggml/src/ggml-cann/ggml-cann.cpp +3062 -0
  1059. data/vendor/ggml/src/ggml-common.h +1900 -0
  1060. data/vendor/ggml/src/ggml-cpu/CMakeLists.txt +731 -0
  1061. data/vendor/ggml/src/ggml-cpu/amx/amx.cpp +249 -0
  1062. data/vendor/ggml/src/ggml-cpu/amx/amx.h +8 -0
  1063. data/vendor/ggml/src/ggml-cpu/amx/common.h +115 -0
  1064. data/vendor/ggml/src/ggml-cpu/amx/mmq.cpp +2512 -0
  1065. data/vendor/ggml/src/ggml-cpu/amx/mmq.h +10 -0
  1066. data/vendor/ggml/src/ggml-cpu/arch/arm/cpu-feats.cpp +98 -0
  1067. data/vendor/ggml/src/ggml-cpu/arch/arm/quants.c +4245 -0
  1068. data/vendor/ggml/src/ggml-cpu/arch/arm/repack.cpp +5156 -0
  1069. data/vendor/ggml/src/ggml-cpu/arch/loongarch/quants.c +2158 -0
  1070. data/vendor/ggml/src/ggml-cpu/arch/powerpc/cpu-feats.cpp +82 -0
  1071. data/vendor/ggml/src/ggml-cpu/arch/powerpc/quants.c +2304 -0
  1072. data/vendor/ggml/src/ggml-cpu/arch/riscv/cpu-feats.cpp +38 -0
  1073. data/vendor/ggml/src/ggml-cpu/arch/riscv/quants.c +4553 -0
  1074. data/vendor/ggml/src/ggml-cpu/arch/riscv/repack.cpp +1703 -0
  1075. data/vendor/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp +50 -0
  1076. data/vendor/ggml/src/ggml-cpu/arch/s390/quants.c +1465 -0
  1077. data/vendor/ggml/src/ggml-cpu/arch/wasm/quants.c +1220 -0
  1078. data/vendor/ggml/src/ggml-cpu/arch/x86/cpu-feats.cpp +327 -0
  1079. data/vendor/ggml/src/ggml-cpu/arch/x86/quants.c +3970 -0
  1080. data/vendor/ggml/src/ggml-cpu/arch/x86/repack.cpp +6407 -0
  1081. data/vendor/ggml/src/ggml-cpu/arch-fallback.h +348 -0
  1082. data/vendor/ggml/src/ggml-cpu/binary-ops.cpp +154 -0
  1083. data/vendor/ggml/src/ggml-cpu/binary-ops.h +16 -0
  1084. data/vendor/ggml/src/ggml-cpu/cmake/FindSIMD.cmake +100 -0
  1085. data/vendor/ggml/src/ggml-cpu/cmake/FindSMTIME.cmake +32 -0
  1086. data/vendor/ggml/src/ggml-cpu/common.h +95 -0
  1087. data/vendor/ggml/src/ggml-cpu/ggml-cpu-impl.h +539 -0
  1088. data/vendor/ggml/src/ggml-cpu/ggml-cpu.c +3835 -0
  1089. data/vendor/ggml/src/ggml-cpu/ggml-cpu.cpp +703 -0
  1090. data/vendor/ggml/src/ggml-cpu/hbm.cpp +55 -0
  1091. data/vendor/ggml/src/ggml-cpu/hbm.h +8 -0
  1092. data/vendor/ggml/src/ggml-cpu/kleidiai/kernels.cpp +939 -0
  1093. data/vendor/ggml/src/ggml-cpu/kleidiai/kernels.h +90 -0
  1094. data/vendor/ggml/src/ggml-cpu/kleidiai/kleidiai.cpp +1513 -0
  1095. data/vendor/ggml/src/ggml-cpu/kleidiai/kleidiai.h +17 -0
  1096. data/vendor/ggml/src/ggml-cpu/llamafile/sgemm.cpp +4051 -0
  1097. data/vendor/ggml/src/ggml-cpu/llamafile/sgemm.h +25 -0
  1098. data/vendor/ggml/src/ggml-cpu/ops.cpp +11373 -0
  1099. data/vendor/ggml/src/ggml-cpu/ops.h +119 -0
  1100. data/vendor/ggml/src/ggml-cpu/quants.c +1288 -0
  1101. data/vendor/ggml/src/ggml-cpu/quants.h +103 -0
  1102. data/vendor/ggml/src/ggml-cpu/repack.cpp +4836 -0
  1103. data/vendor/ggml/src/ggml-cpu/repack.h +245 -0
  1104. data/vendor/ggml/src/ggml-cpu/simd-gemm.h +226 -0
  1105. data/vendor/ggml/src/ggml-cpu/simd-mappings.h +1319 -0
  1106. data/vendor/ggml/src/ggml-cpu/spacemit/ime.cpp +1740 -0
  1107. data/vendor/ggml/src/ggml-cpu/spacemit/ime.h +21 -0
  1108. data/vendor/ggml/src/ggml-cpu/spacemit/ime1_kernels.cpp +1027 -0
  1109. data/vendor/ggml/src/ggml-cpu/spacemit/ime2_kernels.cpp +5768 -0
  1110. data/vendor/ggml/src/ggml-cpu/spacemit/ime_env.cpp +320 -0
  1111. data/vendor/ggml/src/ggml-cpu/spacemit/ime_env.h +55 -0
  1112. data/vendor/ggml/src/ggml-cpu/spacemit/ime_kernels.h +189 -0
  1113. data/vendor/ggml/src/ggml-cpu/spacemit/repack.cpp +1795 -0
  1114. data/vendor/ggml/src/ggml-cpu/spacemit/repack.h +14 -0
  1115. data/vendor/ggml/src/ggml-cpu/spacemit/rvv_kernels.cpp +3178 -0
  1116. data/vendor/ggml/src/ggml-cpu/spacemit/rvv_kernels.h +95 -0
  1117. data/vendor/ggml/src/ggml-cpu/spacemit/spine_barrier.h +34 -0
  1118. data/vendor/ggml/src/ggml-cpu/spacemit/spine_mem_pool.cpp +760 -0
  1119. data/vendor/ggml/src/ggml-cpu/spacemit/spine_mem_pool.h +32 -0
  1120. data/vendor/ggml/src/ggml-cpu/spacemit/spine_tcm.h +409 -0
  1121. data/vendor/ggml/src/ggml-cpu/traits.cpp +36 -0
  1122. data/vendor/ggml/src/ggml-cpu/traits.h +38 -0
  1123. data/vendor/ggml/src/ggml-cpu/unary-ops.cpp +337 -0
  1124. data/vendor/ggml/src/ggml-cpu/unary-ops.h +35 -0
  1125. data/vendor/ggml/src/ggml-cpu/vec.cpp +629 -0
  1126. data/vendor/ggml/src/ggml-cpu/vec.h +1588 -0
  1127. data/vendor/ggml/src/ggml-cuda/CMakeLists.txt +268 -0
  1128. data/vendor/ggml/src/ggml-cuda/acc.cu +61 -0
  1129. data/vendor/ggml/src/ggml-cuda/acc.cuh +5 -0
  1130. data/vendor/ggml/src/ggml-cuda/add-id.cu +58 -0
  1131. data/vendor/ggml/src/ggml-cuda/add-id.cuh +3 -0
  1132. data/vendor/ggml/src/ggml-cuda/allreduce.cu +971 -0
  1133. data/vendor/ggml/src/ggml-cuda/allreduce.cuh +29 -0
  1134. data/vendor/ggml/src/ggml-cuda/arange.cu +34 -0
  1135. data/vendor/ggml/src/ggml-cuda/arange.cuh +5 -0
  1136. data/vendor/ggml/src/ggml-cuda/argmax.cu +91 -0
  1137. data/vendor/ggml/src/ggml-cuda/argmax.cuh +3 -0
  1138. data/vendor/ggml/src/ggml-cuda/argsort.cu +266 -0
  1139. data/vendor/ggml/src/ggml-cuda/argsort.cuh +19 -0
  1140. data/vendor/ggml/src/ggml-cuda/binbcast.cu +534 -0
  1141. data/vendor/ggml/src/ggml-cuda/binbcast.cuh +12 -0
  1142. data/vendor/ggml/src/ggml-cuda/clamp.cu +45 -0
  1143. data/vendor/ggml/src/ggml-cuda/clamp.cuh +5 -0
  1144. data/vendor/ggml/src/ggml-cuda/common.cuh +1489 -0
  1145. data/vendor/ggml/src/ggml-cuda/concat.cu +204 -0
  1146. data/vendor/ggml/src/ggml-cuda/concat.cuh +5 -0
  1147. data/vendor/ggml/src/ggml-cuda/conv-transpose-1d.cu +86 -0
  1148. data/vendor/ggml/src/ggml-cuda/conv-transpose-1d.cuh +5 -0
  1149. data/vendor/ggml/src/ggml-cuda/conv2d-dw.cu +161 -0
  1150. data/vendor/ggml/src/ggml-cuda/conv2d-dw.cuh +5 -0
  1151. data/vendor/ggml/src/ggml-cuda/conv2d-transpose.cu +115 -0
  1152. data/vendor/ggml/src/ggml-cuda/conv2d-transpose.cuh +5 -0
  1153. data/vendor/ggml/src/ggml-cuda/conv2d.cu +166 -0
  1154. data/vendor/ggml/src/ggml-cuda/conv2d.cuh +5 -0
  1155. data/vendor/ggml/src/ggml-cuda/convert.cu +892 -0
  1156. data/vendor/ggml/src/ggml-cuda/convert.cuh +66 -0
  1157. data/vendor/ggml/src/ggml-cuda/count-equal.cu +64 -0
  1158. data/vendor/ggml/src/ggml-cuda/count-equal.cuh +5 -0
  1159. data/vendor/ggml/src/ggml-cuda/cp-async.cuh +57 -0
  1160. data/vendor/ggml/src/ggml-cuda/cpy-utils.cuh +217 -0
  1161. data/vendor/ggml/src/ggml-cuda/cpy.cu +558 -0
  1162. data/vendor/ggml/src/ggml-cuda/cpy.cuh +7 -0
  1163. data/vendor/ggml/src/ggml-cuda/cross-entropy-loss.cu +177 -0
  1164. data/vendor/ggml/src/ggml-cuda/cross-entropy-loss.cuh +7 -0
  1165. data/vendor/ggml/src/ggml-cuda/cumsum.cu +307 -0
  1166. data/vendor/ggml/src/ggml-cuda/cumsum.cuh +5 -0
  1167. data/vendor/ggml/src/ggml-cuda/dequantize.cuh +99 -0
  1168. data/vendor/ggml/src/ggml-cuda/diag.cu +77 -0
  1169. data/vendor/ggml/src/ggml-cuda/diag.cuh +5 -0
  1170. data/vendor/ggml/src/ggml-cuda/diagmask.cu +40 -0
  1171. data/vendor/ggml/src/ggml-cuda/diagmask.cuh +5 -0
  1172. data/vendor/ggml/src/ggml-cuda/fattn-common.cuh +1212 -0
  1173. data/vendor/ggml/src/ggml-cuda/fattn-mma-f16.cuh +2020 -0
  1174. data/vendor/ggml/src/ggml-cuda/fattn-tile.cu +61 -0
  1175. data/vendor/ggml/src/ggml-cuda/fattn-tile.cuh +1347 -0
  1176. data/vendor/ggml/src/ggml-cuda/fattn-vec.cuh +600 -0
  1177. data/vendor/ggml/src/ggml-cuda/fattn-wmma-f16.cu +696 -0
  1178. data/vendor/ggml/src/ggml-cuda/fattn-wmma-f16.cuh +51 -0
  1179. data/vendor/ggml/src/ggml-cuda/fattn.cu +562 -0
  1180. data/vendor/ggml/src/ggml-cuda/fattn.cuh +5 -0
  1181. data/vendor/ggml/src/ggml-cuda/fill.cu +37 -0
  1182. data/vendor/ggml/src/ggml-cuda/fill.cuh +3 -0
  1183. data/vendor/ggml/src/ggml-cuda/gated_delta_net.cu +311 -0
  1184. data/vendor/ggml/src/ggml-cuda/gated_delta_net.cuh +4 -0
  1185. data/vendor/ggml/src/ggml-cuda/getrows.cu +300 -0
  1186. data/vendor/ggml/src/ggml-cuda/getrows.cuh +15 -0
  1187. data/vendor/ggml/src/ggml-cuda/ggml-cuda.cu +5684 -0
  1188. data/vendor/ggml/src/ggml-cuda/gla.cu +93 -0
  1189. data/vendor/ggml/src/ggml-cuda/gla.cuh +3 -0
  1190. data/vendor/ggml/src/ggml-cuda/im2col.cu +267 -0
  1191. data/vendor/ggml/src/ggml-cuda/im2col.cuh +6 -0
  1192. data/vendor/ggml/src/ggml-cuda/mean.cu +75 -0
  1193. data/vendor/ggml/src/ggml-cuda/mean.cuh +3 -0
  1194. data/vendor/ggml/src/ggml-cuda/mma.cuh +1456 -0
  1195. data/vendor/ggml/src/ggml-cuda/mmf.cu +191 -0
  1196. data/vendor/ggml/src/ggml-cuda/mmf.cuh +908 -0
  1197. data/vendor/ggml/src/ggml-cuda/mmid.cu +164 -0
  1198. data/vendor/ggml/src/ggml-cuda/mmid.cuh +5 -0
  1199. data/vendor/ggml/src/ggml-cuda/mmq.cu +372 -0
  1200. data/vendor/ggml/src/ggml-cuda/mmq.cuh +4176 -0
  1201. data/vendor/ggml/src/ggml-cuda/mmvf.cu +862 -0
  1202. data/vendor/ggml/src/ggml-cuda/mmvf.cuh +14 -0
  1203. data/vendor/ggml/src/ggml-cuda/mmvq.cu +1161 -0
  1204. data/vendor/ggml/src/ggml-cuda/mmvq.cuh +16 -0
  1205. data/vendor/ggml/src/ggml-cuda/norm.cu +672 -0
  1206. data/vendor/ggml/src/ggml-cuda/norm.cuh +18 -0
  1207. data/vendor/ggml/src/ggml-cuda/opt-step-adamw.cu +78 -0
  1208. data/vendor/ggml/src/ggml-cuda/opt-step-adamw.cuh +5 -0
  1209. data/vendor/ggml/src/ggml-cuda/opt-step-sgd.cu +49 -0
  1210. data/vendor/ggml/src/ggml-cuda/opt-step-sgd.cuh +5 -0
  1211. data/vendor/ggml/src/ggml-cuda/out-prod.cu +84 -0
  1212. data/vendor/ggml/src/ggml-cuda/out-prod.cuh +3 -0
  1213. data/vendor/ggml/src/ggml-cuda/pad.cu +106 -0
  1214. data/vendor/ggml/src/ggml-cuda/pad.cuh +5 -0
  1215. data/vendor/ggml/src/ggml-cuda/pad_reflect_1d.cu +91 -0
  1216. data/vendor/ggml/src/ggml-cuda/pad_reflect_1d.cuh +5 -0
  1217. data/vendor/ggml/src/ggml-cuda/pool2d.cu +94 -0
  1218. data/vendor/ggml/src/ggml-cuda/pool2d.cuh +5 -0
  1219. data/vendor/ggml/src/ggml-cuda/quantize.cu +443 -0
  1220. data/vendor/ggml/src/ggml-cuda/quantize.cuh +41 -0
  1221. data/vendor/ggml/src/ggml-cuda/reduce_rows.cuh +39 -0
  1222. data/vendor/ggml/src/ggml-cuda/roll.cu +67 -0
  1223. data/vendor/ggml/src/ggml-cuda/roll.cuh +5 -0
  1224. data/vendor/ggml/src/ggml-cuda/rope.cu +665 -0
  1225. data/vendor/ggml/src/ggml-cuda/rope.cuh +9 -0
  1226. data/vendor/ggml/src/ggml-cuda/scale.cu +34 -0
  1227. data/vendor/ggml/src/ggml-cuda/scale.cuh +5 -0
  1228. data/vendor/ggml/src/ggml-cuda/set-rows.cu +330 -0
  1229. data/vendor/ggml/src/ggml-cuda/set-rows.cuh +7 -0
  1230. data/vendor/ggml/src/ggml-cuda/set.cu +39 -0
  1231. data/vendor/ggml/src/ggml-cuda/set.cuh +7 -0
  1232. data/vendor/ggml/src/ggml-cuda/snake.cu +72 -0
  1233. data/vendor/ggml/src/ggml-cuda/snake.cuh +8 -0
  1234. data/vendor/ggml/src/ggml-cuda/softcap.cu +34 -0
  1235. data/vendor/ggml/src/ggml-cuda/softcap.cuh +5 -0
  1236. data/vendor/ggml/src/ggml-cuda/softmax.cu +472 -0
  1237. data/vendor/ggml/src/ggml-cuda/softmax.cuh +7 -0
  1238. data/vendor/ggml/src/ggml-cuda/solve_tri.cu +275 -0
  1239. data/vendor/ggml/src/ggml-cuda/solve_tri.cuh +3 -0
  1240. data/vendor/ggml/src/ggml-cuda/ssm-conv.cu +197 -0
  1241. data/vendor/ggml/src/ggml-cuda/ssm-conv.cuh +3 -0
  1242. data/vendor/ggml/src/ggml-cuda/ssm-scan.cu +342 -0
  1243. data/vendor/ggml/src/ggml-cuda/ssm-scan.cuh +3 -0
  1244. data/vendor/ggml/src/ggml-cuda/sum.cu +41 -0
  1245. data/vendor/ggml/src/ggml-cuda/sum.cuh +5 -0
  1246. data/vendor/ggml/src/ggml-cuda/sumrows.cu +43 -0
  1247. data/vendor/ggml/src/ggml-cuda/sumrows.cuh +4 -0
  1248. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_1-ncols2_16.cu +6 -0
  1249. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_1-ncols2_32.cu +6 -0
  1250. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_1-ncols2_8.cu +12 -0
  1251. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_16-ncols2_1.cu +10 -0
  1252. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_16-ncols2_2.cu +10 -0
  1253. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_16-ncols2_4.cu +12 -0
  1254. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_16.cu +6 -0
  1255. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_32.cu +6 -0
  1256. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_4.cu +12 -0
  1257. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_8.cu +12 -0
  1258. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_32-ncols2_1.cu +10 -0
  1259. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_32-ncols2_2.cu +10 -0
  1260. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_4-ncols2_16.cu +6 -0
  1261. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_4-ncols2_2.cu +10 -0
  1262. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_4-ncols2_4.cu +12 -0
  1263. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_4-ncols2_8.cu +12 -0
  1264. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_64-ncols2_1.cu +10 -0
  1265. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_8-ncols2_1.cu +10 -0
  1266. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_8-ncols2_2.cu +10 -0
  1267. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_8-ncols2_4.cu +12 -0
  1268. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_8-ncols2_8.cu +12 -0
  1269. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq112-dv112.cu +5 -0
  1270. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq128-dv128.cu +5 -0
  1271. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq192-dv128.cu +5 -0
  1272. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq256-dv256.cu +5 -0
  1273. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq320-dv256.cu +5 -0
  1274. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq40-dv40.cu +5 -0
  1275. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq512-dv512.cu +5 -0
  1276. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq576-dv512.cu +5 -0
  1277. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq64-dv64.cu +5 -0
  1278. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq72-dv72.cu +5 -0
  1279. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq80-dv80.cu +5 -0
  1280. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq96-dv96.cu +5 -0
  1281. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-bf16.cu +7 -0
  1282. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-f16.cu +7 -0
  1283. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q4_0.cu +7 -0
  1284. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q4_1.cu +7 -0
  1285. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q5_0.cu +7 -0
  1286. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q5_1.cu +7 -0
  1287. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q8_0.cu +7 -0
  1288. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-f16-bf16.cu +7 -0
  1289. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-f16-f16.cu +7 -0
  1290. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-f16-q4_0.cu +7 -0
  1291. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-f16-q4_1.cu +7 -0
  1292. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-f16-q5_0.cu +7 -0
  1293. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-f16-q5_1.cu +7 -0
  1294. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-f16-q8_0.cu +7 -0
  1295. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_0-bf16.cu +7 -0
  1296. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_0-f16.cu +7 -0
  1297. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_0-q4_0.cu +7 -0
  1298. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_0-q4_1.cu +7 -0
  1299. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_0-q5_0.cu +7 -0
  1300. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_0-q5_1.cu +7 -0
  1301. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_0-q8_0.cu +7 -0
  1302. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_1-bf16.cu +7 -0
  1303. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_1-f16.cu +7 -0
  1304. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_1-q4_0.cu +7 -0
  1305. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_1-q4_1.cu +7 -0
  1306. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_1-q5_0.cu +7 -0
  1307. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_1-q5_1.cu +7 -0
  1308. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_1-q8_0.cu +7 -0
  1309. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_0-bf16.cu +7 -0
  1310. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_0-f16.cu +7 -0
  1311. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_0-q4_0.cu +7 -0
  1312. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_0-q4_1.cu +7 -0
  1313. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_0-q5_0.cu +7 -0
  1314. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_0-q5_1.cu +7 -0
  1315. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_0-q8_0.cu +7 -0
  1316. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_1-bf16.cu +7 -0
  1317. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_1-f16.cu +7 -0
  1318. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_1-q4_0.cu +7 -0
  1319. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_1-q4_1.cu +7 -0
  1320. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_1-q5_0.cu +7 -0
  1321. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_1-q5_1.cu +7 -0
  1322. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_1-q8_0.cu +7 -0
  1323. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q8_0-bf16.cu +7 -0
  1324. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q8_0-f16.cu +7 -0
  1325. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q8_0-q4_0.cu +7 -0
  1326. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q8_0-q4_1.cu +7 -0
  1327. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q8_0-q5_0.cu +7 -0
  1328. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q8_0-q5_1.cu +7 -0
  1329. data/vendor/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q8_0-q8_0.cu +7 -0
  1330. data/vendor/ggml/src/ggml-cuda/template-instances/generate_cu_files.py +110 -0
  1331. data/vendor/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_1.cu +5 -0
  1332. data/vendor/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_10.cu +5 -0
  1333. data/vendor/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_11.cu +5 -0
  1334. data/vendor/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_12.cu +5 -0
  1335. data/vendor/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_13.cu +5 -0
  1336. data/vendor/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_14.cu +5 -0
  1337. data/vendor/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_15.cu +5 -0
  1338. data/vendor/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_16.cu +5 -0
  1339. data/vendor/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_2.cu +5 -0
  1340. data/vendor/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_3.cu +5 -0
  1341. data/vendor/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_4.cu +5 -0
  1342. data/vendor/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_5.cu +5 -0
  1343. data/vendor/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_6.cu +5 -0
  1344. data/vendor/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_7.cu +5 -0
  1345. data/vendor/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_8.cu +5 -0
  1346. data/vendor/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_9.cu +5 -0
  1347. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-iq1_s.cu +5 -0
  1348. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-iq2_s.cu +5 -0
  1349. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-iq2_xs.cu +5 -0
  1350. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-iq2_xxs.cu +5 -0
  1351. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-iq3_s.cu +5 -0
  1352. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-iq3_xxs.cu +5 -0
  1353. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-iq4_nl.cu +5 -0
  1354. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-iq4_xs.cu +5 -0
  1355. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-mxfp4.cu +5 -0
  1356. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-nvfp4.cu +5 -0
  1357. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-q1_0.cu +5 -0
  1358. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-q2_k.cu +5 -0
  1359. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-q3_k.cu +5 -0
  1360. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-q4_0.cu +5 -0
  1361. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-q4_1.cu +5 -0
  1362. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-q4_k.cu +5 -0
  1363. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-q5_0.cu +5 -0
  1364. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-q5_1.cu +5 -0
  1365. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-q5_k.cu +5 -0
  1366. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-q6_k.cu +5 -0
  1367. data/vendor/ggml/src/ggml-cuda/template-instances/mmq-instance-q8_0.cu +5 -0
  1368. data/vendor/ggml/src/ggml-cuda/top-k.cu +95 -0
  1369. data/vendor/ggml/src/ggml-cuda/top-k.cuh +3 -0
  1370. data/vendor/ggml/src/ggml-cuda/topk-moe.cu +415 -0
  1371. data/vendor/ggml/src/ggml-cuda/topk-moe.cuh +27 -0
  1372. data/vendor/ggml/src/ggml-cuda/tri.cu +136 -0
  1373. data/vendor/ggml/src/ggml-cuda/tri.cuh +5 -0
  1374. data/vendor/ggml/src/ggml-cuda/tsembd.cu +47 -0
  1375. data/vendor/ggml/src/ggml-cuda/tsembd.cuh +5 -0
  1376. data/vendor/ggml/src/ggml-cuda/unary.cu +640 -0
  1377. data/vendor/ggml/src/ggml-cuda/unary.cuh +114 -0
  1378. data/vendor/ggml/src/ggml-cuda/upscale.cu +293 -0
  1379. data/vendor/ggml/src/ggml-cuda/upscale.cuh +5 -0
  1380. data/vendor/ggml/src/ggml-cuda/vecdotq.cuh +1317 -0
  1381. data/vendor/ggml/src/ggml-cuda/vendors/cuda.h +28 -0
  1382. data/vendor/ggml/src/ggml-cuda/vendors/hip.h +304 -0
  1383. data/vendor/ggml/src/ggml-cuda/vendors/musa.h +150 -0
  1384. data/vendor/ggml/src/ggml-cuda/wkv.cu +199 -0
  1385. data/vendor/ggml/src/ggml-cuda/wkv.cuh +7 -0
  1386. data/vendor/ggml/src/ggml-hexagon/CMakeLists.txt +118 -0
  1387. data/vendor/ggml/src/ggml-hexagon/ggml-hexagon.cpp +3680 -0
  1388. data/vendor/ggml/src/ggml-hexagon/htp/CMakeLists.txt +78 -0
  1389. data/vendor/ggml/src/ggml-hexagon/htp/act-ops.c +782 -0
  1390. data/vendor/ggml/src/ggml-hexagon/htp/argsort-ops.c +293 -0
  1391. data/vendor/ggml/src/ggml-hexagon/htp/binary-ops.c +872 -0
  1392. data/vendor/ggml/src/ggml-hexagon/htp/cmake-toolchain.cmake +157 -0
  1393. data/vendor/ggml/src/ggml-hexagon/htp/cpy-ops.c +275 -0
  1394. data/vendor/ggml/src/ggml-hexagon/htp/cumsum-ops.c +270 -0
  1395. data/vendor/ggml/src/ggml-hexagon/htp/diag-ops.c +216 -0
  1396. data/vendor/ggml/src/ggml-hexagon/htp/fill-ops.c +123 -0
  1397. data/vendor/ggml/src/ggml-hexagon/htp/flash-attn-ops.c +727 -0
  1398. data/vendor/ggml/src/ggml-hexagon/htp/gated-delta-net-ops.c +955 -0
  1399. data/vendor/ggml/src/ggml-hexagon/htp/get-rows-ops.c +124 -0
  1400. data/vendor/ggml/src/ggml-hexagon/htp/hex-dma.c +63 -0
  1401. data/vendor/ggml/src/ggml-hexagon/htp/hex-dma.h +372 -0
  1402. data/vendor/ggml/src/ggml-hexagon/htp/hex-dump.h +86 -0
  1403. data/vendor/ggml/src/ggml-hexagon/htp/hex-fastdiv.h +37 -0
  1404. data/vendor/ggml/src/ggml-hexagon/htp/hex-utils.h +137 -0
  1405. data/vendor/ggml/src/ggml-hexagon/htp/hmx-flash-attn-ops.c +1841 -0
  1406. data/vendor/ggml/src/ggml-hexagon/htp/hmx-matmul-ops.c +1785 -0
  1407. data/vendor/ggml/src/ggml-hexagon/htp/hmx-ops.h +71 -0
  1408. data/vendor/ggml/src/ggml-hexagon/htp/hmx-profile.h +34 -0
  1409. data/vendor/ggml/src/ggml-hexagon/htp/hmx-queue.c +158 -0
  1410. data/vendor/ggml/src/ggml-hexagon/htp/hmx-queue.h +134 -0
  1411. data/vendor/ggml/src/ggml-hexagon/htp/hmx-utils.h +200 -0
  1412. data/vendor/ggml/src/ggml-hexagon/htp/htp-ctx.h +111 -0
  1413. data/vendor/ggml/src/ggml-hexagon/htp/htp-ops.h +181 -0
  1414. data/vendor/ggml/src/ggml-hexagon/htp/htp_iface.idl +22 -0
  1415. data/vendor/ggml/src/ggml-hexagon/htp/hvx-arith.h +443 -0
  1416. data/vendor/ggml/src/ggml-hexagon/htp/hvx-base.h +308 -0
  1417. data/vendor/ggml/src/ggml-hexagon/htp/hvx-copy.h +262 -0
  1418. data/vendor/ggml/src/ggml-hexagon/htp/hvx-div.h +291 -0
  1419. data/vendor/ggml/src/ggml-hexagon/htp/hvx-dump.h +129 -0
  1420. data/vendor/ggml/src/ggml-hexagon/htp/hvx-exp.h +216 -0
  1421. data/vendor/ggml/src/ggml-hexagon/htp/hvx-floor.h +100 -0
  1422. data/vendor/ggml/src/ggml-hexagon/htp/hvx-inverse.h +210 -0
  1423. data/vendor/ggml/src/ggml-hexagon/htp/hvx-reduce.h +296 -0
  1424. data/vendor/ggml/src/ggml-hexagon/htp/hvx-repl.h +74 -0
  1425. data/vendor/ggml/src/ggml-hexagon/htp/hvx-scale.h +133 -0
  1426. data/vendor/ggml/src/ggml-hexagon/htp/hvx-sigmoid.h +142 -0
  1427. data/vendor/ggml/src/ggml-hexagon/htp/hvx-sqrt.h +126 -0
  1428. data/vendor/ggml/src/ggml-hexagon/htp/hvx-types.h +36 -0
  1429. data/vendor/ggml/src/ggml-hexagon/htp/hvx-utils.h +19 -0
  1430. data/vendor/ggml/src/ggml-hexagon/htp/main.c +880 -0
  1431. data/vendor/ggml/src/ggml-hexagon/htp/matmul-ops.c +3173 -0
  1432. data/vendor/ggml/src/ggml-hexagon/htp/repeat-ops.c +148 -0
  1433. data/vendor/ggml/src/ggml-hexagon/htp/rope-ops.c +494 -0
  1434. data/vendor/ggml/src/ggml-hexagon/htp/set-rows-ops.c +184 -0
  1435. data/vendor/ggml/src/ggml-hexagon/htp/softmax-ops.c +407 -0
  1436. data/vendor/ggml/src/ggml-hexagon/htp/solve-tri-ops.c +267 -0
  1437. data/vendor/ggml/src/ggml-hexagon/htp/ssm-conv.c +340 -0
  1438. data/vendor/ggml/src/ggml-hexagon/htp/sum-rows-ops.c +128 -0
  1439. data/vendor/ggml/src/ggml-hexagon/htp/unary-ops.c +657 -0
  1440. data/vendor/ggml/src/ggml-hexagon/htp/vtcm-utils.h +16 -0
  1441. data/vendor/ggml/src/ggml-hexagon/htp/worker-pool.c +293 -0
  1442. data/vendor/ggml/src/ggml-hexagon/htp/worker-pool.h +57 -0
  1443. data/vendor/ggml/src/ggml-hexagon/htp-drv.cpp +418 -0
  1444. data/vendor/ggml/src/ggml-hexagon/htp-drv.h +121 -0
  1445. data/vendor/ggml/src/ggml-hexagon/libdl.h +79 -0
  1446. data/vendor/ggml/src/ggml-hexagon/libggml-htp.inf +40 -0
  1447. data/vendor/ggml/src/ggml-hexagon/op-desc.h +153 -0
  1448. data/vendor/ggml/src/ggml-hip/CMakeLists.txt +157 -0
  1449. data/vendor/ggml/src/ggml-impl.h +783 -0
  1450. data/vendor/ggml/src/ggml-metal/CMakeLists.txt +124 -0
  1451. data/vendor/ggml/src/ggml-metal/ggml-metal-common.cpp +457 -0
  1452. data/vendor/ggml/src/ggml-metal/ggml-metal-common.h +52 -0
  1453. data/vendor/ggml/src/ggml-metal/ggml-metal-context.h +41 -0
  1454. data/vendor/ggml/src/ggml-metal/ggml-metal-context.m +739 -0
  1455. data/vendor/ggml/src/ggml-metal/ggml-metal-device.cpp +2053 -0
  1456. data/vendor/ggml/src/ggml-metal/ggml-metal-device.h +296 -0
  1457. data/vendor/ggml/src/ggml-metal/ggml-metal-device.m +1829 -0
  1458. data/vendor/ggml/src/ggml-metal/ggml-metal-impl.h +1175 -0
  1459. data/vendor/ggml/src/ggml-metal/ggml-metal-ops.cpp +4606 -0
  1460. data/vendor/ggml/src/ggml-metal/ggml-metal-ops.h +97 -0
  1461. data/vendor/ggml/src/ggml-metal/ggml-metal.cpp +950 -0
  1462. data/vendor/ggml/src/ggml-metal/ggml-metal.metal +10679 -0
  1463. data/vendor/ggml/src/ggml-musa/CMakeLists.txt +124 -0
  1464. data/vendor/ggml/src/ggml-musa/mudnn.cu +112 -0
  1465. data/vendor/ggml/src/ggml-musa/mudnn.cuh +12 -0
  1466. data/vendor/ggml/src/ggml-opencl/CMakeLists.txt +189 -0
  1467. data/vendor/ggml/src/ggml-opencl/ggml-opencl.cpp +16374 -0
  1468. data/vendor/ggml/src/ggml-opencl/kernels/add.cl +190 -0
  1469. data/vendor/ggml/src/ggml-opencl/kernels/add_id.cl +42 -0
  1470. data/vendor/ggml/src/ggml-opencl/kernels/argsort.cl +86 -0
  1471. data/vendor/ggml/src/ggml-opencl/kernels/clamp.cl +20 -0
  1472. data/vendor/ggml/src/ggml-opencl/kernels/concat.cl +51 -0
  1473. data/vendor/ggml/src/ggml-opencl/kernels/conv2d.cl +185 -0
  1474. data/vendor/ggml/src/ggml-opencl/kernels/conv2d_f16_f32.cl +176 -0
  1475. data/vendor/ggml/src/ggml-opencl/kernels/cpy.cl +229 -0
  1476. data/vendor/ggml/src/ggml-opencl/kernels/cumsum.cl +139 -0
  1477. data/vendor/ggml/src/ggml-opencl/kernels/cvt.cl +1471 -0
  1478. data/vendor/ggml/src/ggml-opencl/kernels/diag.cl +27 -0
  1479. data/vendor/ggml/src/ggml-opencl/kernels/diag_mask_inf.cl +58 -0
  1480. data/vendor/ggml/src/ggml-opencl/kernels/div.cl +138 -0
  1481. data/vendor/ggml/src/ggml-opencl/kernels/embed_kernel.py +26 -0
  1482. data/vendor/ggml/src/ggml-opencl/kernels/exp.cl +125 -0
  1483. data/vendor/ggml/src/ggml-opencl/kernels/expm1.cl +113 -0
  1484. data/vendor/ggml/src/ggml-opencl/kernels/fill.cl +17 -0
  1485. data/vendor/ggml/src/ggml-opencl/kernels/flash_attn_f16.cl +370 -0
  1486. data/vendor/ggml/src/ggml-opencl/kernels/flash_attn_f32.cl +371 -0
  1487. data/vendor/ggml/src/ggml-opencl/kernels/flash_attn_f32_f16.cl +373 -0
  1488. data/vendor/ggml/src/ggml-opencl/kernels/gelu.cl +89 -0
  1489. data/vendor/ggml/src/ggml-opencl/kernels/gemm_moe_mxfp4_f32.cl +162 -0
  1490. data/vendor/ggml/src/ggml-opencl/kernels/gemm_moe_mxfp4_f32_ns.cl +302 -0
  1491. data/vendor/ggml/src/ggml-opencl/kernels/gemm_moe_q4_0_f32_ns.cl +252 -0
  1492. data/vendor/ggml/src/ggml-opencl/kernels/gemm_moe_q4_1_f32_ns.cl +254 -0
  1493. data/vendor/ggml/src/ggml-opencl/kernels/gemm_moe_q5_0_f32_ns.cl +256 -0
  1494. data/vendor/ggml/src/ggml-opencl/kernels/gemm_moe_q5_1_f32_ns.cl +258 -0
  1495. data/vendor/ggml/src/ggml-opencl/kernels/gemm_noshuffle_iq4_nl_f32.cl +150 -0
  1496. data/vendor/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q4_0_f32.cl +139 -0
  1497. data/vendor/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q4_1_f32.cl +132 -0
  1498. data/vendor/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q4_k_f32.cl +172 -0
  1499. data/vendor/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q5_k_f32.cl +176 -0
  1500. data/vendor/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q6_k_f32.cl +140 -0
  1501. data/vendor/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q8_0_f32.cl +129 -0
  1502. data/vendor/ggml/src/ggml-opencl/kernels/gemm_xmem_f16_f32_os8.cl +233 -0
  1503. data/vendor/ggml/src/ggml-opencl/kernels/gemv_moe_mxfp4_f32.cl +156 -0
  1504. data/vendor/ggml/src/ggml-opencl/kernels/gemv_moe_mxfp4_f32_ns.cl +161 -0
  1505. data/vendor/ggml/src/ggml-opencl/kernels/gemv_moe_q4_0_f32_ns.cl +116 -0
  1506. data/vendor/ggml/src/ggml-opencl/kernels/gemv_moe_q4_1_f32_ns.cl +119 -0
  1507. data/vendor/ggml/src/ggml-opencl/kernels/gemv_moe_q5_0_f32_ns.cl +119 -0
  1508. data/vendor/ggml/src/ggml-opencl/kernels/gemv_moe_q5_1_f32_ns.cl +121 -0
  1509. data/vendor/ggml/src/ggml-opencl/kernels/gemv_noshuffle_iq4_nl_f32.cl +302 -0
  1510. data/vendor/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q4_0_f32.cl +274 -0
  1511. data/vendor/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q4_0_f32_spec.cl +268 -0
  1512. data/vendor/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q4_1_f32.cl +283 -0
  1513. data/vendor/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q4_k_f32.cl +318 -0
  1514. data/vendor/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q5_k_f32.cl +326 -0
  1515. data/vendor/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q6_k_f32.cl +293 -0
  1516. data/vendor/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q8_0_f32.cl +195 -0
  1517. data/vendor/ggml/src/ggml-opencl/kernels/get_rows.cl +187 -0
  1518. data/vendor/ggml/src/ggml-opencl/kernels/glu.cl +378 -0
  1519. data/vendor/ggml/src/ggml-opencl/kernels/group_norm.cl +121 -0
  1520. data/vendor/ggml/src/ggml-opencl/kernels/im2col_f16.cl +57 -0
  1521. data/vendor/ggml/src/ggml-opencl/kernels/im2col_f32.cl +57 -0
  1522. data/vendor/ggml/src/ggml-opencl/kernels/l2_norm.cl +71 -0
  1523. data/vendor/ggml/src/ggml-opencl/kernels/mean.cl +140 -0
  1524. data/vendor/ggml/src/ggml-opencl/kernels/moe_reorder_b.cl +30 -0
  1525. data/vendor/ggml/src/ggml-opencl/kernels/moe_sort_by_expert.cl +82 -0
  1526. data/vendor/ggml/src/ggml-opencl/kernels/mul.cl +152 -0
  1527. data/vendor/ggml/src/ggml-opencl/kernels/mul_mat_f16_f32.cl +130 -0
  1528. data/vendor/ggml/src/ggml-opencl/kernels/mul_mm_f16_f32_kq_kqv.cl +273 -0
  1529. data/vendor/ggml/src/ggml-opencl/kernels/mul_mm_f16_f32_l4_lm.cl +146 -0
  1530. data/vendor/ggml/src/ggml-opencl/kernels/mul_mm_f32_f32_l4_lm.cl +147 -0
  1531. data/vendor/ggml/src/ggml-opencl/kernels/mul_mm_iq4_nl_f32_l4_lm.cl +171 -0
  1532. data/vendor/ggml/src/ggml-opencl/kernels/mul_mm_q4_0_f32_l4_lm.cl +163 -0
  1533. data/vendor/ggml/src/ggml-opencl/kernels/mul_mm_q4_1_f32_l4_lm.cl +165 -0
  1534. data/vendor/ggml/src/ggml-opencl/kernels/mul_mm_q4_k_f32_l4_lm.cl +179 -0
  1535. data/vendor/ggml/src/ggml-opencl/kernels/mul_mm_q5_k_f32_l4_lm.cl +192 -0
  1536. data/vendor/ggml/src/ggml-opencl/kernels/mul_mm_q6_k_f32_l4_lm.cl +158 -0
  1537. data/vendor/ggml/src/ggml-opencl/kernels/mul_mm_q8_0_f32_l4_lm.cl +154 -0
  1538. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_f16_f16.cl +118 -0
  1539. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_f16_f32.cl +118 -0
  1540. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_f16_f32_1row.cl +94 -0
  1541. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_f16_f32_l4.cl +84 -0
  1542. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_f32_f32.cl +118 -0
  1543. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_id_mxfp4_f32.cl +189 -0
  1544. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_id_mxfp4_f32_flat.cl +176 -0
  1545. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_id_q4_0_f32_8x_flat.cl +283 -0
  1546. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_id_q8_0_f32.cl +140 -0
  1547. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_id_q8_0_f32_flat.cl +222 -0
  1548. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_iq4_nl_f32.cl +164 -0
  1549. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_iq4_nl_f32_flat.cl +202 -0
  1550. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_mxfp4_f32.cl +144 -0
  1551. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_mxfp4_f32_flat.cl +167 -0
  1552. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_q4_0_f32.cl +192 -0
  1553. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_q4_0_f32_1d_16x_flat.cl +307 -0
  1554. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_q4_0_f32_1d_8x_flat.cl +265 -0
  1555. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_q4_0_f32_8x_flat.cl +272 -0
  1556. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_q4_0_f32_v.cl +254 -0
  1557. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_q4_1_f32.cl +219 -0
  1558. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_q4_1_f32_flat.cl +229 -0
  1559. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_q4_k_f32.cl +180 -0
  1560. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_q4_k_f32_flat.cl +196 -0
  1561. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_q5_k_f32.cl +187 -0
  1562. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_q5_k_f32_flat.cl +203 -0
  1563. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_q6_k_f32.cl +194 -0
  1564. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_q6_k_f32_flat.cl +194 -0
  1565. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_q8_0_f32.cl +125 -0
  1566. data/vendor/ggml/src/ggml-opencl/kernels/mul_mv_q8_0_f32_flat.cl +202 -0
  1567. data/vendor/ggml/src/ggml-opencl/kernels/neg.cl +125 -0
  1568. data/vendor/ggml/src/ggml-opencl/kernels/norm.cl +161 -0
  1569. data/vendor/ggml/src/ggml-opencl/kernels/pad.cl +39 -0
  1570. data/vendor/ggml/src/ggml-opencl/kernels/relu.cl +16 -0
  1571. data/vendor/ggml/src/ggml-opencl/kernels/repeat.cl +38 -0
  1572. data/vendor/ggml/src/ggml-opencl/kernels/rms_norm.cl +190 -0
  1573. data/vendor/ggml/src/ggml-opencl/kernels/rope.cl +747 -0
  1574. data/vendor/ggml/src/ggml-opencl/kernels/scale.cl +27 -0
  1575. data/vendor/ggml/src/ggml-opencl/kernels/set_rows.cl +208 -0
  1576. data/vendor/ggml/src/ggml-opencl/kernels/sigmoid.cl +29 -0
  1577. data/vendor/ggml/src/ggml-opencl/kernels/silu.cl +30 -0
  1578. data/vendor/ggml/src/ggml-opencl/kernels/softmax_4_f16.cl +108 -0
  1579. data/vendor/ggml/src/ggml-opencl/kernels/softmax_4_f32.cl +108 -0
  1580. data/vendor/ggml/src/ggml-opencl/kernels/softmax_f16.cl +107 -0
  1581. data/vendor/ggml/src/ggml-opencl/kernels/softmax_f32.cl +107 -0
  1582. data/vendor/ggml/src/ggml-opencl/kernels/softplus.cl +116 -0
  1583. data/vendor/ggml/src/ggml-opencl/kernels/solve_tri.cl +51 -0
  1584. data/vendor/ggml/src/ggml-opencl/kernels/sqr.cl +53 -0
  1585. data/vendor/ggml/src/ggml-opencl/kernels/sqrt.cl +53 -0
  1586. data/vendor/ggml/src/ggml-opencl/kernels/ssm_conv.cl +77 -0
  1587. data/vendor/ggml/src/ggml-opencl/kernels/sub.cl +138 -0
  1588. data/vendor/ggml/src/ggml-opencl/kernels/sum_rows.cl +140 -0
  1589. data/vendor/ggml/src/ggml-opencl/kernels/tanh.cl +109 -0
  1590. data/vendor/ggml/src/ggml-opencl/kernels/transpose.cl +143 -0
  1591. data/vendor/ggml/src/ggml-opencl/kernels/tri.cl +32 -0
  1592. data/vendor/ggml/src/ggml-opencl/kernels/tsembd.cl +48 -0
  1593. data/vendor/ggml/src/ggml-opencl/kernels/upscale.cl +120 -0
  1594. data/vendor/ggml/src/ggml-openvino/CMakeLists.txt +22 -0
  1595. data/vendor/ggml/src/ggml-openvino/ggml-decoder.cpp +985 -0
  1596. data/vendor/ggml/src/ggml-openvino/ggml-decoder.h +294 -0
  1597. data/vendor/ggml/src/ggml-openvino/ggml-openvino-extra.cpp +380 -0
  1598. data/vendor/ggml/src/ggml-openvino/ggml-openvino-extra.h +182 -0
  1599. data/vendor/ggml/src/ggml-openvino/ggml-openvino.cpp +1132 -0
  1600. data/vendor/ggml/src/ggml-openvino/ggml-quants.cpp +956 -0
  1601. data/vendor/ggml/src/ggml-openvino/ggml-quants.h +153 -0
  1602. data/vendor/ggml/src/ggml-openvino/openvino/decoder.h +74 -0
  1603. data/vendor/ggml/src/ggml-openvino/openvino/frontend.cpp +27 -0
  1604. data/vendor/ggml/src/ggml-openvino/openvino/frontend.h +23 -0
  1605. data/vendor/ggml/src/ggml-openvino/openvino/input_model.cpp +17 -0
  1606. data/vendor/ggml/src/ggml-openvino/openvino/input_model.h +29 -0
  1607. data/vendor/ggml/src/ggml-openvino/openvino/node_context.h +112 -0
  1608. data/vendor/ggml/src/ggml-openvino/openvino/op/cont.cpp +48 -0
  1609. data/vendor/ggml/src/ggml-openvino/openvino/op/cpy.cpp +21 -0
  1610. data/vendor/ggml/src/ggml-openvino/openvino/op/flash_attn_ext.cpp +90 -0
  1611. data/vendor/ggml/src/ggml-openvino/openvino/op/get_rows.cpp +69 -0
  1612. data/vendor/ggml/src/ggml-openvino/openvino/op/glu_geglu.cpp +61 -0
  1613. data/vendor/ggml/src/ggml-openvino/openvino/op/glu_swiglu.cpp +62 -0
  1614. data/vendor/ggml/src/ggml-openvino/openvino/op/mulmat.cpp +90 -0
  1615. data/vendor/ggml/src/ggml-openvino/openvino/op/permute.cpp +102 -0
  1616. data/vendor/ggml/src/ggml-openvino/openvino/op/reshape.cpp +83 -0
  1617. data/vendor/ggml/src/ggml-openvino/openvino/op/rms_norm.cpp +46 -0
  1618. data/vendor/ggml/src/ggml-openvino/openvino/op/rope.cpp +149 -0
  1619. data/vendor/ggml/src/ggml-openvino/openvino/op/scale.cpp +41 -0
  1620. data/vendor/ggml/src/ggml-openvino/openvino/op/set_rows.cpp +76 -0
  1621. data/vendor/ggml/src/ggml-openvino/openvino/op/softmax.cpp +89 -0
  1622. data/vendor/ggml/src/ggml-openvino/openvino/op/transpose.cpp +23 -0
  1623. data/vendor/ggml/src/ggml-openvino/openvino/op/unary_gelu.cpp +25 -0
  1624. data/vendor/ggml/src/ggml-openvino/openvino/op/unary_silu.cpp +27 -0
  1625. data/vendor/ggml/src/ggml-openvino/openvino/op/view.cpp +53 -0
  1626. data/vendor/ggml/src/ggml-openvino/openvino/op_table.cpp +47 -0
  1627. data/vendor/ggml/src/ggml-openvino/openvino/op_table.h +40 -0
  1628. data/vendor/ggml/src/ggml-openvino/openvino/pass/fuse_to_sdpa.cpp +60 -0
  1629. data/vendor/ggml/src/ggml-openvino/openvino/pass/fuse_to_sdpa.h +17 -0
  1630. data/vendor/ggml/src/ggml-openvino/openvino/pass/mark_decompression_convert_constant_folding.h +29 -0
  1631. data/vendor/ggml/src/ggml-openvino/openvino/pass/squeeze_matmul.cpp +58 -0
  1632. data/vendor/ggml/src/ggml-openvino/openvino/pass/squeeze_matmul.h +17 -0
  1633. data/vendor/ggml/src/ggml-openvino/openvino/rt_info/weightless_caching_attributes.hpp +41 -0
  1634. data/vendor/ggml/src/ggml-openvino/openvino/translate_session.cpp +317 -0
  1635. data/vendor/ggml/src/ggml-openvino/openvino/translate_session.h +28 -0
  1636. data/vendor/ggml/src/ggml-openvino/openvino/utils.cpp +257 -0
  1637. data/vendor/ggml/src/ggml-openvino/openvino/utils.h +86 -0
  1638. data/vendor/ggml/src/ggml-openvino/utils.cpp +880 -0
  1639. data/vendor/ggml/src/ggml-openvino/utils.h +143 -0
  1640. data/vendor/ggml/src/ggml-opt.cpp +1094 -0
  1641. data/vendor/ggml/src/ggml-quants.c +5491 -0
  1642. data/vendor/ggml/src/ggml-quants.h +112 -0
  1643. data/vendor/ggml/src/ggml-rpc/CMakeLists.txt +33 -0
  1644. data/vendor/ggml/src/ggml-rpc/ggml-rpc.cpp +1974 -0
  1645. data/vendor/ggml/src/ggml-rpc/transport.cpp +683 -0
  1646. data/vendor/ggml/src/ggml-rpc/transport.h +34 -0
  1647. data/vendor/ggml/src/ggml-sycl/CMakeLists.txt +207 -0
  1648. data/vendor/ggml/src/ggml-sycl/add-id.cpp +81 -0
  1649. data/vendor/ggml/src/ggml-sycl/add-id.hpp +8 -0
  1650. data/vendor/ggml/src/ggml-sycl/backend.hpp +48 -0
  1651. data/vendor/ggml/src/ggml-sycl/binbcast.cpp +346 -0
  1652. data/vendor/ggml/src/ggml-sycl/binbcast.hpp +39 -0
  1653. data/vendor/ggml/src/ggml-sycl/common.cpp +155 -0
  1654. data/vendor/ggml/src/ggml-sycl/common.hpp +1002 -0
  1655. data/vendor/ggml/src/ggml-sycl/concat.cpp +202 -0
  1656. data/vendor/ggml/src/ggml-sycl/concat.hpp +20 -0
  1657. data/vendor/ggml/src/ggml-sycl/conv.cpp +101 -0
  1658. data/vendor/ggml/src/ggml-sycl/conv.hpp +20 -0
  1659. data/vendor/ggml/src/ggml-sycl/convert.cpp +825 -0
  1660. data/vendor/ggml/src/ggml-sycl/convert.hpp +64 -0
  1661. data/vendor/ggml/src/ggml-sycl/count-equal.cpp +79 -0
  1662. data/vendor/ggml/src/ggml-sycl/count-equal.hpp +9 -0
  1663. data/vendor/ggml/src/ggml-sycl/cpy.cpp +602 -0
  1664. data/vendor/ggml/src/ggml-sycl/cpy.hpp +223 -0
  1665. data/vendor/ggml/src/ggml-sycl/cumsum.cpp +148 -0
  1666. data/vendor/ggml/src/ggml-sycl/cumsum.hpp +5 -0
  1667. data/vendor/ggml/src/ggml-sycl/dequantize.hpp +975 -0
  1668. data/vendor/ggml/src/ggml-sycl/diag.cpp +67 -0
  1669. data/vendor/ggml/src/ggml-sycl/diag.hpp +5 -0
  1670. data/vendor/ggml/src/ggml-sycl/dmmv.cpp +1579 -0
  1671. data/vendor/ggml/src/ggml-sycl/dmmv.hpp +27 -0
  1672. data/vendor/ggml/src/ggml-sycl/dpct/helper.hpp +3774 -0
  1673. data/vendor/ggml/src/ggml-sycl/element_wise.cpp +1124 -0
  1674. data/vendor/ggml/src/ggml-sycl/element_wise.hpp +94 -0
  1675. data/vendor/ggml/src/ggml-sycl/fattn-buffers.cpp +56 -0
  1676. data/vendor/ggml/src/ggml-sycl/fattn-buffers.hpp +63 -0
  1677. data/vendor/ggml/src/ggml-sycl/fattn-common.hpp +1181 -0
  1678. data/vendor/ggml/src/ggml-sycl/fattn-tile.cpp +59 -0
  1679. data/vendor/ggml/src/ggml-sycl/fattn-tile.hpp +1246 -0
  1680. data/vendor/ggml/src/ggml-sycl/fattn-vec.hpp +674 -0
  1681. data/vendor/ggml/src/ggml-sycl/fattn.cpp +227 -0
  1682. data/vendor/ggml/src/ggml-sycl/fattn.hpp +22 -0
  1683. data/vendor/ggml/src/ggml-sycl/fill.cpp +55 -0
  1684. data/vendor/ggml/src/ggml-sycl/fill.hpp +5 -0
  1685. data/vendor/ggml/src/ggml-sycl/gated_delta_net.cpp +307 -0
  1686. data/vendor/ggml/src/ggml-sycl/gated_delta_net.hpp +9 -0
  1687. data/vendor/ggml/src/ggml-sycl/gemm.hpp +93 -0
  1688. data/vendor/ggml/src/ggml-sycl/getrows.cpp +219 -0
  1689. data/vendor/ggml/src/ggml-sycl/getrows.hpp +20 -0
  1690. data/vendor/ggml/src/ggml-sycl/ggml-sycl.cpp +5520 -0
  1691. data/vendor/ggml/src/ggml-sycl/gla.cpp +106 -0
  1692. data/vendor/ggml/src/ggml-sycl/gla.hpp +8 -0
  1693. data/vendor/ggml/src/ggml-sycl/im2col.cpp +400 -0
  1694. data/vendor/ggml/src/ggml-sycl/im2col.hpp +23 -0
  1695. data/vendor/ggml/src/ggml-sycl/mmq.cpp +3030 -0
  1696. data/vendor/ggml/src/ggml-sycl/mmq.hpp +33 -0
  1697. data/vendor/ggml/src/ggml-sycl/mmvq.cpp +1380 -0
  1698. data/vendor/ggml/src/ggml-sycl/mmvq.hpp +43 -0
  1699. data/vendor/ggml/src/ggml-sycl/norm.cpp +656 -0
  1700. data/vendor/ggml/src/ggml-sycl/norm.hpp +28 -0
  1701. data/vendor/ggml/src/ggml-sycl/outprod.cpp +47 -0
  1702. data/vendor/ggml/src/ggml-sycl/outprod.hpp +10 -0
  1703. data/vendor/ggml/src/ggml-sycl/pad.cpp +97 -0
  1704. data/vendor/ggml/src/ggml-sycl/pad.hpp +24 -0
  1705. data/vendor/ggml/src/ggml-sycl/pad_reflect_1d.cpp +100 -0
  1706. data/vendor/ggml/src/ggml-sycl/pad_reflect_1d.hpp +10 -0
  1707. data/vendor/ggml/src/ggml-sycl/presets.hpp +79 -0
  1708. data/vendor/ggml/src/ggml-sycl/quantize.hpp +133 -0
  1709. data/vendor/ggml/src/ggml-sycl/quants.hpp +156 -0
  1710. data/vendor/ggml/src/ggml-sycl/repeat_back.cpp +76 -0
  1711. data/vendor/ggml/src/ggml-sycl/repeat_back.hpp +8 -0
  1712. data/vendor/ggml/src/ggml-sycl/roll.cpp +122 -0
  1713. data/vendor/ggml/src/ggml-sycl/roll.hpp +20 -0
  1714. data/vendor/ggml/src/ggml-sycl/rope.cpp +641 -0
  1715. data/vendor/ggml/src/ggml-sycl/rope.hpp +26 -0
  1716. data/vendor/ggml/src/ggml-sycl/set.cpp +73 -0
  1717. data/vendor/ggml/src/ggml-sycl/set.hpp +5 -0
  1718. data/vendor/ggml/src/ggml-sycl/set_rows.cpp +240 -0
  1719. data/vendor/ggml/src/ggml-sycl/set_rows.hpp +8 -0
  1720. data/vendor/ggml/src/ggml-sycl/softmax.cpp +426 -0
  1721. data/vendor/ggml/src/ggml-sycl/softmax.hpp +24 -0
  1722. data/vendor/ggml/src/ggml-sycl/solve_tri.cpp +172 -0
  1723. data/vendor/ggml/src/ggml-sycl/solve_tri.hpp +8 -0
  1724. data/vendor/ggml/src/ggml-sycl/ssm_conv.cpp +132 -0
  1725. data/vendor/ggml/src/ggml-sycl/ssm_conv.hpp +5 -0
  1726. data/vendor/ggml/src/ggml-sycl/ssm_scan.cpp +156 -0
  1727. data/vendor/ggml/src/ggml-sycl/ssm_scan.hpp +5 -0
  1728. data/vendor/ggml/src/ggml-sycl/sycl_hw.cpp +67 -0
  1729. data/vendor/ggml/src/ggml-sycl/sycl_hw.hpp +38 -0
  1730. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-tile-instance-dkq112-dv112.cpp +5 -0
  1731. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-tile-instance-dkq128-dv128.cpp +5 -0
  1732. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-tile-instance-dkq256-dv256.cpp +5 -0
  1733. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-tile-instance-dkq40-dv40.cpp +5 -0
  1734. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-tile-instance-dkq512-dv512.cpp +6 -0
  1735. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-tile-instance-dkq576-dv512.cpp +5 -0
  1736. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-tile-instance-dkq64-dv64.cpp +5 -0
  1737. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-tile-instance-dkq72-dv72.cpp +5 -0
  1738. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-tile-instance-dkq80-dv80.cpp +5 -0
  1739. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-tile-instance-dkq96-dv96.cpp +5 -0
  1740. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-f16.cpp +8 -0
  1741. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-q4_0.cpp +8 -0
  1742. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-q4_1.cpp +8 -0
  1743. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-q5_0.cpp +8 -0
  1744. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-q5_1.cpp +8 -0
  1745. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-q8_0.cpp +8 -0
  1746. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-f16.cpp +8 -0
  1747. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-q4_0.cpp +8 -0
  1748. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-q4_1.cpp +8 -0
  1749. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-q5_0.cpp +8 -0
  1750. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-q5_1.cpp +8 -0
  1751. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-q8_0.cpp +8 -0
  1752. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-f16.cpp +8 -0
  1753. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-q4_0.cpp +8 -0
  1754. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-q4_1.cpp +8 -0
  1755. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-q5_0.cpp +8 -0
  1756. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-q5_1.cpp +8 -0
  1757. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-q8_0.cpp +8 -0
  1758. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-f16.cpp +8 -0
  1759. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-q4_0.cpp +8 -0
  1760. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-q4_1.cpp +8 -0
  1761. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-q5_0.cpp +8 -0
  1762. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-q5_1.cpp +8 -0
  1763. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-q8_0.cpp +8 -0
  1764. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-f16.cpp +8 -0
  1765. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-q4_0.cpp +8 -0
  1766. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-q4_1.cpp +8 -0
  1767. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-q5_0.cpp +8 -0
  1768. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-q5_1.cpp +8 -0
  1769. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-q8_0.cpp +8 -0
  1770. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-f16.cpp +8 -0
  1771. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-q4_0.cpp +8 -0
  1772. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-q4_1.cpp +8 -0
  1773. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-q5_0.cpp +8 -0
  1774. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-q5_1.cpp +8 -0
  1775. data/vendor/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-q8_0.cpp +8 -0
  1776. data/vendor/ggml/src/ggml-sycl/tsembd.cpp +73 -0
  1777. data/vendor/ggml/src/ggml-sycl/tsembd.hpp +20 -0
  1778. data/vendor/ggml/src/ggml-sycl/type.hpp +112 -0
  1779. data/vendor/ggml/src/ggml-sycl/upscale.cpp +410 -0
  1780. data/vendor/ggml/src/ggml-sycl/upscale.hpp +9 -0
  1781. data/vendor/ggml/src/ggml-sycl/vecdotq.hpp +1508 -0
  1782. data/vendor/ggml/src/ggml-sycl/wkv.cpp +293 -0
  1783. data/vendor/ggml/src/ggml-sycl/wkv.hpp +10 -0
  1784. data/vendor/ggml/src/ggml-threading.cpp +12 -0
  1785. data/vendor/ggml/src/ggml-threading.h +14 -0
  1786. data/vendor/ggml/src/ggml-virtgpu/CMakeLists.txt +70 -0
  1787. data/vendor/ggml/src/ggml-virtgpu/apir_cs_ggml-rpc-front.cpp +87 -0
  1788. data/vendor/ggml/src/ggml-virtgpu/backend/CMakeLists.txt +21 -0
  1789. data/vendor/ggml/src/ggml-virtgpu/backend/apir_cs_ggml-rpc-back.cpp +115 -0
  1790. data/vendor/ggml/src/ggml-virtgpu/backend/backend-convert.h +13 -0
  1791. data/vendor/ggml/src/ggml-virtgpu/backend/backend-dispatched-backend.cpp +102 -0
  1792. data/vendor/ggml/src/ggml-virtgpu/backend/backend-dispatched-buffer-type.cpp +105 -0
  1793. data/vendor/ggml/src/ggml-virtgpu/backend/backend-dispatched-buffer.cpp +179 -0
  1794. data/vendor/ggml/src/ggml-virtgpu/backend/backend-dispatched-device.cpp +148 -0
  1795. data/vendor/ggml/src/ggml-virtgpu/backend/backend-dispatched.cpp +51 -0
  1796. data/vendor/ggml/src/ggml-virtgpu/backend/backend-dispatched.gen.h +73 -0
  1797. data/vendor/ggml/src/ggml-virtgpu/backend/backend-dispatched.h +27 -0
  1798. data/vendor/ggml/src/ggml-virtgpu/backend/backend-virgl-apir.h +32 -0
  1799. data/vendor/ggml/src/ggml-virtgpu/backend/backend.cpp +144 -0
  1800. data/vendor/ggml/src/ggml-virtgpu/backend/shared/api_remoting.h +95 -0
  1801. data/vendor/ggml/src/ggml-virtgpu/backend/shared/apir_backend.gen.h +94 -0
  1802. data/vendor/ggml/src/ggml-virtgpu/backend/shared/apir_backend.h +50 -0
  1803. data/vendor/ggml/src/ggml-virtgpu/backend/shared/apir_cs.h +378 -0
  1804. data/vendor/ggml/src/ggml-virtgpu/backend/shared/apir_cs_ggml.h +232 -0
  1805. data/vendor/ggml/src/ggml-virtgpu/backend/shared/apir_cs_rpc.h +58 -0
  1806. data/vendor/ggml/src/ggml-virtgpu/ggml-backend-buffer-type.cpp +81 -0
  1807. data/vendor/ggml/src/ggml-virtgpu/ggml-backend-buffer.cpp +123 -0
  1808. data/vendor/ggml/src/ggml-virtgpu/ggml-backend-device.cpp +160 -0
  1809. data/vendor/ggml/src/ggml-virtgpu/ggml-backend-reg.cpp +213 -0
  1810. data/vendor/ggml/src/ggml-virtgpu/ggml-backend.cpp +71 -0
  1811. data/vendor/ggml/src/ggml-virtgpu/ggml-remoting.h +71 -0
  1812. data/vendor/ggml/src/ggml-virtgpu/ggmlremoting_functions.yaml +166 -0
  1813. data/vendor/ggml/src/ggml-virtgpu/include/apir_hw.h +9 -0
  1814. data/vendor/ggml/src/ggml-virtgpu/regenerate_remoting.py +333 -0
  1815. data/vendor/ggml/src/ggml-virtgpu/virtgpu-apir.h +15 -0
  1816. data/vendor/ggml/src/ggml-virtgpu/virtgpu-forward-backend.cpp +58 -0
  1817. data/vendor/ggml/src/ggml-virtgpu/virtgpu-forward-buffer-type.cpp +110 -0
  1818. data/vendor/ggml/src/ggml-virtgpu/virtgpu-forward-buffer.cpp +173 -0
  1819. data/vendor/ggml/src/ggml-virtgpu/virtgpu-forward-device.cpp +192 -0
  1820. data/vendor/ggml/src/ggml-virtgpu/virtgpu-forward-impl.h +36 -0
  1821. data/vendor/ggml/src/ggml-virtgpu/virtgpu-forward.gen.h +53 -0
  1822. data/vendor/ggml/src/ggml-virtgpu/virtgpu-shm.cpp +99 -0
  1823. data/vendor/ggml/src/ggml-virtgpu/virtgpu-shm.h +23 -0
  1824. data/vendor/ggml/src/ggml-virtgpu/virtgpu-utils.cpp +179 -0
  1825. data/vendor/ggml/src/ggml-virtgpu/virtgpu-utils.h +86 -0
  1826. data/vendor/ggml/src/ggml-virtgpu/virtgpu.cpp +545 -0
  1827. data/vendor/ggml/src/ggml-virtgpu/virtgpu.h +115 -0
  1828. data/vendor/ggml/src/ggml-vulkan/CMakeLists.txt +220 -0
  1829. data/vendor/ggml/src/ggml-vulkan/cmake/host-toolchain.cmake.in +15 -0
  1830. data/vendor/ggml/src/ggml-vulkan/ggml-vulkan.cpp +17208 -0
  1831. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt +31 -0
  1832. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/abs.comp +21 -0
  1833. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/acc.comp +37 -0
  1834. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/add.comp +69 -0
  1835. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/add1.comp +28 -0
  1836. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/add_id.comp +42 -0
  1837. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/arange.comp +20 -0
  1838. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/argmax.comp +60 -0
  1839. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/argsort.comp +86 -0
  1840. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/argsort_large.comp +114 -0
  1841. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/ceil.comp +22 -0
  1842. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/clamp.comp +17 -0
  1843. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/concat.comp +41 -0
  1844. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/contig_copy.comp +49 -0
  1845. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/conv2d_dw.comp +105 -0
  1846. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/conv2d_mm.comp +347 -0
  1847. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/conv_transpose_1d.comp +98 -0
  1848. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/copy.comp +23 -0
  1849. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/copy_from_quant.comp +51 -0
  1850. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/copy_to_quant.comp +320 -0
  1851. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/copy_transpose.comp +67 -0
  1852. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/cos.comp +17 -0
  1853. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/count_equal.comp +31 -0
  1854. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/count_experts.comp +51 -0
  1855. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/cumsum.comp +83 -0
  1856. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/cumsum_multipass1.comp +60 -0
  1857. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/cumsum_multipass2.comp +66 -0
  1858. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_f32.comp +20 -0
  1859. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_funcs.glsl +653 -0
  1860. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_funcs_cm2.glsl +768 -0
  1861. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_head.glsl +13 -0
  1862. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq1_m.comp +42 -0
  1863. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq1_s.comp +35 -0
  1864. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_s.comp +44 -0
  1865. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_xs.comp +43 -0
  1866. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_xxs.comp +49 -0
  1867. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq3_s.comp +40 -0
  1868. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq3_xxs.comp +51 -0
  1869. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq4_nl.comp +32 -0
  1870. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq4_xs.comp +34 -0
  1871. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_mxfp4.comp +32 -0
  1872. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_nvfp4.comp +32 -0
  1873. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q1_0.comp +29 -0
  1874. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q2_k.comp +34 -0
  1875. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q3_k.comp +42 -0
  1876. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q4_0.comp +30 -0
  1877. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q4_1.comp +32 -0
  1878. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q4_k.comp +68 -0
  1879. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q5_0.comp +34 -0
  1880. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q5_1.comp +35 -0
  1881. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q5_k.comp +70 -0
  1882. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q6_k.comp +33 -0
  1883. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q8_0.comp +31 -0
  1884. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/diag.comp +28 -0
  1885. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/diag_mask_inf.comp +34 -0
  1886. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/div.comp +27 -0
  1887. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/elu.comp +27 -0
  1888. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/exp.comp +20 -0
  1889. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/feature-tests/bfloat16.comp +7 -0
  1890. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/feature-tests/coopmat.comp +7 -0
  1891. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/feature-tests/coopmat2.comp +7 -0
  1892. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/feature-tests/integer_dot.comp +7 -0
  1893. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/fill.comp +19 -0
  1894. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn.comp +756 -0
  1895. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_base.glsl +255 -0
  1896. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp +626 -0
  1897. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm2.comp +427 -0
  1898. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_dequant.glsl +123 -0
  1899. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_mask_opt.comp +162 -0
  1900. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_mmq_funcs.glsl +203 -0
  1901. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_split_k_reduce.comp +121 -0
  1902. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/floor.comp +22 -0
  1903. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/gated_delta_net.comp +190 -0
  1904. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/geglu.comp +13 -0
  1905. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/geglu_erf.comp +27 -0
  1906. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/geglu_quick.comp +11 -0
  1907. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/gelu.comp +25 -0
  1908. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/gelu_erf.comp +39 -0
  1909. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/gelu_quick.comp +23 -0
  1910. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/generic_binary_head.glsl +65 -0
  1911. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/generic_head.glsl +11 -0
  1912. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/generic_unary_head.glsl +83 -0
  1913. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/get_rows.comp +42 -0
  1914. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/get_rows_quant.comp +51 -0
  1915. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/glu_head.glsl +28 -0
  1916. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/glu_main.glsl +39 -0
  1917. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/group_norm.comp +66 -0
  1918. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/hardsigmoid.comp +22 -0
  1919. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/hardswish.comp +22 -0
  1920. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/im2col.comp +93 -0
  1921. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/im2col_3d.comp +124 -0
  1922. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/l2_norm.comp +44 -0
  1923. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/leaky_relu.comp +22 -0
  1924. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/log.comp +17 -0
  1925. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul.comp +27 -0
  1926. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_split_k_reduce.comp +48 -0
  1927. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec.comp +169 -0
  1928. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_base.glsl +230 -0
  1929. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iface.glsl +35 -0
  1930. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq1_m.comp +132 -0
  1931. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq1_s.comp +95 -0
  1932. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_s.comp +90 -0
  1933. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_xs.comp +105 -0
  1934. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_xxs.comp +87 -0
  1935. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq3_s.comp +90 -0
  1936. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq3_xxs.comp +88 -0
  1937. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_nc.comp +124 -0
  1938. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_p021.comp +156 -0
  1939. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_q2_k.comp +128 -0
  1940. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_q3_k.comp +132 -0
  1941. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_q4_k.comp +134 -0
  1942. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_q5_k.comp +165 -0
  1943. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_q6_k.comp +130 -0
  1944. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq.comp +143 -0
  1945. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq_funcs.glsl +503 -0
  1946. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp +464 -0
  1947. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp +624 -0
  1948. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_funcs.glsl +600 -0
  1949. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_id_funcs.glsl +74 -0
  1950. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq.comp +311 -0
  1951. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq_funcs.glsl +454 -0
  1952. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq_shmem_types.glsl +93 -0
  1953. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp +194 -0
  1954. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/neg.comp +20 -0
  1955. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/norm.comp +44 -0
  1956. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/opt_step_adamw.comp +42 -0
  1957. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/opt_step_sgd.comp +22 -0
  1958. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/pad.comp +64 -0
  1959. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/pool2d.comp +74 -0
  1960. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/quantize_q8_1.comp +127 -0
  1961. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/reglu.comp +9 -0
  1962. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/relu.comp +21 -0
  1963. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/repeat.comp +26 -0
  1964. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/repeat_back.comp +37 -0
  1965. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm.comp +150 -0
  1966. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm_back.comp +55 -0
  1967. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm_partials.comp +65 -0
  1968. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/roll.comp +46 -0
  1969. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/rope_funcs.glsl +207 -0
  1970. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/rope_head.glsl +19 -0
  1971. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/rope_multi.comp +17 -0
  1972. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/rope_neox.comp +17 -0
  1973. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/rope_norm.comp +17 -0
  1974. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/rope_params.glsl +31 -0
  1975. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/rope_vision.comp +17 -0
  1976. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/round.comp +29 -0
  1977. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/scale.comp +24 -0
  1978. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/sgn.comp +21 -0
  1979. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/sigmoid.comp +20 -0
  1980. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/silu.comp +22 -0
  1981. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/silu_back.comp +26 -0
  1982. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/sin.comp +17 -0
  1983. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/soft_max.comp +195 -0
  1984. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/soft_max_back.comp +54 -0
  1985. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/soft_max_large1.comp +62 -0
  1986. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/soft_max_large2.comp +79 -0
  1987. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/soft_max_large3.comp +65 -0
  1988. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/soft_max_large_common.glsl +53 -0
  1989. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/softplus.comp +23 -0
  1990. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/solve_tri.comp +81 -0
  1991. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/sqrt.comp +17 -0
  1992. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/square.comp +17 -0
  1993. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/ssm_conv.comp +50 -0
  1994. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/ssm_scan.comp +124 -0
  1995. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/step.comp +22 -0
  1996. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/sub.comp +29 -0
  1997. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/sum_rows.comp +47 -0
  1998. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/sum_rows.glsl +25 -0
  1999. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/swiglu.comp +9 -0
  2000. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/swiglu_oai.comp +14 -0
  2001. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/tanh.comp +20 -0
  2002. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/timestep_embedding.comp +42 -0
  2003. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/topk_argsort.comp +118 -0
  2004. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/topk_moe.comp +213 -0
  2005. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/topk_nary_search.comp +246 -0
  2006. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/tri.comp +42 -0
  2007. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/trunc.comp +22 -0
  2008. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/types.glsl +1846 -0
  2009. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/upscale.comp +178 -0
  2010. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/utils.glsl +25 -0
  2011. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp +1183 -0
  2012. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/wkv6.comp +87 -0
  2013. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/wkv7.comp +91 -0
  2014. data/vendor/ggml/src/ggml-vulkan/vulkan-shaders/xielu.comp +35 -0
  2015. data/vendor/ggml/src/ggml-webgpu/CMakeLists.txt +80 -0
  2016. data/vendor/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp +3231 -0
  2017. data/vendor/ggml/src/ggml-webgpu/ggml-webgpu.cpp +4461 -0
  2018. data/vendor/ggml/src/ggml-webgpu/pre_wgsl.hpp +778 -0
  2019. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/add_id.wgsl +64 -0
  2020. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/argmax.wgsl +72 -0
  2021. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/argsort.wgsl +106 -0
  2022. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/argsort_merge.wgsl +134 -0
  2023. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/binary.wgsl +139 -0
  2024. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/common_decls.tmpl +905 -0
  2025. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/concat.wgsl +75 -0
  2026. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/conv2d.wgsl +165 -0
  2027. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/cpy.wgsl +81 -0
  2028. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/cumsum.wgsl +66 -0
  2029. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/embed_wgsl.py +89 -0
  2030. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn.wgsl +706 -0
  2031. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_tile.wgsl +351 -0
  2032. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_blk.wgsl +101 -0
  2033. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_reduce.wgsl +84 -0
  2034. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_split.wgsl +720 -0
  2035. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/gated_delta_net.wgsl +132 -0
  2036. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/get_rows.wgsl +773 -0
  2037. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/glu.wgsl +155 -0
  2038. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/im2col.wgsl +101 -0
  2039. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/memset.wgsl +40 -0
  2040. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat.wgsl +747 -0
  2041. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl +1210 -0
  2042. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_id.wgsl +195 -0
  2043. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_id_gather.wgsl +55 -0
  2044. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_id_vec.wgsl +154 -0
  2045. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_reg_tile.wgsl +149 -0
  2046. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_subgroup_matrix.wgsl +200 -0
  2047. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec.wgsl +133 -0
  2048. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec_acc.tmpl +1433 -0
  2049. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/pad.wgsl +86 -0
  2050. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/repeat.wgsl +67 -0
  2051. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/rms_norm_mul.wgsl +152 -0
  2052. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/rope.wgsl +224 -0
  2053. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/row_norm.wgsl +153 -0
  2054. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/scale.wgsl +63 -0
  2055. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/set.wgsl +109 -0
  2056. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/set_rows.wgsl +109 -0
  2057. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/soft_max.wgsl +245 -0
  2058. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/solve_tri.wgsl +121 -0
  2059. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/ssm_conv.wgsl +65 -0
  2060. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/ssm_scan.wgsl +193 -0
  2061. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/sum_rows.wgsl +55 -0
  2062. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/unary.wgsl +210 -0
  2063. data/vendor/ggml/src/ggml-webgpu/wgsl-shaders/upscale.wgsl +240 -0
  2064. data/vendor/ggml/src/ggml-zdnn/CMakeLists.txt +36 -0
  2065. data/vendor/ggml/src/ggml-zdnn/common.hpp +59 -0
  2066. data/vendor/ggml/src/ggml-zdnn/ggml-zdnn.cpp +637 -0
  2067. data/vendor/ggml/src/ggml-zdnn/mmf.cpp +80 -0
  2068. data/vendor/ggml/src/ggml-zdnn/mmf.hpp +12 -0
  2069. data/vendor/ggml/src/ggml-zdnn/utils.cpp +79 -0
  2070. data/vendor/ggml/src/ggml-zdnn/utils.hpp +19 -0
  2071. data/vendor/ggml/src/ggml-zendnn/CMakeLists.txt +91 -0
  2072. data/vendor/ggml/src/ggml-zendnn/ggml-zendnn.cpp +669 -0
  2073. data/vendor/ggml/src/ggml.c +7777 -0
  2074. data/vendor/ggml/src/ggml.cpp +26 -0
  2075. data/vendor/ggml/src/gguf.cpp +1556 -0
  2076. data/vendor/ggml/tests/CMakeLists.txt +356 -0
  2077. data/vendor/ggml/tests/test-arange.cpp +100 -0
  2078. data/vendor/ggml/tests/test-backend-ops.cpp +9786 -0
  2079. data/vendor/ggml/tests/test-cont.c +170 -0
  2080. data/vendor/ggml/tests/test-conv-transpose-1d.cpp +691 -0
  2081. data/vendor/ggml/tests/test-conv-transpose.c +248 -0
  2082. data/vendor/ggml/tests/test-conv1d-dw-c1.cpp +243 -0
  2083. data/vendor/ggml/tests/test-conv1d-dw-c2.cpp +243 -0
  2084. data/vendor/ggml/tests/test-conv1d.cpp +289 -0
  2085. data/vendor/ggml/tests/test-conv2d-dw.cpp +153 -0
  2086. data/vendor/ggml/tests/test-conv2d.cpp +391 -0
  2087. data/vendor/ggml/tests/test-customop.c +300 -0
  2088. data/vendor/ggml/tests/test-dup.c +111 -0
  2089. data/vendor/ggml/tests/test-interpolate.cpp +166 -0
  2090. data/vendor/ggml/tests/test-opt.cpp +1003 -0
  2091. data/vendor/ggml/tests/test-pad-reflect-1d.cpp +213 -0
  2092. data/vendor/ggml/tests/test-pool.c +274 -0
  2093. data/vendor/ggml/tests/test-quantize-fns.cpp +196 -0
  2094. data/vendor/ggml/tests/test-quantize-perf.cpp +356 -0
  2095. data/vendor/ggml/tests/test-rel-pos.c +87 -0
  2096. data/vendor/ggml/tests/test-roll.cpp +128 -0
  2097. data/vendor/ggml/tests/test-timestep_embedding.cpp +180 -0
  2098. data/vendor-patches/0001-cuda-buffer_from_ptr.patch +253 -0
  2099. data/vendor-patches/0002-cuda-buffer_from_ptr-reuse-iface.patch +117 -0
  2100. data/vendor-patches/0003-cuda-buffer_from_ptr-copy-mode.patch +128 -0
  2101. data/vendor-patches/0004-cuda-cpy-strided.patch +61 -0
  2102. data/vendor-patches/0005-concat-backward.patch +36 -0
  2103. data/vendor-patches/0006-getrows-back-large-vocab.patch +69 -0
  2104. data/vendor-patches/0007-gpt2-backward-kernels.patch +438 -0
  2105. data/vendor-patches/0008-mul-mat-backward-mixed-precision.patch +50 -0
  2106. data/vendor-patches/0009-sched-unsupported-node-diagnostic.patch +26 -0
  2107. metadata +2161 -0
@@ -0,0 +1,2512 @@
1
+ #if defined(__GNUC__)
2
+ #pragma GCC diagnostic ignored "-Wpedantic"
3
+ #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
4
+ #endif
5
+
6
+ #include "amx.h"
7
+ #include "mmq.h"
8
+ #include "ggml-impl.h"
9
+ #include "ggml-cpu-impl.h"
10
+ #include "simd-mappings.h"
11
+ #include "quants.h"
12
+ #include "ggml-quants.h"
13
+ #include <algorithm>
14
+ #include <type_traits>
15
+
16
+ #if defined(__gnu_linux__)
17
+ #include <sys/syscall.h>
18
+ #include <unistd.h>
19
+ #endif
20
+
21
+ #if (defined(_WIN32) || defined(_WIN64))
22
+ #define RESTRICT __restrict
23
+ #else
24
+ #define RESTRICT __restrict__
25
+ #endif
26
+
27
+ #if (defined(_WIN32) || defined(_WIN64))
28
+ #define ALWAYS_INLINE __forceinline
29
+ #elif __has_attribute(always_inline) || defined(__GNUC__)
30
+ #define ALWAYS_INLINE __attribute__((__always_inline__)) inline
31
+ #else
32
+ #define ALWAYS_INLINE inline
33
+ #endif
34
+
35
+ #if defined(__AMX_INT8__) && defined(__AVX512VNNI__)
36
+
37
+ namespace {
38
+
39
+ // Forced unrolling
40
+ template <int n>
41
+ struct Unroll {
42
+ template <typename Func, typename... Args>
43
+ ALWAYS_INLINE void operator()(const Func& f, Args... args) const {
44
+ Unroll<n - 1>{}(f, args...);
45
+ f(std::integral_constant<int, n - 1>{}, args...);
46
+ }
47
+ };
48
+
49
+ template <>
50
+ struct Unroll<1> {
51
+ template <typename Func, typename... Args>
52
+ ALWAYS_INLINE void operator()(const Func& f, Args... args) const {
53
+ f(std::integral_constant<int, 0>{}, args...);
54
+ }
55
+ };
56
+
57
+ // type traits
58
+ template <typename T> struct PackedTypes {};
59
+ template <> struct PackedTypes<block_q4_0> { using type = int8_t; };
60
+ template <> struct PackedTypes<block_q4_1> { using type = uint8_t; };
61
+ template <> struct PackedTypes<block_q8_0> { using type = int8_t; };
62
+ template <typename T> using packed_B_type = typename PackedTypes<T>::type;
63
+
64
+ template <typename T>
65
+ struct do_compensate : std::integral_constant<bool,
66
+ std::is_same<T, block_q8_0>::value> {};
67
+
68
+ template <typename T>
69
+ struct do_unpack : std::integral_constant<bool,
70
+ std::is_same<T, block_q4_0>::value ||
71
+ std::is_same<T, block_q4_1>::value> {};
72
+
73
+ template <typename T>
74
+ struct is_type_qkk : std::integral_constant<bool,
75
+ std::is_same<T, block_q4_K>::value ||
76
+ std::is_same<T, block_q5_K>::value ||
77
+ std::is_same<T, block_q6_K>::value ||
78
+ std::is_same<T, block_iq4_xs>::value> {};
79
+
80
+ #define GGML_DISPATCH_FLOATING_TYPES(TYPE, ...) \
81
+ [&] { \
82
+ switch (TYPE) { \
83
+ case GGML_TYPE_F16: { \
84
+ using type = ggml_fp16_t; \
85
+ constexpr int blck_size = 16; \
86
+ return __VA_ARGS__(); \
87
+ } \
88
+ case GGML_TYPE_BF16: { \
89
+ using type = ggml_bf16_t; \
90
+ constexpr int blck_size = 32; \
91
+ return __VA_ARGS__(); \
92
+ } \
93
+ default: \
94
+ fprintf(stderr, "Unsupported floating data type\n"); \
95
+ } \
96
+ }()
97
+
98
+ #define GGML_DISPATCH_QTYPES(QT, ...) \
99
+ [&] { \
100
+ switch (QT) { \
101
+ case GGML_TYPE_Q4_0: { \
102
+ using type = block_q4_0; \
103
+ using vec_dot_type = block_q8_0; \
104
+ constexpr int blck_size = QK4_0; \
105
+ return __VA_ARGS__(); \
106
+ } \
107
+ case GGML_TYPE_Q4_1: { \
108
+ using type = block_q4_1; \
109
+ using vec_dot_type = block_q8_1; \
110
+ constexpr int blck_size = QK4_1; \
111
+ return __VA_ARGS__(); \
112
+ } \
113
+ case GGML_TYPE_Q8_0: { \
114
+ using type = block_q8_0; \
115
+ using vec_dot_type = block_q8_0; \
116
+ constexpr int blck_size = QK8_0; \
117
+ return __VA_ARGS__(); \
118
+ } \
119
+ case GGML_TYPE_Q4_K: { \
120
+ using type = block_q4_K; \
121
+ using vec_dot_type = block_q8_K; \
122
+ constexpr int blck_size = QK_K; \
123
+ return __VA_ARGS__(); \
124
+ } \
125
+ case GGML_TYPE_Q5_K: { \
126
+ using type = block_q5_K; \
127
+ using vec_dot_type = block_q8_K; \
128
+ constexpr int blck_size = QK_K; \
129
+ return __VA_ARGS__(); \
130
+ } \
131
+ case GGML_TYPE_Q6_K: { \
132
+ using type = block_q6_K; \
133
+ using vec_dot_type = block_q8_K; \
134
+ constexpr int blck_size = QK_K; \
135
+ return __VA_ARGS__(); \
136
+ } \
137
+ case GGML_TYPE_IQ4_XS: { \
138
+ using type = block_iq4_xs; \
139
+ using vec_dot_type = block_q8_K; \
140
+ constexpr int blck_size = QK_K; \
141
+ return __VA_ARGS__(); \
142
+ } \
143
+ default: \
144
+ fprintf(stderr, "Unsupported quantized data type: %d\n", int(TYPE)); \
145
+ } \
146
+ }()
147
+
148
+ #define GGML_DISPATCH_BOOL(BOOL_V, BOOL_NAME, ...) \
149
+ [&] { \
150
+ if (BOOL_V) { \
151
+ constexpr bool BOOL_NAME = true; \
152
+ return __VA_ARGS__(); \
153
+ } else { \
154
+ constexpr bool BOOL_NAME = false; \
155
+ return __VA_ARGS__(); \
156
+ } \
157
+ }()
158
+
159
+ // define amx tile config data structure
160
+ struct tile_config_t{
161
+ uint8_t palette_id = 0;
162
+ uint8_t start_row = 0;
163
+ uint8_t reserved_0[14] = {0};
164
+ uint16_t colsb[16] = {0};
165
+ uint8_t rows[16] = {0};
166
+ };
167
+
168
+ // Notes: amx tile config
169
+ //
170
+ // Typically, TMUL calculates A and B of size 16 x 64 containing INT8 values,
171
+ // and accumulate the result to a 16 x 16 matrix C containing INT32 values,
172
+ //
173
+ // As many GGUF quantized types as `block_size` of 32, so a 16-16-32 config is used
174
+ // instead of the normally used 16-16-64 config.
175
+ //
176
+ // Block A: {16, 32}, dtype = int8_t
177
+ // Block B: {16, 32}, dtype = uint8_t/int8_t
178
+ // Block C: {16, 16}, dtype = int32_t
179
+ //
180
+ // Block B needs to be prepacked to vnni format before feeding into TMUL:
181
+ // packed_B: from {n, k} to {k/vnni_blk, n, vnni_blck}, viewed in 2d, we get {8, 64}
182
+ //
183
+ // Therefore, we get tileconfig:
184
+ // A B C
185
+ // rows 16 8 16
186
+ // colsb 32 64 16
187
+ //
188
+ // For tile distribution, follow a 2-2-4 pattern, e.g. A used TMM2-TMM3, B used TMM0-TMM1,
189
+ // C used TMM4-TMM7:
190
+ // B TMM0 B TMM1
191
+ // A TMM2 C TMM4 C TMM6
192
+ // A TMM3 C TMM5 C TMM7
193
+ //
194
+ // Each `amx` kernel handles 4 blocks at a time: 2MB * 2NB, when m < 2 * BLOCK_M, unpack A
195
+ // will be needed.
196
+ //
197
+ // Here another commonly used pattern 1-3-3 is skipped, as it is mostly used when m <=16;
198
+ // and the single batch gemm (m=1) has a special fast path with `avx512-vnni`.
199
+ //
200
+ // ref: https://www.intel.com/content/www/us/en/developer/articles/code-sample/
201
+ // advanced-matrix-extensions-intrinsics-functions.html
202
+ //
203
+
204
+ inline void ggml_tile_config_init(void) {
205
+ static thread_local bool done = false;
206
+
207
+ if (done) {
208
+ return;
209
+ }
210
+
211
+ alignas(64) tile_config_t tc = {};
212
+ tc.palette_id = 1;
213
+ tc.start_row = 0;
214
+ tc.rows[0] = 8; tc.colsb[0] = 64;
215
+ tc.rows[1] = 8; tc.colsb[1] = 64;
216
+ tc.rows[2] = 16; tc.colsb[2] = 32;
217
+ tc.rows[3] = 16; tc.colsb[3] = 32;
218
+ tc.rows[4] = 16; tc.colsb[4] = 64;
219
+ tc.rows[5] = 16; tc.colsb[5] = 64;
220
+ tc.rows[6] = 16; tc.colsb[6] = 64;
221
+ tc.rows[7] = 16; tc.colsb[7] = 64;
222
+
223
+ _tile_loadconfig(&tc);
224
+ done = true;
225
+ }
226
+
227
+ // we need an extra 16 * 4B (TILE_N * int32_t) for each NB/KB block for compensation.
228
+ // See the notes `s8s8 igemm compensation in avx512-vnni` for detail.
229
+ template <typename TB>
230
+ int get_tile_size() {
231
+ int tile_size = TILE_N * sizeof(TB);
232
+ if (do_compensate<TB>::value) {
233
+ tile_size += TILE_N * sizeof(int32_t);
234
+ }
235
+ if (std::is_same<TB, block_q4_K>::value ||
236
+ std::is_same<TB, block_q5_K>::value) {
237
+ tile_size += TILE_N * 4;
238
+ }
239
+ if (std::is_same<TB, block_iq4_xs>::value) {
240
+ tile_size += TILE_N * 2;
241
+ }
242
+ return tile_size;
243
+ }
244
+
245
+ template <typename TB, int BLOCK_K>
246
+ int get_row_size(int K) {
247
+ int KB = K / BLOCK_K;
248
+ int row_size = KB * sizeof(TB);
249
+ if (do_compensate<TB>::value) {
250
+ row_size += KB * sizeof(int32_t);
251
+ }
252
+ if (std::is_same<TB, block_q4_K>::value ||
253
+ std::is_same<TB, block_q5_K>::value) {
254
+ row_size += KB * 4;
255
+ }
256
+ if (std::is_same<TB, block_iq4_xs>::value) {
257
+ row_size += KB * 2;
258
+ }
259
+ return row_size;
260
+ }
261
+
262
+ // transpose utils
263
+ #define SHUFFLE_EPI32(a, b, mask) \
264
+ _mm256_castps_si256(_mm256_shuffle_ps(_mm256_castsi256_ps(a), _mm256_castsi256_ps(b), mask))
265
+ inline void transpose_8x8_32bit(__m256i * v, __m256i * v1) {
266
+ // unpacking and 32-bit elements
267
+ v1[0] = _mm256_unpacklo_epi32(v[0], v[1]);
268
+ v1[1] = _mm256_unpackhi_epi32(v[0], v[1]);
269
+ v1[2] = _mm256_unpacklo_epi32(v[2], v[3]);
270
+ v1[3] = _mm256_unpackhi_epi32(v[2], v[3]);
271
+ v1[4] = _mm256_unpacklo_epi32(v[4], v[5]);
272
+ v1[5] = _mm256_unpackhi_epi32(v[4], v[5]);
273
+ v1[6] = _mm256_unpacklo_epi32(v[6], v[7]);
274
+ v1[7] = _mm256_unpackhi_epi32(v[6], v[7]);
275
+
276
+ // shuffling the 32-bit elements
277
+ v[0] = SHUFFLE_EPI32(v1[0], v1[2], 0x44);
278
+ v[1] = SHUFFLE_EPI32(v1[0], v1[2], 0xee);
279
+ v[2] = SHUFFLE_EPI32(v1[4], v1[6], 0x44);
280
+ v[3] = SHUFFLE_EPI32(v1[4], v1[6], 0xee);
281
+ v[4] = SHUFFLE_EPI32(v1[1], v1[3], 0x44);
282
+ v[5] = SHUFFLE_EPI32(v1[1], v1[3], 0xee);
283
+ v[6] = SHUFFLE_EPI32(v1[5], v1[7], 0x44);
284
+ v[7] = SHUFFLE_EPI32(v1[5], v1[7], 0xee);
285
+
286
+ // shuffling 128-bit elements
287
+ v1[0] = _mm256_permute2f128_si256(v[2], v[0], 0x02);
288
+ v1[1] = _mm256_permute2f128_si256(v[3], v[1], 0x02);
289
+ v1[2] = _mm256_permute2f128_si256(v[6], v[4], 0x02);
290
+ v1[3] = _mm256_permute2f128_si256(v[7], v[5], 0x02);
291
+ v1[4] = _mm256_permute2f128_si256(v[2], v[0], 0x13);
292
+ v1[5] = _mm256_permute2f128_si256(v[3], v[1], 0x13);
293
+ v1[6] = _mm256_permute2f128_si256(v[6], v[4], 0x13);
294
+ v1[7] = _mm256_permute2f128_si256(v[7], v[5], 0x13);
295
+ }
296
+
297
+ inline void transpose_16x4_32bit(__m512i * r, __m512i * d) {
298
+
299
+ static const __m512i index1 = _mm512_set_epi32(
300
+ 0x0f, 0x0b, 0x07, 0x03,
301
+ 0x0e, 0x0a, 0x06, 0x02,
302
+ 0x0d, 0x09, 0x05, 0x01,
303
+ 0x0c, 0x08, 0x04, 0x00);
304
+
305
+ d[0] = _mm512_permutexvar_epi32(index1, r[0]);
306
+ d[1] = _mm512_permutexvar_epi32(index1, r[1]);
307
+ d[2] = _mm512_permutexvar_epi32(index1, r[2]);
308
+ d[3] = _mm512_permutexvar_epi32(index1, r[3]);
309
+
310
+ r[0] = _mm512_shuffle_i32x4(d[0], d[1], 0x44);
311
+ r[1] = _mm512_shuffle_i32x4(d[0], d[1], 0xee);
312
+ r[2] = _mm512_shuffle_i32x4(d[2], d[3], 0x44);
313
+ r[3] = _mm512_shuffle_i32x4(d[2], d[3], 0xee);
314
+
315
+ d[0] = _mm512_shuffle_i32x4(r[0], r[2], 0x88);
316
+ d[1] = _mm512_shuffle_i32x4(r[0], r[2], 0xdd);
317
+ d[2] = _mm512_shuffle_i32x4(r[1], r[3], 0x88);
318
+ d[3] = _mm512_shuffle_i32x4(r[1], r[3], 0xdd);
319
+ }
320
+
321
+ inline void transpose_16x16_32bit(__m512i * v) {
322
+ __m512i v1[16];
323
+ v1[0] = _mm512_unpacklo_epi32(v[0], v[1]);
324
+ v1[1] = _mm512_unpackhi_epi32(v[0], v[1]);
325
+ v1[2] = _mm512_unpacklo_epi32(v[2], v[3]);
326
+ v1[3] = _mm512_unpackhi_epi32(v[2], v[3]);
327
+ v1[4] = _mm512_unpacklo_epi32(v[4], v[5]);
328
+ v1[5] = _mm512_unpackhi_epi32(v[4], v[5]);
329
+ v1[6] = _mm512_unpacklo_epi32(v[6], v[7]);
330
+ v1[7] = _mm512_unpackhi_epi32(v[6], v[7]);
331
+ v1[8] = _mm512_unpacklo_epi32(v[8], v[9]);
332
+ v1[9] = _mm512_unpackhi_epi32(v[8], v[9]);
333
+ v1[10] = _mm512_unpacklo_epi32(v[10], v[11]);
334
+ v1[11] = _mm512_unpackhi_epi32(v[10], v[11]);
335
+ v1[12] = _mm512_unpacklo_epi32(v[12], v[13]);
336
+ v1[13] = _mm512_unpackhi_epi32(v[12], v[13]);
337
+ v1[14] = _mm512_unpacklo_epi32(v[14], v[15]);
338
+ v1[15] = _mm512_unpackhi_epi32(v[14], v[15]);
339
+
340
+ v[0] = _mm512_unpacklo_epi64(v1[0], v1[2]);
341
+ v[1] = _mm512_unpackhi_epi64(v1[0], v1[2]);
342
+ v[2] = _mm512_unpacklo_epi64(v1[1], v1[3]);
343
+ v[3] = _mm512_unpackhi_epi64(v1[1], v1[3]);
344
+ v[4] = _mm512_unpacklo_epi64(v1[4], v1[6]);
345
+ v[5] = _mm512_unpackhi_epi64(v1[4], v1[6]);
346
+ v[6] = _mm512_unpacklo_epi64(v1[5], v1[7]);
347
+ v[7] = _mm512_unpackhi_epi64(v1[5], v1[7]);
348
+ v[8] = _mm512_unpacklo_epi64(v1[8], v1[10]);
349
+ v[9] = _mm512_unpackhi_epi64(v1[8], v1[10]);
350
+ v[10] = _mm512_unpacklo_epi64(v1[9], v1[11]);
351
+ v[11] = _mm512_unpackhi_epi64(v1[9], v1[11]);
352
+ v[12] = _mm512_unpacklo_epi64(v1[12], v1[14]);
353
+ v[13] = _mm512_unpackhi_epi64(v1[12], v1[14]);
354
+ v[14] = _mm512_unpacklo_epi64(v1[13], v1[15]);
355
+ v[15] = _mm512_unpackhi_epi64(v1[13], v1[15]);
356
+
357
+ v1[0] = _mm512_shuffle_i32x4(v[0], v[4], 0x88);
358
+ v1[1] = _mm512_shuffle_i32x4(v[1], v[5], 0x88);
359
+ v1[2] = _mm512_shuffle_i32x4(v[2], v[6], 0x88);
360
+ v1[3] = _mm512_shuffle_i32x4(v[3], v[7], 0x88);
361
+ v1[4] = _mm512_shuffle_i32x4(v[0], v[4], 0xdd);
362
+ v1[5] = _mm512_shuffle_i32x4(v[1], v[5], 0xdd);
363
+ v1[6] = _mm512_shuffle_i32x4(v[2], v[6], 0xdd);
364
+ v1[7] = _mm512_shuffle_i32x4(v[3], v[7], 0xdd);
365
+ v1[8] = _mm512_shuffle_i32x4(v[8], v[12], 0x88);
366
+ v1[9] = _mm512_shuffle_i32x4(v[9], v[13], 0x88);
367
+ v1[10] = _mm512_shuffle_i32x4(v[10], v[14], 0x88);
368
+ v1[11] = _mm512_shuffle_i32x4(v[11], v[15], 0x88);
369
+ v1[12] = _mm512_shuffle_i32x4(v[8], v[12], 0xdd);
370
+ v1[13] = _mm512_shuffle_i32x4(v[9], v[13], 0xdd);
371
+ v1[14] = _mm512_shuffle_i32x4(v[10], v[14], 0xdd);
372
+ v1[15] = _mm512_shuffle_i32x4(v[11], v[15], 0xdd);
373
+
374
+ v[0] = _mm512_shuffle_i32x4(v1[0], v1[8], 0x88);
375
+ v[1] = _mm512_shuffle_i32x4(v1[1], v1[9], 0x88);
376
+ v[2] = _mm512_shuffle_i32x4(v1[2], v1[10], 0x88);
377
+ v[3] = _mm512_shuffle_i32x4(v1[3], v1[11], 0x88);
378
+ v[4] = _mm512_shuffle_i32x4(v1[4], v1[12], 0x88);
379
+ v[5] = _mm512_shuffle_i32x4(v1[5], v1[13], 0x88);
380
+ v[6] = _mm512_shuffle_i32x4(v1[6], v1[14], 0x88);
381
+ v[7] = _mm512_shuffle_i32x4(v1[7], v1[15], 0x88);
382
+ v[8] = _mm512_shuffle_i32x4(v1[0], v1[8], 0xdd);
383
+ v[9] = _mm512_shuffle_i32x4(v1[1], v1[9], 0xdd);
384
+ v[10] = _mm512_shuffle_i32x4(v1[2], v1[10], 0xdd);
385
+ v[11] = _mm512_shuffle_i32x4(v1[3], v1[11], 0xdd);
386
+ v[12] = _mm512_shuffle_i32x4(v1[4], v1[12], 0xdd);
387
+ v[13] = _mm512_shuffle_i32x4(v1[5], v1[13], 0xdd);
388
+ v[14] = _mm512_shuffle_i32x4(v1[6], v1[14], 0xdd);
389
+ v[15] = _mm512_shuffle_i32x4(v1[7], v1[15], 0xdd);
390
+ }
391
+
392
+ void quantize_row_q8_K_vnni(const float * RESTRICT x, void * RESTRICT vy, int64_t k) {
393
+ assert(k % QK_K == 0);
394
+ const int KB = k / QK_K;
395
+ constexpr int kVecs = QK_K / 16;
396
+
397
+ block_q8_K * y = reinterpret_cast<block_q8_K *>(vy);
398
+
399
+ // hold 16 float vecs from x
400
+ __m512 v[kVecs];
401
+
402
+ // hold the quants vecs
403
+ __m512i vq[kVecs / 4];
404
+
405
+ // hold the packed quants vecs
406
+ __m512i vq_packed[kVecs / 4];
407
+
408
+ const __m512 signBit = _mm512_set1_ps(-0.f);
409
+
410
+ for (int i = 0; i < KB; ++i) {
411
+ // Compute max(abs(e)) for the block
412
+ __m512 vamax = _mm512_set1_ps(0.f);
413
+ for (int j = 0; j < kVecs; ++j) {
414
+ v[j] = _mm512_loadu_ps(x); x += 16;
415
+ vamax = _mm512_max_ps(vamax, _mm512_andnot_ps(signBit, v[j]));
416
+ }
417
+ const float amax = _mm512_reduce_max_ps(vamax);
418
+
419
+ // Quantize these floats
420
+ const float iscale = 127.f / amax;
421
+ y[i].d = GGML_CPU_FP32_TO_FP16(1 / iscale);
422
+ const float id = ( amax != 0.0f ) ? iscale : 0.f;
423
+ const __m512 vscale = _mm512_set1_ps(id);
424
+
425
+ // Apply multiplier and round to nearest integer
426
+ for (int j = 0; j < kVecs; ++j) {
427
+ v[j] = _mm512_mul_ps(v[j], vscale);
428
+ v[j] = _mm512_roundscale_ps(v[j], (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC));
429
+ }
430
+
431
+ // Pack to epi8 vecs
432
+ for (int j = 0; j < kVecs / 4; ++j) {
433
+ __m128i q8_0 = _mm512_cvtepi32_epi8(_mm512_cvtps_epi32(v[j * 4 + 0]));
434
+ __m128i q8_1 = _mm512_cvtepi32_epi8(_mm512_cvtps_epi32(v[j * 4 + 1]));
435
+ __m128i q8_2 = _mm512_cvtepi32_epi8(_mm512_cvtps_epi32(v[j * 4 + 2]));
436
+ __m128i q8_3 = _mm512_cvtepi32_epi8(_mm512_cvtps_epi32(v[j * 4 + 3]));
437
+
438
+ __m256i q8_01 = _mm256_insertf128_si256(_mm256_castsi128_si256(q8_0), (q8_1), 1);
439
+ __m256i q8_23 = _mm256_insertf128_si256(_mm256_castsi128_si256(q8_2), (q8_3), 1);
440
+
441
+ vq[j] = _mm512_inserti32x8(_mm512_castsi256_si512(q8_01), q8_23, 1);
442
+ _mm512_storeu_si512((__m512i *)(y[i].qs + j * 64), vq[j]);
443
+ }
444
+
445
+ // Compute the bsums with vnni
446
+ transpose_16x4_32bit(vq, vq_packed);
447
+
448
+ const __m512i one = _mm512_set1_epi8(1);
449
+ __m512i sum = _mm512_setzero_si512();
450
+ for (int k = 0; k < 4; ++k) {
451
+ sum = _mm512_dpbusd_epi32(sum, one, vq_packed[k]);
452
+ }
453
+ _mm256_storeu_si256((__m256i *)(y[i].bsums), _mm512_cvtepi32_epi16(sum));
454
+ }
455
+ }
456
+
457
+ // quantize A from float to `vec_dot_type`
458
+ template <typename T>
459
+ inline void from_float(const float * x, char * vy, int64_t k);
460
+
461
+ template <>
462
+ inline void from_float<block_q8_0>(const float * x, char * vy, int64_t k) {
463
+ quantize_row_q8_0(x, (block_q8_0 *)vy, k);
464
+ }
465
+
466
+ template <>
467
+ inline void from_float<block_q8_1>(const float * x, char * vy, int64_t k) {
468
+ quantize_row_q8_1(x, (block_q8_1 *)vy, k);
469
+ }
470
+
471
+ template <>
472
+ inline void from_float<block_q8_K>(const float * x, char * vy, int64_t k) {
473
+ #if 1
474
+ // TODO: this is reference impl!
475
+ quantize_row_q8_K_ref(x, (block_q8_K *)vy, k);
476
+ #else
477
+ quantize_row_q8_K_vnni(x, vy, k);
478
+ #endif
479
+ }
480
+
481
+ // load A from memory to array when nrows can not fill in whole tile
482
+ void unpack_A(int8_t * RESTRICT tile, const block_q8_0 * RESTRICT A, int lda, int nr) {
483
+ assert(nr != TILE_M);
484
+ for (int m = 0; m < nr; ++m) {
485
+ const __m256i v = _mm256_loadu_si256((const __m256i *)(A[m * lda].qs));
486
+ _mm256_storeu_si256((__m256i *)(tile + m * TILE_K), v);
487
+ }
488
+ }
489
+
490
+ void unpack_A(int8_t * RESTRICT tile, const block_q8_1 * RESTRICT A, int lda, int nr) {
491
+ assert(nr != TILE_M);
492
+ for (int m = 0; m < nr; ++m) {
493
+ const __m256i v = _mm256_loadu_si256((const __m256i *)(A[m * lda].qs));
494
+ _mm256_storeu_si256((__m256i *)(tile + m * TILE_K), v);
495
+ }
496
+ }
497
+
498
+ template <typename TB>
499
+ void unpack_A(int8_t * RESTRICT tile, const block_q8_K * RESTRICT A, int lda, int k, int nr) {
500
+ assert(nr <= TILE_M);
501
+ for (int m = 0; m < nr; ++m) {
502
+ const __m256i v = _mm256_loadu_si256((const __m256i *)(A[m * lda].qs + k * 32));
503
+ _mm256_storeu_si256((__m256i *)(tile + m * TILE_K), v);
504
+ }
505
+ }
506
+
507
+ template <>
508
+ void unpack_A<block_q6_K>(int8_t * RESTRICT tile, const block_q8_K * RESTRICT A, int lda, int k, int nr) {
509
+ assert(nr <= TILE_M);
510
+ // zero padding k from 16 to 32, so that we don't have to re-config amx
511
+ const __m128i zero = _mm_setzero_si128();
512
+ for (int m = 0; m < nr; ++m) {
513
+ const __m128i v = _mm_loadu_si128((const __m128i *)(A[m * lda].qs + k * 16));
514
+ const __m256i r = _mm256_insertf128_si256(_mm256_castsi128_si256(v), zero, 1);
515
+ _mm256_storeu_si256((__m256i *)(tile + m * TILE_K), r);
516
+ }
517
+ }
518
+
519
+ #define MM256_SET_M128I(a, b) _mm256_insertf128_si256(_mm256_castsi128_si256(b), (a), 1)
520
+ inline __m256i bytes_from_nibbles_32(const uint8_t * rsi) {
521
+ const __m128i tmp = _mm_loadu_si128((const __m128i *)rsi);
522
+ const __m256i bytes = MM256_SET_M128I(_mm_srli_epi16(tmp, 4), tmp);
523
+ const __m256i lowMask = _mm256_set1_epi8(0xF);
524
+ return _mm256_and_si256(lowMask, bytes);
525
+ }
526
+
527
+ // used for block_q4_K
528
+ inline __m512i bytes_from_nibbles_64(const uint8_t * rsi) {
529
+ const __m256i tmp = _mm256_loadu_si256((const __m256i *)rsi);
530
+ const __m256i lowMask = _mm256_set1_epi8(0xF);
531
+ const __m256i q4l = _mm256_and_si256(tmp, lowMask);
532
+ const __m256i q4h = _mm256_and_si256(_mm256_srli_epi16(tmp, 4), lowMask);
533
+ return _mm512_inserti32x8(_mm512_castsi256_si512(q4l), q4h, 1);
534
+ }
535
+
536
+ // used for block_q5_K
537
+ inline __m512i bytes_from_nibbles_64(const uint8_t * qs, const uint8_t * qh, int k) {
538
+ const __m256i lowMask = _mm256_set1_epi8(0xF);
539
+ __m256i hmask = _mm256_set1_epi8(1);
540
+ hmask = _mm256_slli_epi16(hmask, k);
541
+
542
+ const __m256i q5bits = _mm256_loadu_si256((const __m256i *)qs);
543
+ const __m256i hbits = _mm256_loadu_si256((const __m256i *)qh);
544
+
545
+ const __m256i q5l_0 = _mm256_and_si256(q5bits, lowMask);
546
+ const __m256i q5h_0 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_and_si256(hbits, hmask), k + 0), 4);
547
+ const __m256i q5_0 = _mm256_add_epi8(q5l_0, q5h_0);
548
+ hmask = _mm256_slli_epi16(hmask, 1);
549
+
550
+ const __m256i q5l_1 = _mm256_and_si256(_mm256_srli_epi16(q5bits, 4), lowMask);
551
+ const __m256i q5h_1 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_and_si256(hbits, hmask), k + 1), 4);
552
+ const __m256i q5_1 = _mm256_add_epi8(q5l_1, q5h_1);
553
+
554
+ return _mm512_inserti32x8(_mm512_castsi256_si512(q5_0), q5_1, 1);
555
+ }
556
+
557
+ // used for block_q6_K
558
+ inline void bytes_from_nibbles_128(__m512i& r0, __m512i& r1, const uint8_t * qs, const uint8_t * qh) {
559
+ const __m256i m4 = _mm256_set1_epi8(0xF);
560
+ const __m256i m2 = _mm256_set1_epi8(0x3);
561
+
562
+ const __m256i q6bits1 = _mm256_loadu_si256((const __m256i *)qs);
563
+ const __m256i q6bits2 = _mm256_loadu_si256((const __m256i *)(qs + 32));
564
+ const __m256i q6bitsH = _mm256_loadu_si256((const __m256i *)qh);
565
+
566
+ const __m256i q6h_0 = _mm256_slli_epi16(_mm256_and_si256( q6bitsH, m2), 4);
567
+ const __m256i q6h_1 = _mm256_slli_epi16(_mm256_and_si256(_mm256_srli_epi16(q6bitsH, 2), m2), 4);
568
+ const __m256i q6h_2 = _mm256_slli_epi16(_mm256_and_si256(_mm256_srli_epi16(q6bitsH, 4), m2), 4);
569
+ const __m256i q6h_3 = _mm256_slli_epi16(_mm256_and_si256(_mm256_srli_epi16(q6bitsH, 6), m2), 4);
570
+
571
+ const __m256i q6_0 = _mm256_or_si256(_mm256_and_si256(q6bits1, m4), q6h_0);
572
+ const __m256i q6_1 = _mm256_or_si256(_mm256_and_si256(q6bits2, m4), q6h_1);
573
+ const __m256i q6_2 = _mm256_or_si256(_mm256_and_si256(_mm256_srli_epi16(q6bits1, 4), m4), q6h_2);
574
+ const __m256i q6_3 = _mm256_or_si256(_mm256_and_si256(_mm256_srli_epi16(q6bits2, 4), m4), q6h_3);
575
+
576
+ r0 = _mm512_inserti32x8(_mm512_castsi256_si512(q6_0), q6_1, 1);
577
+ r1 = _mm512_inserti32x8(_mm512_castsi256_si512(q6_2), q6_3, 1);
578
+ }
579
+
580
+ inline __m512i packNibbles(__m512i r0, __m512i r1) {
581
+ return _mm512_or_si512(r0, _mm512_slli_epi16(r1, 4));
582
+ }
583
+
584
+ template <typename TB>
585
+ inline void pack_qs(void * RESTRICT packed_B, const TB * RESTRICT B, int KB) {
586
+ int8_t tmp[8 * 64];
587
+ __m256i v[8], v2[8];
588
+ for (int n = 0; n < 8; ++n) {
589
+ v[n] = bytes_from_nibbles_32(B[n * KB].qs);
590
+ }
591
+ transpose_8x8_32bit(v, v2);
592
+ for (int n = 0; n < 8; ++n) {
593
+ _mm256_storeu_si256((__m256i *)(tmp + n * 64), v2[n]);
594
+ }
595
+ for (int n = 0; n < 8; ++n) {
596
+ v[n] = bytes_from_nibbles_32(B[(n + 8) * KB].qs);
597
+ }
598
+ transpose_8x8_32bit(v, v2);
599
+ for (int n = 0; n < 8; ++n) {
600
+ _mm256_storeu_si256((__m256i *)(tmp + n * 64 + 32), v2[n]);
601
+ }
602
+
603
+ // pack again with 128 to fully utilize vector length
604
+ for (int n = 0; n < 8; n += 2) {
605
+ __m512i r0 = _mm512_loadu_si512((const __m512i *)(tmp + n * 64));
606
+ __m512i r1 = _mm512_loadu_si512((const __m512i *)(tmp + n * 64 + 64));
607
+ __m512i r1r0 = packNibbles(r0, r1);
608
+ _mm512_storeu_si512((__m512i *)((char *)packed_B + n * 32), r1r0);
609
+ }
610
+ }
611
+
612
+ template <>
613
+ inline void pack_qs<block_q8_0>(void * RESTRICT packed_B, const block_q8_0 * RESTRICT B, int KB) {
614
+ __m256i v[8], v2[8];
615
+ for (int n = 0; n < 8; ++n) {
616
+ v[n] = _mm256_loadu_si256((const __m256i *)(B[n * KB].qs));
617
+ }
618
+ transpose_8x8_32bit(v, v2);
619
+ for (int n = 0; n < 8; ++n) {
620
+ _mm256_storeu_si256((__m256i *)((char *)packed_B + n * 64), v2[n]);
621
+ }
622
+ for (int n = 0; n < 8; ++n) {
623
+ v[n] = _mm256_loadu_si256((const __m256i *)(B[(n + 8) * KB].qs));
624
+ }
625
+ transpose_8x8_32bit(v, v2);
626
+ for (int n = 0; n < 8; ++n) {
627
+ _mm256_storeu_si256((__m256i *)((char *)packed_B + n * 64 + 32), v2[n]);
628
+ }
629
+ }
630
+
631
+ template <>
632
+ inline void pack_qs<block_q4_K>(void * RESTRICT packed_B, const block_q4_K * RESTRICT B, int KB) {
633
+ __m512i v[16];
634
+ // QK_K 256 with 8 groups, handle 2 groups at a time
635
+ char * pb = (char *)packed_B;
636
+ for (int k = 0; k < QK_K / 64; ++k) {
637
+ // pack 2 groups { n, g, k} to {g, k/4, 4n}
638
+ // e.g. {16, 2, 32} to {2, 8, 64}
639
+ for (int n = 0; n < TILE_N; ++n) {
640
+ v[n] = bytes_from_nibbles_64(B[n * KB].qs + k * 32);
641
+ }
642
+
643
+ transpose_16x16_32bit(v);
644
+
645
+ // pack again with 128 to fully utilize vector length
646
+ for (int n = 0; n < TILE_N; n += 2) {
647
+ _mm512_storeu_si512((__m512i *)pb, packNibbles(v[n], v[n + 1]));
648
+ pb += 64;
649
+ }
650
+ }
651
+ }
652
+
653
+ template <>
654
+ inline void pack_qs<block_q5_K>(void * RESTRICT packed_B, const block_q5_K * RESTRICT B, int KB) {
655
+ __m512i v[16];
656
+ const __m512i lowMask = _mm512_set1_epi8(0xF);
657
+ // QK_K 256 with 8 groups, handle 2 groups at a time
658
+ char * pb = (char *)packed_B;
659
+ char * ph = (char *)packed_B + (QK_K / 2) * TILE_N;
660
+ for (int k = 0; k < QK_K / 64; ++k) {
661
+ // pack 2 groups { n, g, k} to {g, k/4, 4n}
662
+ // e.g. {16, 2, 32} to {2, 8, 64}
663
+ for (int n = 0; n < TILE_N; ++n) {
664
+ v[n] = bytes_from_nibbles_64(B[n * KB].qs + k * 32, B[n * KB].qh, /* group */2 * k);
665
+ }
666
+
667
+ transpose_16x16_32bit(v);
668
+
669
+ // 1. pack lower 4bits with 2 groups
670
+ for (int n = 0; n < TILE_N; n += 2) {
671
+ // get lower 4 bits
672
+ const __m512i r0 = _mm512_and_si512(v[n], lowMask);
673
+ const __m512i r1 = _mm512_and_si512(v[n + 1], lowMask);
674
+ _mm512_storeu_si512((__m512i *)pb, packNibbles(r0, r1)); pb += 64;
675
+ }
676
+
677
+ // 2. pack higher 1bit with 2 groups
678
+ const __m512i hmask = _mm512_set1_epi8(0x10);
679
+ for (int g = 0; g < 2; ++g) {
680
+ __m512i hbits = _mm512_setzero_si512();
681
+ hbits = _mm512_add_epi8(hbits, _mm512_srli_epi16(_mm512_and_si512(v[g * 8 + 0], hmask), 4));
682
+ hbits = _mm512_add_epi8(hbits, _mm512_srli_epi16(_mm512_and_si512(v[g * 8 + 1], hmask), 3));
683
+ hbits = _mm512_add_epi8(hbits, _mm512_srli_epi16(_mm512_and_si512(v[g * 8 + 2], hmask), 2));
684
+ hbits = _mm512_add_epi8(hbits, _mm512_srli_epi16(_mm512_and_si512(v[g * 8 + 3], hmask), 1));
685
+ hbits = _mm512_add_epi8(hbits, _mm512_and_si512(v[g * 8 + 4], hmask) );
686
+ hbits = _mm512_add_epi8(hbits, _mm512_slli_epi16(_mm512_and_si512(v[g * 8 + 5], hmask), 1));
687
+ hbits = _mm512_add_epi8(hbits, _mm512_slli_epi16(_mm512_and_si512(v[g * 8 + 6], hmask), 2));
688
+ hbits = _mm512_add_epi8(hbits, _mm512_slli_epi16(_mm512_and_si512(v[g * 8 + 7], hmask), 3));
689
+ _mm512_storeu_si512((__m512i *)ph, hbits); ph += 64;
690
+ }
691
+ }
692
+ }
693
+
694
+ template <>
695
+ inline void pack_qs<block_q6_K>(void * RESTRICT packed_B, const block_q6_K * RESTRICT B, int KB) {
696
+ __m512i v[32];
697
+ const __m512i lowMask = _mm512_set1_epi8(0xF);
698
+ // QK_K 256 with 8 groups, handle 4 groups at a time
699
+ char * pb = (char *)packed_B;
700
+ char * ph = (char *)packed_B + (QK_K / 2) * TILE_N;
701
+ for (int k = 0; k < QK_K / 128; ++k) {
702
+ for (int n = 0; n < TILE_N; ++n) {
703
+ bytes_from_nibbles_128(v[n], v[n + 16], B[n * KB].ql + k * 64, B[n * KB].qh + k * 32);
704
+ }
705
+
706
+ // top half: group 0,1 or 4,5; bottom half: group 2,3 or 6,7
707
+ transpose_16x16_32bit(v);
708
+ transpose_16x16_32bit(v + 16);
709
+
710
+ // 1. pack lower 4bits with 4 groups
711
+ for (int n = 0; n < 32; n += 2) {
712
+ const __m512i r0 = _mm512_and_si512(v[n], lowMask);
713
+ const __m512i r1 = _mm512_and_si512(v[n + 1], lowMask);
714
+ _mm512_storeu_si512((__m512i *)pb, packNibbles(r0, r1)); pb += 64;
715
+ }
716
+
717
+ // 2. pack higher 2bit with 4 groups
718
+ const __m512i hmask = _mm512_set1_epi8(0x30);
719
+ for (int g = 0; g < 8; ++g) {
720
+ __m512i hbits = _mm512_setzero_si512();
721
+ hbits = _mm512_add_epi8(hbits, _mm512_srli_epi16(_mm512_and_si512(v[g * 4 + 0], hmask), 4));
722
+ hbits = _mm512_add_epi8(hbits, _mm512_srli_epi16(_mm512_and_si512(v[g * 4 + 1], hmask), 2));
723
+ hbits = _mm512_add_epi8(hbits, _mm512_and_si512(v[g * 4 + 2], hmask) );
724
+ hbits = _mm512_add_epi8(hbits, _mm512_slli_epi16(_mm512_and_si512(v[g * 4 + 3], hmask), 2));
725
+ _mm512_storeu_si512((__m512i *)ph, hbits); ph += 64;
726
+ }
727
+ }
728
+ }
729
+
730
+ template <>
731
+ inline void pack_qs<block_iq4_xs>(void * RESTRICT packed_B, const block_iq4_xs * RESTRICT B, int KB) {
732
+ __m512i v[16];
733
+ char * pb = (char *)packed_B;
734
+ for (int k = 0; k < QK_K / 64; ++k) {
735
+ for (int n = 0; n < TILE_N; ++n) {
736
+ __m256i r0 = bytes_from_nibbles_32(B[n * KB].qs + k * 32 + 0);
737
+ __m256i r1 = bytes_from_nibbles_32(B[n * KB].qs + k * 32 + 16);
738
+ v[n] = _mm512_inserti32x8(_mm512_castsi256_si512(r0), r1, 1);
739
+ }
740
+
741
+ transpose_16x16_32bit(v);
742
+
743
+ // pack again with 128 to fully utilize vector length
744
+ for (int n = 0; n < TILE_N; n += 2) {
745
+ _mm512_storeu_si512((__m512i *)pb, packNibbles(v[n], v[n + 1]));
746
+ pb += 64;
747
+ }
748
+ }
749
+ }
750
+
751
+ // pack B to vnni formats in 4bits or 8 bits
752
+ void pack_B(void * RESTRICT packed_B, const block_q4_0 * RESTRICT B, int KB) {
753
+ pack_qs(packed_B, B, KB);
754
+ ggml_half * d0 = reinterpret_cast<ggml_half *>((char *)packed_B + TILE_N * TILE_K / 2);
755
+ for (int n = 0; n < TILE_N; ++n) {
756
+ d0[n] = B[n * KB].d;
757
+ }
758
+ }
759
+
760
+ void pack_B(void * RESTRICT packed_B, const block_q4_1 * RESTRICT B, int KB) {
761
+ pack_qs(packed_B, B, KB);
762
+ ggml_half * d0 = reinterpret_cast<ggml_half *>((char *)packed_B + TILE_N * TILE_K / 2);
763
+ ggml_half * m0 = d0 + TILE_N;
764
+ for (int n = 0; n < TILE_N; ++n) {
765
+ d0[n] = B[n * KB].d;
766
+ m0[n] = B[n * KB].m;
767
+ }
768
+ }
769
+
770
+ inline void s8s8_compensation(void * RESTRICT packed_B) {
771
+ // packed_B layout:
772
+ // quants {TILE_N, TILEK} int8_t
773
+ // d0 {TILE_N} ggml_half
774
+ // comp {TILE_N} int32_t
775
+ const int offset = TILE_N * TILE_K + TILE_N * sizeof(ggml_half);
776
+ __m512i vcomp = _mm512_setzero_si512();
777
+ const __m512i off = _mm512_set1_epi8(static_cast<char>(0x80));
778
+ for (int k = 0; k < 8; ++k) {
779
+ __m512i vb = _mm512_loadu_si512((const __m512i *)((const char *)packed_B + k * 64));
780
+ vcomp = _mm512_dpbusd_epi32(vcomp, off, vb);
781
+ }
782
+ _mm512_storeu_si512((__m512i *)((char *)(packed_B) + offset), vcomp);
783
+ }
784
+
785
+ void pack_B(void * RESTRICT packed_B, const block_q8_0 * RESTRICT B, int KB) {
786
+ pack_qs(packed_B, B, KB);
787
+ ggml_half * d0 = reinterpret_cast<ggml_half *>((char *)packed_B + TILE_N * TILE_K);
788
+ for (int n = 0; n < TILE_N; ++n) {
789
+ d0[n] = B[n * KB].d;
790
+ }
791
+ s8s8_compensation(packed_B);
792
+ }
793
+
794
+ // convert 8 * {min, scale} from int6 to int8
795
+ inline void unpack_mins_and_scales(const uint8_t * scales, uint32_t * utmp) {
796
+ const uint32_t kmask1 = 0x3f3f3f3f;
797
+ const uint32_t kmask2 = 0x0f0f0f0f;
798
+ const uint32_t kmask3 = 0x03030303;
799
+
800
+ memcpy(utmp, scales, 12);
801
+ utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
802
+ const uint32_t uaux = utmp[1] & kmask1;
803
+ utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
804
+ utmp[2] = uaux;
805
+ utmp[0] &= kmask1;
806
+ }
807
+
808
+ // packed_B layout:
809
+ // quants {8, TILE_N, 16} uint8
810
+ // scales {8, TILE_N} uint8
811
+ // mins {8, TILE_N} uint8
812
+ // d {TILE_N} ggml_half
813
+ // dmin {TILE_N} ggml_half
814
+ void pack_B(void * RESTRICT packed_B, const block_q4_K * RESTRICT B, int KB) {
815
+ pack_qs(packed_B, B, KB);
816
+
817
+ uint8_t * scales = reinterpret_cast<uint8_t *>((char *)packed_B + (QK_K / 2) * TILE_N);
818
+ uint8_t * mins = scales + 8 * TILE_N;
819
+ ggml_half * d = reinterpret_cast<ggml_half *>(mins + 8 * TILE_N);
820
+ ggml_half * dmin = d + TILE_N;
821
+
822
+ union {
823
+ uint32_t u32[4];
824
+ uint8_t u8[16];
825
+ } s;
826
+
827
+ for (int n = 0; n < TILE_N; ++n) {
828
+ unpack_mins_and_scales(B[n * KB].scales, s.u32);
829
+ for (int k = 0; k < 8; ++k) {
830
+ scales[k * TILE_N + n] = s.u8[k];
831
+ mins[(k >> 1) * TILE_N * 2 + n * 2 + (k & 0x1)] = s.u8[k + 8];
832
+ }
833
+ d[n] = B[n * KB].d;
834
+ dmin[n] = B[n * KB].dmin;
835
+ }
836
+ }
837
+
838
+ // packed_B layout:
839
+ // quants {8, TILE_N, 16} uint8
840
+ // qh {8, TILE_N, 4} uint8
841
+ // scales {8, TILE_N} uint8
842
+ // mins {8, TILE_N} uint8
843
+ // d {TILE_N} ggml_half
844
+ // dmin {TILE_N} ggml_half
845
+ void pack_B(void * RESTRICT packed_B, const block_q5_K * RESTRICT B, int KB) {
846
+ pack_qs(packed_B, B, KB);
847
+
848
+ uint8_t * scales = reinterpret_cast<uint8_t *>((char *)packed_B + (QK_K / 2) * TILE_N + (QK_K / 8) * TILE_N);
849
+ uint8_t * mins = scales + 8 * TILE_N;
850
+ ggml_half * d = reinterpret_cast<ggml_half *>(mins + 8 * TILE_N);
851
+ ggml_half * dmin = d + TILE_N;
852
+
853
+ union {
854
+ uint32_t u32[4];
855
+ uint8_t u8[16];
856
+ } s;
857
+
858
+ for (int n = 0; n < TILE_N; ++n) {
859
+ unpack_mins_and_scales(B[n * KB].scales, s.u32);
860
+ for (int k = 0; k < 8; ++k) {
861
+ scales[k * TILE_N + n] = s.u8[k];
862
+ mins[(k >> 1) * TILE_N * 2 + n * 2 + (k & 0x1)] = s.u8[k + 8];
863
+ }
864
+ d[n] = B[n * KB].d;
865
+ dmin[n] = B[n * KB].dmin;
866
+ }
867
+ }
868
+
869
+ // packed_B layout:
870
+ // quants {16, TILE_N, 8} uint8
871
+ // qh {16, TILE_N, 4} uint8
872
+ // scales {16, TILE_N} uint8
873
+ // d {TILE_N} ggml_half
874
+ void pack_B(void * RESTRICT packed_B, const block_q6_K * RESTRICT B, int KB) {
875
+ pack_qs(packed_B, B, KB);
876
+
877
+ uint8_t * scales = reinterpret_cast<uint8_t *>((char *)packed_B + (QK_K / 2) * TILE_N + (QK_K / 4) * TILE_N);
878
+ ggml_half * d = reinterpret_cast<ggml_half *>(scales + 16 * TILE_N);
879
+ for (int n = 0; n < TILE_N; ++n) {
880
+ const int8_t * ps = B[n * KB].scales;
881
+ for (int k = 0; k < 16; ++k) {
882
+ scales[k * TILE_N + n] = ps[k];
883
+ }
884
+ d[n] = B[n * KB].d;
885
+ }
886
+ }
887
+
888
+ // packed_B layout:
889
+ // quants {8, TILE_N, 16} uint8
890
+ // scales {8, TILE_N} int8
891
+ // d {TILE_N} ggml_half
892
+ void pack_B(void * RESTRICT packed_B, const block_iq4_xs * RESTRICT B, int KB) {
893
+ pack_qs(packed_B, B, KB);
894
+
895
+ int8_t * scales = reinterpret_cast<int8_t *>((char *)packed_B + (QK_K / 2) * TILE_N);
896
+ ggml_half * d = reinterpret_cast<ggml_half *>(scales + 8 * TILE_N);
897
+
898
+ // pack the scales
899
+ for (int n = 0; n < TILE_N; ++n) {
900
+ uint16_t sh = B[n * KB].scales_h;
901
+ for (int k = 0; k < 8; k += 2) {
902
+ const int16_t ls1 = ((B[n * KB].scales_l[k / 2] & 0xf) | ((sh << 4) & 0x30)) - 32;
903
+ const int16_t ls2 = ((B[n * KB].scales_l[k / 2] >> 4) | ((sh << 2) & 0x30)) - 32;
904
+ scales[(k + 0) * TILE_N + n] = ls1;
905
+ scales[(k + 1) * TILE_N + n] = ls2;
906
+ sh >>= 4;
907
+ }
908
+ d[n] = B[n * KB].d;
909
+ }
910
+ }
911
+
912
+ template<typename TB, typename packed_B_t = packed_B_type<TB>>
913
+ void unpack_B(packed_B_t * RESTRICT tile, const void * RESTRICT packed_B) {
914
+ GGML_UNUSED(tile);
915
+ GGML_UNUSED(packed_B);
916
+ }
917
+
918
+ template <>
919
+ void unpack_B<block_q4_0>(int8_t * RESTRICT tile, const void * RESTRICT packed_B) {
920
+ const __m512i off = _mm512_set1_epi8(8);
921
+ const __m512i lowMask = _mm512_set1_epi8(0xF);
922
+ for (int n = 0; n < 8; n += 2) {
923
+ __m512i bytes = _mm512_loadu_si512((const __m512i *)((const char *)packed_B + n * 32));
924
+ const __m512i r0 = _mm512_sub_epi8(_mm512_and_si512(bytes, lowMask), off);
925
+ const __m512i r1 = _mm512_sub_epi8(_mm512_and_si512(_mm512_srli_epi16(bytes, 4), lowMask), off);
926
+ _mm512_storeu_si512((__m512i *)(tile + n * 64 + 0), r0);
927
+ _mm512_storeu_si512((__m512i *)(tile + n * 64 + 64), r1);
928
+ }
929
+ }
930
+
931
+ template <>
932
+ void unpack_B<block_q4_1>(uint8_t * RESTRICT tile, const void * RESTRICT packed_B) {
933
+ const __m512i lowMask = _mm512_set1_epi8(0xF);
934
+ for (int n = 0; n < 8; n += 2) {
935
+ __m512i bytes = _mm512_loadu_si512((const __m512i *)((const char *)packed_B + n * 32));
936
+ const __m512i r0 = _mm512_and_si512(bytes, lowMask);
937
+ const __m512i r1 = _mm512_and_si512(_mm512_srli_epi16(bytes, 4), lowMask);
938
+ _mm512_storeu_si512((__m512i *)(tile + n * 64 + 0), r0);
939
+ _mm512_storeu_si512((__m512i *)(tile + n * 64 + 64), r1);
940
+ }
941
+ }
942
+
943
+ // packed_B_t for QKK is int8_t
944
+ template <typename TB>
945
+ void unpack_B(int8_t * RESTRICT tile, const void * RESTRICT packed_B, int k) {
946
+ const int packed_B_group_size = QK_K / 2 * TILE_N / 8;
947
+ const char * packed_B_group = (const char *)packed_B + k * packed_B_group_size;
948
+ const __m512i lowMask = _mm512_set1_epi8(0xF);
949
+ for (int n = 0; n < 8; n += 2) {
950
+ __m512i bytes = _mm512_loadu_si512(packed_B_group + n * 32);
951
+ const __m512i r0 = _mm512_and_si512(bytes, lowMask);
952
+ const __m512i r1 = _mm512_and_si512(_mm512_srli_epi16(bytes, 4), lowMask);
953
+ _mm512_storeu_si512((__m512i *)(tile + n * 64 + 0), r0);
954
+ _mm512_storeu_si512((__m512i *)(tile + n * 64 + 64), r1);
955
+ }
956
+ }
957
+
958
+ template <>
959
+ void unpack_B<block_q5_K>(int8_t * RESTRICT tile, const void * RESTRICT packed_B, int k) {
960
+ // lower 4bits, stride 256 bytes
961
+ const int packed_l4_group_size = QK_K / 2 * TILE_N / 8;
962
+ const char * pb = (const char *)packed_B + k * packed_l4_group_size;
963
+
964
+ // higher 1bit, stride 64 bytes
965
+ const int packed_h1_group_size = QK_K / 8 * TILE_N / 8;
966
+ const char * ph = (const char *)packed_B + (QK_K / 2) * TILE_N + k * packed_h1_group_size;
967
+ const __m512i hbits = _mm512_loadu_si512(ph);
968
+
969
+ const __m512i lowMask = _mm512_set1_epi8(0xF);
970
+ __m512i hmask0 = _mm512_set1_epi8(0x1);
971
+ __m512i hmask1 = _mm512_set1_epi8(0x2);
972
+
973
+ for (int n = 0; n < 8; n += 2) {
974
+ __m512i bytes = _mm512_loadu_si512(pb + n * 32);
975
+ __m512i r0 = _mm512_and_si512(bytes, lowMask);
976
+ __m512i r1 = _mm512_and_si512(_mm512_srli_epi16(bytes, 4), lowMask);
977
+ __m512i h0 = _mm512_slli_epi16(_mm512_srli_epi16(_mm512_and_si512(hbits, hmask0), n), 4);
978
+ __m512i h1 = _mm512_slli_epi16(_mm512_srli_epi16(_mm512_and_si512(hbits, hmask1), n + 1), 4);
979
+
980
+ hmask0 = _mm512_slli_epi16(hmask0, 2);
981
+ hmask1 = _mm512_slli_epi16(hmask1, 2);
982
+ r0 = _mm512_add_epi8(r0, h0);
983
+ r1 = _mm512_add_epi8(r1, h1);
984
+ _mm512_storeu_si512((__m512i *)(tile + n * 64 + 0), r0);
985
+ _mm512_storeu_si512((__m512i *)(tile + n * 64 + 64), r1);
986
+ }
987
+ }
988
+
989
+ template <>
990
+ void unpack_B<block_q6_K>(int8_t * RESTRICT tile, const void * RESTRICT packed_B, int k) {
991
+ // lower 4bits, stride 128 bytes
992
+ const int packed_l4_group_size = QK_K / 2 * TILE_N / 16;
993
+ const char * pb = (const char *)packed_B + k * packed_l4_group_size;
994
+
995
+ // higher 2bits, stride 64 bytes
996
+ const int packed_h2_group_size = QK_K / 4 * TILE_N / 16;
997
+ const char * ph = (const char *)packed_B + (QK_K / 2) * TILE_N + k * packed_h2_group_size;
998
+ const __m512i hbits = _mm512_loadu_si512(ph);
999
+
1000
+ const __m512i off = _mm512_set1_epi8(32);
1001
+ const __m512i lowMask = _mm512_set1_epi8(0xF);
1002
+ __m512i hmask0 = _mm512_set1_epi8(0x3); // 0011
1003
+ __m512i hmask1 = _mm512_set1_epi8(0xC); // 1100
1004
+
1005
+ // notes: skip zero padding from row4 to row7 as we have done so in `unpack_A`
1006
+ __m512i bytes = _mm512_loadu_si512(pb);
1007
+ __m512i r0 = _mm512_and_si512(bytes, lowMask);
1008
+ __m512i r1 = _mm512_and_si512(_mm512_srli_epi16(bytes, 4), lowMask);
1009
+ __m512i h0 = _mm512_slli_epi16(_mm512_and_si512(hbits, hmask0), 4);
1010
+ __m512i h1 = _mm512_slli_epi16(_mm512_and_si512(hbits, hmask1), 2);
1011
+ _mm512_storeu_si512((__m512i *)(tile + 0), _mm512_sub_epi8(_mm512_add_epi8(r0, h0), off));
1012
+ _mm512_storeu_si512((__m512i *)(tile + 64), _mm512_sub_epi8(_mm512_add_epi8(r1, h1), off));
1013
+
1014
+ hmask0 = _mm512_slli_epi16(hmask0, 4);
1015
+ hmask1 = _mm512_slli_epi16(hmask1, 4);
1016
+
1017
+ bytes = _mm512_loadu_si512(pb + 64);
1018
+ r0 = _mm512_and_si512(bytes, lowMask);
1019
+ r1 = _mm512_and_si512(_mm512_srli_epi16(bytes, 4), lowMask);
1020
+ h0 = _mm512_and_si512(hbits, hmask0);
1021
+ h1 = _mm512_srli_epi16(_mm512_and_si512(hbits, hmask1), 2);
1022
+ _mm512_storeu_si512((__m512i *)(tile + 128), _mm512_sub_epi8(_mm512_add_epi8(r0, h0), off));
1023
+ _mm512_storeu_si512((__m512i *)(tile + 192), _mm512_sub_epi8(_mm512_add_epi8(r1, h1), off));
1024
+ }
1025
+
1026
+ template <>
1027
+ void unpack_B<block_iq4_xs>(int8_t * RESTRICT tile, const void * RESTRICT packed_B, int k) {
1028
+ static const __m512i values128 = _mm512_set_epi8(
1029
+ 113, 89, 69, 53, 38, 25, 13, 1, -10, -22, -35, -49, -65, -83, -104, -127,
1030
+ 113, 89, 69, 53, 38, 25, 13, 1, -10, -22, -35, -49, -65, -83, -104, -127,
1031
+ 113, 89, 69, 53, 38, 25, 13, 1, -10, -22, -35, -49, -65, -83, -104, -127,
1032
+ 113, 89, 69, 53, 38, 25, 13, 1, -10, -22, -35, -49, -65, -83, -104, -127
1033
+ );
1034
+
1035
+ const int packed_B_group_size = QK_K / 2 * TILE_N / 8;
1036
+ const char * pb = (const char *)packed_B + k * packed_B_group_size;
1037
+ const __m512i lowMask = _mm512_set1_epi8(0xF);
1038
+
1039
+ for (int n = 0; n < 8; n += 2) {
1040
+ __m512i bytes = _mm512_loadu_si512(pb + n * 32);
1041
+ const __m512i r0 = _mm512_shuffle_epi8(values128, _mm512_and_si512(bytes, lowMask));
1042
+ const __m512i r1 = _mm512_shuffle_epi8(values128, _mm512_and_si512(_mm512_srli_epi16(bytes, 4), lowMask));
1043
+ _mm512_storeu_si512((__m512i *)(tile + n * 64 + 0), r0);
1044
+ _mm512_storeu_si512((__m512i *)(tile + n * 64 + 64), r1);
1045
+ }
1046
+ }
1047
+
1048
+ template <typename TA, typename TB, bool is_acc>
1049
+ struct acc_C {};
1050
+
1051
+ template <bool is_acc>
1052
+ struct acc_C<block_q8_0, block_q4_0, is_acc> {
1053
+ static void apply(float * RESTRICT C, int ldc, const int32_t * RESTRICT tile, const block_q8_0 * A, int lda, const void * packed_B, int nr) {
1054
+ const int offset = TILE_N * TILE_K / 2;
1055
+ const __m512 vd0 = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)((const char *)packed_B + offset)));
1056
+
1057
+ for (int m = 0; m < nr; ++m) {
1058
+ const __m512 vd1 = _mm512_set1_ps(GGML_CPU_FP16_TO_FP32(A[m * lda].d));
1059
+ const __m512 vtile = _mm512_cvtepi32_ps(_mm512_loadu_si512(tile + m * TILE_N));
1060
+
1061
+ __m512 vsum;
1062
+ if (is_acc) {
1063
+ vsum = _mm512_loadu_ps(C + m * ldc);
1064
+ } else {
1065
+ vsum = _mm512_set1_ps(0.f);
1066
+ }
1067
+ vsum = _mm512_fmadd_ps(vtile, _mm512_mul_ps(vd0, vd1), vsum);
1068
+ _mm512_storeu_ps(C + m * ldc, vsum);
1069
+ }
1070
+ }
1071
+ };
1072
+
1073
+ template <bool is_acc>
1074
+ struct acc_C<block_q8_1, block_q4_1, is_acc> {
1075
+ static void apply(float * RESTRICT C, int ldc, const int32_t * RESTRICT tile, const block_q8_1 * A, int lda, const void * packed_B, int nr) {
1076
+ const int offset = TILE_N * TILE_K / 2;
1077
+ const __m512 vd0 = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)((const char *)packed_B + offset)));
1078
+ const __m512 vm0 = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)((const char *)packed_B + offset + TILE_N * sizeof(ggml_half))));
1079
+
1080
+ for (int m = 0; m < nr; ++m) {
1081
+ const __m512 vd1 = _mm512_set1_ps(GGML_CPU_FP16_TO_FP32(A[m * lda].d));
1082
+ const __m512 vs1 = _mm512_set1_ps(GGML_CPU_FP16_TO_FP32(A[m * lda].s));
1083
+ const __m512 vtile = _mm512_cvtepi32_ps(_mm512_loadu_si512(tile + m * TILE_N));
1084
+
1085
+ __m512 vsum;
1086
+ if (is_acc) {
1087
+ vsum = _mm512_loadu_ps(C + m * ldc);
1088
+ } else {
1089
+ vsum = _mm512_set1_ps(0.f);
1090
+ }
1091
+ vsum = _mm512_fmadd_ps(vtile, _mm512_mul_ps(vd0, vd1), vsum);
1092
+ vsum = _mm512_fmadd_ps(vm0, vs1, vsum);
1093
+ _mm512_storeu_ps(C + m * ldc, vsum);
1094
+ }
1095
+ }
1096
+ };
1097
+
1098
+ template <bool is_acc>
1099
+ struct acc_C<block_q8_0, block_q8_0, is_acc> {
1100
+ static void apply(float * RESTRICT C, int ldc, const int32_t * RESTRICT tile, const block_q8_0 * A, int lda, const void * packed_B, int nr) {
1101
+ const int offset = TILE_N * TILE_K;
1102
+ const __m512 vd0 = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)((const char *)packed_B + offset)));
1103
+
1104
+ for (int m = 0; m < nr; ++m) {
1105
+ const __m512 vd1 = _mm512_set1_ps(GGML_CPU_FP16_TO_FP32(A[m * lda].d));
1106
+ const __m512 vtile = _mm512_cvtepi32_ps(_mm512_loadu_si512(tile + m * TILE_N));
1107
+
1108
+ __m512 vsum;
1109
+ if (is_acc) {
1110
+ vsum = _mm512_loadu_ps(C + m * ldc);
1111
+ } else {
1112
+ vsum = _mm512_set1_ps(0.f);
1113
+ }
1114
+ vsum = _mm512_fmadd_ps(vtile, _mm512_mul_ps(vd0, vd1), vsum);
1115
+ _mm512_storeu_ps(C + m * ldc, vsum);
1116
+ }
1117
+ }
1118
+ };
1119
+
1120
+ template <bool is_acc>
1121
+ struct acc_C<block_q8_K, block_q4_K, is_acc> {
1122
+ static void apply(float * RESTRICT C, int ldc, const int32_t * RESTRICT tile, const block_q8_K * A, int lda, const void * packed_B, int nr) {
1123
+ const uint8_t * scales = reinterpret_cast<const uint8_t *>((const char *)packed_B + (QK_K / 2) * TILE_N);
1124
+ const uint8_t * mins = scales + 8 * TILE_N;
1125
+ const ggml_half * d0 = reinterpret_cast<const ggml_half *>(mins + 8 * TILE_N);
1126
+ const ggml_half * dmin = d0 + TILE_N;
1127
+
1128
+ const __m512 vd0 = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)d0));
1129
+ const __m512 vdmin = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)dmin));
1130
+
1131
+ for (int m = 0; m < nr; ++m) {
1132
+ const float d1 = A[m * lda].d;
1133
+ const __m512 vd = _mm512_mul_ps(_mm512_set1_ps(d1), vd0);
1134
+ const __m512 vdm = _mm512_mul_ps(_mm512_set1_ps(-d1), vdmin);
1135
+ const __m512 vtile = _mm512_cvtepi32_ps(_mm512_loadu_si512(tile + m * TILE_N));
1136
+
1137
+ __m512 vsum;
1138
+ if (is_acc) {
1139
+ vsum = _mm512_loadu_ps(C + m * ldc);
1140
+ } else {
1141
+ vsum = _mm512_set1_ps(0.f);
1142
+ }
1143
+
1144
+ const __m256i q8sums = _mm256_loadu_si256((const __m256i *)A[m * lda].bsums);
1145
+ const __m128i q8s = _mm_hadd_epi16(_mm256_extracti128_si256(q8sums, 0), _mm256_extracti128_si256(q8sums, 1));
1146
+
1147
+ __m512i acc_m = _mm512_setzero_si512();
1148
+ for (int k = 0; k < 4; ++k) {
1149
+ __m512i vmask = _mm512_set1_epi32(k);
1150
+ __m512i va = _mm512_permutexvar_epi32(vmask, _mm512_castsi128_si512(q8s));
1151
+ __m512i vb = _mm512_cvtepi8_epi16(_mm256_loadu_si256((const __m256i *)(mins + k * 32)));
1152
+ acc_m = _mm512_dpwssds_epi32(acc_m, va, vb);
1153
+ }
1154
+
1155
+ vsum = _mm512_fmadd_ps(vtile, vd, vsum);
1156
+ vsum = _mm512_fmadd_ps(_mm512_cvtepi32_ps(acc_m), vdm, vsum);
1157
+ _mm512_storeu_ps(C + m * ldc, vsum);
1158
+ }
1159
+ }
1160
+ };
1161
+
1162
+ template <bool is_acc>
1163
+ struct acc_C<block_q8_K, block_q5_K, is_acc> {
1164
+ static void apply(float * RESTRICT C, int ldc, const int32_t * RESTRICT tile, const block_q8_K * A, int lda, const void * packed_B, int nr) {
1165
+ const uint8_t * scales = reinterpret_cast<const uint8_t *>((const char *)packed_B + (QK_K / 2) * TILE_N + (QK_K / 8) * TILE_N);
1166
+ const uint8_t * mins = scales + 8 * TILE_N;
1167
+ const ggml_half * d0 = reinterpret_cast<const ggml_half *>(mins + 8 * TILE_N);
1168
+ const ggml_half * dmin = d0 + TILE_N;
1169
+
1170
+ const __m512 vd0 = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)d0));
1171
+ const __m512 vdmin = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)dmin));
1172
+
1173
+ for (int m = 0; m < nr; ++m) {
1174
+ const float d1 = A[m * lda].d;
1175
+ const __m512 vd = _mm512_mul_ps(_mm512_set1_ps(d1), vd0);
1176
+ const __m512 vdm = _mm512_mul_ps(_mm512_set1_ps(-d1), vdmin);
1177
+ const __m512 vtile = _mm512_cvtepi32_ps(_mm512_loadu_si512(tile + m * TILE_N));
1178
+
1179
+ __m512 vsum;
1180
+ if (is_acc) {
1181
+ vsum = _mm512_loadu_ps(C + m * ldc);
1182
+ } else {
1183
+ vsum = _mm512_set1_ps(0.f);
1184
+ }
1185
+
1186
+ const __m256i q8sums = _mm256_loadu_si256((const __m256i *)A[m * lda].bsums);
1187
+ const __m128i q8s = _mm_hadd_epi16(_mm256_extracti128_si256(q8sums, 0), _mm256_extracti128_si256(q8sums, 1));
1188
+
1189
+ __m512i acc_m = _mm512_setzero_si512();
1190
+ for (int k = 0; k < 4; ++k) {
1191
+ __m512i vmask = _mm512_set1_epi32(k);
1192
+ __m512i va = _mm512_permutexvar_epi32(vmask, _mm512_castsi128_si512(q8s));
1193
+ __m512i vb = _mm512_cvtepi8_epi16(_mm256_loadu_si256((const __m256i *)(mins + k * 32)));
1194
+ acc_m = _mm512_dpwssds_epi32(acc_m, va, vb);
1195
+ }
1196
+
1197
+ vsum = _mm512_fmadd_ps(vtile, vd, vsum);
1198
+ vsum = _mm512_fmadd_ps(_mm512_cvtepi32_ps(acc_m), vdm, vsum);
1199
+ _mm512_storeu_ps(C + m * ldc, vsum);
1200
+ }
1201
+ }
1202
+ };
1203
+
1204
+ template <bool is_acc>
1205
+ struct acc_C<block_q8_K, block_q6_K, is_acc> {
1206
+ static void apply(float * RESTRICT C, int ldc, const int32_t * RESTRICT tile, const block_q8_K * A, int lda, const void * packed_B, int nr) {
1207
+ const uint8_t * scales = reinterpret_cast<const uint8_t *>((const char *)packed_B + (QK_K / 2) * TILE_N + (QK_K / 4) * TILE_N);
1208
+ const ggml_half * d0 = reinterpret_cast<const ggml_half *>(scales + 16 * TILE_N);
1209
+
1210
+ const __m512 vd0 = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)d0));
1211
+
1212
+ for (int m = 0; m < nr; ++m) {
1213
+ const float d1 = A[m * lda].d;
1214
+ const __m512 vd = _mm512_mul_ps(_mm512_set1_ps(d1), vd0);
1215
+ const __m512 vtile = _mm512_cvtepi32_ps(_mm512_loadu_si512(tile + m * TILE_N));
1216
+
1217
+ __m512 vsum;
1218
+ if (is_acc) {
1219
+ vsum = _mm512_loadu_ps(C + m * ldc);
1220
+ } else {
1221
+ vsum = _mm512_set1_ps(0.f);
1222
+ }
1223
+
1224
+ vsum = _mm512_fmadd_ps(vtile, vd, vsum);
1225
+ _mm512_storeu_ps(C + m * ldc, vsum);
1226
+ }
1227
+ }
1228
+ };
1229
+
1230
+ template <bool is_acc>
1231
+ struct acc_C<block_q8_K, block_iq4_xs, is_acc> {
1232
+ static void apply(float * RESTRICT C, int ldc, const int32_t * RESTRICT tile, const block_q8_K * A, int lda, const void * packed_B, int nr) {
1233
+ const int8_t * scales = reinterpret_cast<const int8_t *>((const char *)packed_B + (QK_K / 2) * TILE_N);
1234
+ const ggml_half * d0 = reinterpret_cast<const ggml_half *>(scales + 8 * TILE_N);
1235
+
1236
+ const __m512 vd0 = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)d0));
1237
+
1238
+ for (int m = 0; m < nr; ++m) {
1239
+ const float d1 = A[m * lda].d;
1240
+ const __m512 vd = _mm512_mul_ps(_mm512_set1_ps(d1), vd0);
1241
+ const __m512 vtile = _mm512_cvtepi32_ps(_mm512_loadu_si512(tile + m * TILE_N));
1242
+
1243
+ __m512 vsum;
1244
+ if (is_acc) {
1245
+ vsum = _mm512_loadu_ps(C + m * ldc);
1246
+ } else {
1247
+ vsum = _mm512_set1_ps(0.f);
1248
+ }
1249
+
1250
+ vsum = _mm512_fmadd_ps(vtile, vd, vsum);
1251
+ _mm512_storeu_ps(C + m * ldc, vsum);
1252
+ }
1253
+ }
1254
+ };
1255
+
1256
+ template <typename TB> constexpr int get_quants_size();
1257
+ template <> constexpr int get_quants_size<block_q4_K>() { return (QK_K / 2) * TILE_N; }
1258
+ template <> constexpr int get_quants_size<block_q5_K>() { return (QK_K / 2) * TILE_N + (QK_K / 8) * TILE_N; }
1259
+ template <> constexpr int get_quants_size<block_q6_K>() { return (QK_K / 2) * TILE_N + (QK_K / 4) * TILE_N; }
1260
+ template <> constexpr int get_quants_size<block_iq4_xs>() { return (QK_K / 2) * TILE_N; }
1261
+
1262
+ // used for QKK format
1263
+ template <typename TB, bool is_acc,
1264
+ typename std::enable_if<is_type_qkk<TB>::value, int>::type = 0>
1265
+ inline void scale_C(const int32_t * RESTRICT tile, int32_t * RESTRICT sumi, const void * packed_B, int k, int nr) {
1266
+ const uint8_t * scales = reinterpret_cast<const uint8_t *>((const char *)packed_B + get_quants_size<TB>());
1267
+ const __m512i vscale = _mm512_cvtepi8_epi32(_mm_loadu_si128((const __m128i *)(scales + k * TILE_N)));
1268
+
1269
+ for (int m = 0; m < nr; ++m) {
1270
+ __m512i vsumi;
1271
+ if (is_acc) {
1272
+ vsumi = _mm512_loadu_si512(sumi + m * TILE_N);
1273
+ } else {
1274
+ vsumi = _mm512_setzero_si512();
1275
+ }
1276
+ __m512i vtile = _mm512_loadu_si512(tile + m * TILE_N);
1277
+ vsumi = _mm512_add_epi32(vsumi, _mm512_mullo_epi32(vtile, vscale));
1278
+ _mm512_storeu_si512((__m512i *)(sumi + m * TILE_N), vsumi);
1279
+ }
1280
+ }
1281
+
1282
+ template <typename TA, typename TB, typename TC, int BLOCK_M, int BLOCK_N, int BLOCK_K>
1283
+ struct tinygemm_kernel_avx {
1284
+ static void apply(int K, const TA * RESTRICT A, const TB * RESTRICT B, TC * RESTRICT C, int ldc) {
1285
+ GGML_UNUSED(K);
1286
+ GGML_UNUSED(A);
1287
+ GGML_UNUSED(B);
1288
+ GGML_UNUSED(C);
1289
+ GGML_UNUSED(ldc);
1290
+ }
1291
+ };
1292
+
1293
+ template <int BLOCK_M, int BLOCK_N, int BLOCK_K>
1294
+ struct tinygemm_kernel_avx<float, ggml_fp16_t, float, BLOCK_M, BLOCK_N, BLOCK_K> {
1295
+ static void apply(int K, const float * RESTRICT A, const ggml_fp16_t * RESTRICT B, float * RESTRICT C, int ldc) {
1296
+ constexpr int ROWS = BLOCK_M;
1297
+ constexpr int COLS = BLOCK_N;
1298
+ assert(BLOCK_K == 16);
1299
+
1300
+ __m512 va;
1301
+ __m512 vb[COLS];
1302
+ __m512 vc[ROWS * COLS];
1303
+
1304
+ auto loadc = [&](auto idx) {
1305
+ vc[idx] = _mm512_setzero_ps();
1306
+ };
1307
+ Unroll<ROWS * COLS>{}(loadc);
1308
+
1309
+ auto compute = [&](auto idx, auto k) {
1310
+ constexpr int row = idx / COLS;
1311
+ constexpr int col = idx % COLS;
1312
+
1313
+ if constexpr (col == 0) {
1314
+ va = _mm512_loadu_ps(A + row * K + k);
1315
+ }
1316
+ if constexpr (row == 0) {
1317
+ vb[col] = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)(B + col * K + k)));
1318
+ }
1319
+ vc[idx] = _mm512_fmadd_ps(va, vb[col], vc[idx]);
1320
+ };
1321
+
1322
+ for (int k = 0; k < K; k += 16) {
1323
+ Unroll<ROWS * COLS>{}(compute, k);
1324
+ }
1325
+
1326
+ auto storec = [&](auto idx) {
1327
+ constexpr int row = idx / COLS;
1328
+ constexpr int col = idx % COLS;
1329
+ C[row * ldc + col] = _mm512_reduce_add_ps(vc[idx]);
1330
+ };
1331
+ Unroll<ROWS * COLS>{}(storec);
1332
+ }
1333
+ };
1334
+
1335
+ #define LAUNCH_TINYGEMM_KERNEL_AVX(MB_SIZE, NB_SIZE) \
1336
+ tinygemm_kernel_avx<float, type, float, MB_SIZE, NB_SIZE, blck_size>::apply( \
1337
+ K, (const float *)src1->data + src1_offset + mb_start * K, \
1338
+ (const type *)src0->data + src0_offset + nb_start * K, \
1339
+ (float *)dst->data + dst_offset + mb_start * ldc + nb_start, ldc)
1340
+
1341
+
1342
+ // re-organize in the format {NB, KB, TILE_SIZE}:
1343
+ #define PACKED_INDEX(n, k, KB, tile_size) (n * KB + k) * tile_size
1344
+
1345
+ template<typename TB, int BLOCK_K>
1346
+ void convert_B_packed_format(void * RESTRICT packed_B, const TB * RESTRICT B, int N, int K) {
1347
+ const int NB = N / TILE_N;
1348
+ const int KB = K / BLOCK_K;
1349
+ const int TILE_SIZE = get_tile_size<TB>();
1350
+
1351
+ // parallel on NB should be enough
1352
+ parallel_for(NB, [&](int begin, int end) {
1353
+ for (int n = begin; n < end; ++n) {
1354
+ for (int k = 0; k < KB; ++k) {
1355
+ int n0 = n * TILE_N;
1356
+ pack_B((char *)packed_B + PACKED_INDEX(n, k, KB, TILE_SIZE), &B[n0 * KB + k], KB);
1357
+ }
1358
+ }
1359
+ });
1360
+ }
1361
+
1362
+ template <typename TA, typename TB, typename TC, int BLOCK_M, int BLOCK_N, int BLOCK_K>
1363
+ struct tinygemm_kernel_vnni {};
1364
+
1365
+ template <int BLOCK_M, int BLOCK_N, int BLOCK_K>
1366
+ struct tinygemm_kernel_vnni<block_q8_0, block_q4_0, float, BLOCK_M, BLOCK_N, BLOCK_K> {
1367
+ static void apply(int KB, const void * RESTRICT _A, const void * RESTRICT _B, float * RESTRICT C, int ldc) {
1368
+
1369
+ constexpr int COLS = BLOCK_N / 16;
1370
+ const int TILE_SIZE = TILE_N * sizeof(block_q4_0);
1371
+
1372
+ const block_q8_0 * RESTRICT A = static_cast<const block_q8_0 *>(_A);
1373
+ const char * RESTRICT B = static_cast<const char *>(_B);
1374
+
1375
+ __m512i va[8];
1376
+ __m512 vc[COLS];
1377
+ __m512 vd1;
1378
+
1379
+ // sum of offsets, shared across COLS
1380
+ //
1381
+ // avx512-vnni does not have `_mm512_dpbssd_epi32`,
1382
+ // need to transform ss to us:
1383
+ // a * (b - 8) is equivalent to b * a - 8 * a
1384
+ // s u u u s u s
1385
+ //
1386
+ __m512i vcomp;
1387
+
1388
+ const __m512i off = _mm512_set1_epi8(8);
1389
+ const __m512i lowMask = _mm512_set1_epi8(0xF);
1390
+
1391
+ auto loadc = [&](auto col) {
1392
+ vc[col] = _mm512_setzero_ps();
1393
+ };
1394
+ Unroll<COLS>{}(loadc);
1395
+
1396
+ auto compute = [&](auto col, auto i) {
1397
+ // load a and compute compensation
1398
+ if constexpr (col == 0) {
1399
+ const int32_t * a_ptr = reinterpret_cast<const int32_t *>(A[0 * KB + i].qs);
1400
+ vcomp = _mm512_setzero_si512();
1401
+ for (int k = 0; k < 8; ++k) {
1402
+ va[k] = _mm512_set1_epi32(a_ptr[k]);
1403
+ vcomp = _mm512_dpbusd_epi32(vcomp, off, va[k]);
1404
+ }
1405
+ vd1 = _mm512_set1_ps(GGML_CPU_FP16_TO_FP32(A[0 * KB + i].d));
1406
+ }
1407
+
1408
+ // load b
1409
+ __m512i vsum = _mm512_setzero_si512();
1410
+ const char * b_ptr = B + PACKED_INDEX(col, i, KB, TILE_SIZE);
1411
+ for (int k = 0; k < 8; k += 2) {
1412
+ __m512i bytes = _mm512_loadu_si512((const __m512i *)(b_ptr + k * 32));
1413
+ __m512i vb0 = _mm512_and_si512(bytes, lowMask);
1414
+ vsum = _mm512_dpbusd_epi32(vsum, vb0, va[k + 0]);
1415
+ __m512i vb1 = _mm512_and_si512(_mm512_srli_epi16(bytes, 4), lowMask);
1416
+ vsum = _mm512_dpbusd_epi32(vsum, vb1, va[k + 1]);
1417
+ }
1418
+ const int offset = TILE_N * TILE_K / 2;
1419
+ const __m512 vd0 = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)(b_ptr + offset)));
1420
+ vsum = _mm512_sub_epi32(vsum, vcomp);
1421
+
1422
+ vc[col] = _mm512_fmadd_ps(_mm512_cvtepi32_ps(vsum), _mm512_mul_ps(vd0, vd1), vc[col]);
1423
+ };
1424
+
1425
+ for (int i = 0; i < KB; ++i) {
1426
+ Unroll<COLS>{}(compute, i);
1427
+ }
1428
+
1429
+ //store to C
1430
+ auto storec = [&](auto col) {
1431
+ _mm512_storeu_ps((__m512i*)(C + 0 * ldc + col * 16), vc[col]);
1432
+ };
1433
+ Unroll<COLS>{}(storec);
1434
+ }
1435
+ };
1436
+
1437
+ template <int BLOCK_N, int BLOCK_K>
1438
+ struct tinygemm_kernel_vnni<block_q8_1, block_q4_1, float, 1, BLOCK_N, BLOCK_K> {
1439
+ static void apply(int KB, const void * RESTRICT _A, const void * RESTRICT _B, float * RESTRICT C, int ldc) {
1440
+
1441
+ constexpr int COLS = BLOCK_N / 16;
1442
+ const int TILE_SIZE = TILE_N * sizeof(block_q4_1);
1443
+
1444
+ const block_q8_1 * RESTRICT A = static_cast<const block_q8_1 *>(_A);
1445
+ const char * RESTRICT B = static_cast<const char *>(_B);
1446
+
1447
+ __m512i va[8];
1448
+ __m512i vb[8];
1449
+ __m512 vc[COLS];
1450
+ __m512 vd1, vs1;
1451
+
1452
+ const __m512i lowMask = _mm512_set1_epi8(0xF);
1453
+
1454
+ auto loadc = [&](auto col) {
1455
+ vc[col] = _mm512_setzero_ps();
1456
+ };
1457
+ Unroll<COLS>{}(loadc);
1458
+
1459
+ auto compute = [&](auto col, auto i) {
1460
+ // load a
1461
+ if constexpr (col == 0) {
1462
+ const int32_t * a_ptr = reinterpret_cast<const int32_t *>(A[0 * KB + i].qs);
1463
+ for (int k = 0; k < 8; ++k) {
1464
+ va[k] = _mm512_set1_epi32(a_ptr[k]);
1465
+ }
1466
+ vd1 = _mm512_set1_ps(GGML_CPU_FP16_TO_FP32(A[0 * KB + i].d));
1467
+ vs1 = _mm512_set1_ps(GGML_CPU_FP16_TO_FP32(A[0 * KB + i].s));
1468
+ }
1469
+
1470
+ // load b
1471
+ const char * b_ptr = B + PACKED_INDEX(col, i, KB, TILE_SIZE);
1472
+ for (int k = 0; k < 8; k += 2) {
1473
+ __m512i bytes = _mm512_loadu_si512((const __m512i *)(b_ptr + k * 32));
1474
+ vb[k + 0] = _mm512_and_si512(bytes, lowMask);
1475
+ vb[k + 1] = _mm512_and_si512(_mm512_srli_epi16(bytes, 4), lowMask);
1476
+ }
1477
+ const int offset = TILE_N * TILE_K / 2;
1478
+ const __m512 vd0 = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)(b_ptr + offset)));
1479
+ const __m512 vm0 = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)(b_ptr + offset + TILE_N * sizeof(ggml_half))));
1480
+
1481
+ __m512i vsum = _mm512_setzero_si512();
1482
+ for (int k = 0; k < 8; ++k) {
1483
+ vsum = _mm512_dpbusd_epi32(vsum, vb[k], va[k]);
1484
+ }
1485
+
1486
+ vc[col] = _mm512_fmadd_ps(_mm512_cvtepi32_ps(vsum), _mm512_mul_ps(vd0, vd1), vc[col]);
1487
+ vc[col] = _mm512_fmadd_ps(vm0, vs1, vc[col]);
1488
+ };
1489
+
1490
+ for (int i = 0; i < KB; ++i) {
1491
+ Unroll<COLS>{}(compute, i);
1492
+ }
1493
+
1494
+ //store to C
1495
+ auto storec = [&](auto col) {
1496
+ _mm512_storeu_ps((__m512i*)(C + 0 * ldc + col * 16), vc[col]);
1497
+ };
1498
+ Unroll<COLS>{}(storec);
1499
+ }
1500
+ };
1501
+
1502
+ template <int BLOCK_M, int BLOCK_N, int BLOCK_K>
1503
+ struct tinygemm_kernel_vnni<block_q8_0, block_q8_0, float, BLOCK_M, BLOCK_N, BLOCK_K> {
1504
+ static void apply(int KB, const void * RESTRICT _A, const void * RESTRICT _B, float * RESTRICT C, int ldc) {
1505
+
1506
+ constexpr int COLS = BLOCK_N / 16;
1507
+ const int TILE_SIZE = TILE_N * sizeof(block_q8_0) + TILE_N * sizeof(int32_t);
1508
+
1509
+ const block_q8_0 * RESTRICT A = static_cast<const block_q8_0 *>(_A);
1510
+ const char * RESTRICT B = static_cast<const char *>(_B);
1511
+
1512
+ __m512i va[8];
1513
+ __m512i vb[8];
1514
+ __m512 vc[COLS];
1515
+ __m512 vd1;
1516
+
1517
+ // Notes: s8s8 igemm compensation in avx512-vnni
1518
+ // change s8s8 to u8s8 with compensate
1519
+ // a * b = (a + 128) * b - 128 * b
1520
+ // s s u s u s
1521
+ //
1522
+ // (128 * b is pre-computed when packing B to vnni formats)
1523
+ //
1524
+ const __m512i off = _mm512_set1_epi8(static_cast<char>(0x80));
1525
+
1526
+ auto loadc = [&](auto col) {
1527
+ vc[col] = _mm512_setzero_ps();
1528
+ };
1529
+ Unroll<COLS>{}(loadc);
1530
+
1531
+ auto compute = [&](auto col, auto i) {
1532
+ // load a and add offset 128
1533
+ if constexpr (col == 0) {
1534
+ const int32_t * a_ptr = reinterpret_cast<const int32_t *>(A[0 * KB + i].qs);
1535
+ for (int k = 0; k < 8; ++k) {
1536
+ va[k] = _mm512_set1_epi32(a_ptr[k]);
1537
+ va[k] = _mm512_add_epi8(va[k], off);
1538
+ }
1539
+ vd1 = _mm512_set1_ps(GGML_CPU_FP16_TO_FP32(A[0 * KB + i].d));
1540
+ }
1541
+
1542
+ // load b
1543
+ const char * b_ptr = B + PACKED_INDEX(col, i, KB, TILE_SIZE);
1544
+ for (int k = 0; k < 8; ++k) {
1545
+ vb[k] = _mm512_loadu_si512((const __m512i *)(b_ptr + k * 64));
1546
+ }
1547
+ const int offset = TILE_N * TILE_K;
1548
+ const __m512 vd0 = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)(b_ptr + offset)));
1549
+ const int offset2 = TILE_N * TILE_K + TILE_N * sizeof(ggml_half);
1550
+ const __m512i vcomp = _mm512_loadu_si512((const __m512i *)(b_ptr + offset2));
1551
+
1552
+ __m512i vsum = _mm512_setzero_si512();
1553
+ for (int k = 0; k < 8; ++k) {
1554
+ vsum = _mm512_dpbusd_epi32(vsum, va[k], vb[k]);
1555
+ }
1556
+ vsum = _mm512_sub_epi32(vsum, vcomp);
1557
+
1558
+ vc[col] = _mm512_fmadd_ps(_mm512_cvtepi32_ps(vsum), _mm512_mul_ps(vd0, vd1), vc[col]);
1559
+ };
1560
+
1561
+ for (int i = 0; i < KB; ++i) {
1562
+ Unroll<COLS>{}(compute, i);
1563
+ }
1564
+
1565
+ //store to C
1566
+ auto storec = [&](auto col) {
1567
+ _mm512_storeu_ps((__m512i*)(C + 0 * ldc + col * 16), vc[col]);
1568
+ };
1569
+ Unroll<COLS>{}(storec);
1570
+ }
1571
+ };
1572
+
1573
+ template <int BLOCK_M, int BLOCK_N, int BLOCK_K>
1574
+ struct tinygemm_kernel_vnni<block_q8_K, block_q4_K, float, BLOCK_M, BLOCK_N, BLOCK_K> {
1575
+ static void apply(int KB, const void * RESTRICT _A, const void * RESTRICT _B, float * RESTRICT C, int ldc) {
1576
+
1577
+ constexpr int COLS = BLOCK_N / 16;
1578
+ const int TILE_SIZE = TILE_N * sizeof(block_q4_K) + TILE_N * 4;
1579
+
1580
+ const block_q8_K * RESTRICT A = static_cast<const block_q8_K *>(_A);
1581
+ const char * RESTRICT B = static_cast<const char *>(_B);
1582
+
1583
+ // a.qs: 8 groups, 32 bytes each group (m256i)
1584
+ __m512i va[8];
1585
+ // a.bsum: 8 groups, 2 bytes each group (m128i)
1586
+ __m512i va_bsum;
1587
+ __m512 vc[COLS];
1588
+ __m512 vd1;
1589
+
1590
+ // packed_B:
1591
+ const int offset_scales = (QK_K / 2) * TILE_N;
1592
+ const int offset_mins = (QK_K / 2) * TILE_N + 8 * TILE_N;
1593
+ const int offset_d0 = (QK_K / 2) * TILE_N + 16 * TILE_N;
1594
+ const int offset_dmin = (QK_K / 2) * TILE_N + 16 * TILE_N + TILE_N * sizeof(ggml_half);
1595
+
1596
+ const __m512i lowMask = _mm512_set1_epi8(0xF);
1597
+
1598
+ auto loadc = [&](auto col) {
1599
+ vc[col] = _mm512_setzero_ps();
1600
+ };
1601
+ Unroll<COLS>{}(loadc);
1602
+
1603
+ // Notes: vnni formats in QK_K
1604
+ // a) quants vnni format
1605
+ // int8 {k/4, n, 4}, viewed as 2d {k/4, 4n}, k = 32
1606
+ // from {16, 32} to {8, 64}
1607
+ //
1608
+ // b) min vnni format
1609
+ // int16 {k/2, n, 2}, viewed as 2d {k/2, 2n}, k = 8
1610
+ // from {16, 8} to {4, 32}
1611
+ //
1612
+ auto compute = [&](auto col, auto i) {
1613
+ // load a
1614
+ if constexpr (col == 0) {
1615
+ for (int k_group = 0; k_group < QK_K / 32; ++k_group) {
1616
+ va[k_group] = _mm512_castsi256_si512(_mm256_loadu_si256((const __m256i *)(A[0 * KB + i].qs + k_group * 32)));
1617
+ }
1618
+ const __m256i q8sums = _mm256_loadu_si256((const __m256i *)A[0 * KB + i].bsums);
1619
+ const __m128i q8s = _mm_hadd_epi16(_mm256_extracti128_si256(q8sums, 0), _mm256_extracti128_si256(q8sums, 1));
1620
+ va_bsum = _mm512_castsi128_si512(q8s);
1621
+ vd1 = _mm512_set1_ps(A[0 * KB + i].d);
1622
+ }
1623
+
1624
+ // step 1: accumultate the quants
1625
+ __m512i acc = _mm512_setzero_si512();
1626
+ const char * b_ptr = B + PACKED_INDEX(col, i, KB, TILE_SIZE);
1627
+ const char * b_qs = b_ptr;
1628
+ for (int k_group = 0; k_group < QK_K / 32; ++k_group) {
1629
+ __m512i vsum = _mm512_setzero_si512();
1630
+ for (int k = 0; k < 8; k += 2) {
1631
+ __m512i va0 = _mm512_permutexvar_epi32(_mm512_set1_epi32(k + 0), va[k_group]);
1632
+ __m512i va1 = _mm512_permutexvar_epi32(_mm512_set1_epi32(k + 1), va[k_group]);
1633
+
1634
+ __m512i bytes = _mm512_loadu_si512((const __m512i *)b_qs);
1635
+ __m512i vb0 = _mm512_and_si512(bytes, lowMask);
1636
+ vsum = _mm512_dpbusd_epi32(vsum, vb0, va0);
1637
+ __m512i vb1 = _mm512_and_si512(_mm512_srli_epi16(bytes, 4), lowMask);
1638
+ vsum = _mm512_dpbusd_epi32(vsum, vb1, va1);
1639
+
1640
+ b_qs += 64;
1641
+ }
1642
+ // vacc += scale * (q8 @ q4)
1643
+ const __m512i vscale = _mm512_cvtepi8_epi32(_mm_loadu_si128((const __m128i *)(b_ptr + offset_scales + k_group * TILE_N)));
1644
+ acc = _mm512_add_epi32(acc, _mm512_mullo_epi32(vsum, vscale));
1645
+ }
1646
+ const __m512 vd0 = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)(b_ptr + offset_d0)));
1647
+ vc[col] = _mm512_fmadd_ps(_mm512_cvtepi32_ps(acc), _mm512_mul_ps(vd0, vd1), vc[col]);
1648
+
1649
+ // step 2: accumulate the mins
1650
+ __m512i acc_m = _mm512_setzero_si512();
1651
+ for (int k = 0; k < 4; ++k) {
1652
+ __m512i vmask = _mm512_set1_epi32(k);
1653
+ __m512i va = _mm512_permutexvar_epi32(vmask, va_bsum);
1654
+ __m512i vb = _mm512_cvtepi8_epi16(_mm256_loadu_si256((const __m256i *)(b_ptr + offset_mins + k * 32)));
1655
+ acc_m = _mm512_dpwssds_epi32(acc_m, va, vb);
1656
+ }
1657
+ const __m512 vdmin = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)(b_ptr + offset_dmin)));
1658
+ vc[col] = _mm512_fnmadd_ps(_mm512_cvtepi32_ps(acc_m), _mm512_mul_ps(vdmin, vd1), vc[col]);
1659
+ };
1660
+
1661
+ for (int i = 0; i < KB; ++i) {
1662
+ Unroll<COLS>{}(compute, i);
1663
+ }
1664
+
1665
+ //store to C
1666
+ auto storec = [&](auto col) {
1667
+ _mm512_storeu_ps((__m512i*)(C + 0 * ldc + col * 16), vc[col]);
1668
+ };
1669
+ Unroll<COLS>{}(storec);
1670
+ }
1671
+ };
1672
+
1673
+ template <int BLOCK_M, int BLOCK_N, int BLOCK_K>
1674
+ struct tinygemm_kernel_vnni<block_q8_K, block_q5_K, float, BLOCK_M, BLOCK_N, BLOCK_K> {
1675
+ static void apply(int KB, const void * RESTRICT _A, const void * RESTRICT _B, float * RESTRICT C, int ldc) {
1676
+
1677
+ constexpr int COLS = BLOCK_N / 16;
1678
+ const int TILE_SIZE = TILE_N * sizeof(block_q5_K) + TILE_N * 4;
1679
+
1680
+ const block_q8_K * RESTRICT A = static_cast<const block_q8_K *>(_A);
1681
+ const char * RESTRICT B = static_cast<const char *>(_B);
1682
+
1683
+ // a.qs: 8 groups, 32 bytes each group (m256i)
1684
+ __m512i va[8];
1685
+ // a.bsum: 8 groups, 2 bytes each group (m128i)
1686
+ __m512i va_bsum;
1687
+ __m512 vc[COLS];
1688
+ __m512 vd1;
1689
+
1690
+ // packed_B:
1691
+ const int offset_qh = (QK_K / 2) * TILE_N;
1692
+ const int offset_scales = (QK_K / 2) * TILE_N + (QK_K / 8) * TILE_N;
1693
+ const int offset_mins = (QK_K / 2) * TILE_N + (QK_K / 8) * TILE_N + 8 * TILE_N;
1694
+ const int offset_d0 = (QK_K / 2) * TILE_N + (QK_K / 8) * TILE_N + 16 * TILE_N;
1695
+ const int offset_dmin = (QK_K / 2) * TILE_N + (QK_K / 8) * TILE_N + 16 * TILE_N + TILE_N * sizeof(ggml_half);
1696
+
1697
+ const __m512i lowMask = _mm512_set1_epi8(0xF);
1698
+
1699
+ auto loadc = [&](auto col) {
1700
+ vc[col] = _mm512_setzero_ps();
1701
+ };
1702
+ Unroll<COLS>{}(loadc);
1703
+
1704
+ // Q5_K and Q4_K shares the same vnni formats, refer to notes above.
1705
+ auto compute = [&](auto col, auto i) {
1706
+ // load a
1707
+ if constexpr (col == 0) {
1708
+ for (int k_group = 0; k_group < QK_K / 32; ++k_group) {
1709
+ va[k_group] = _mm512_castsi256_si512(_mm256_loadu_si256((const __m256i *)(A[0 * KB + i].qs + k_group * 32)));
1710
+ }
1711
+ const __m256i q8sums = _mm256_loadu_si256((const __m256i *)A[0 * KB + i].bsums);
1712
+ const __m128i q8s = _mm_hadd_epi16(_mm256_extracti128_si256(q8sums, 0), _mm256_extracti128_si256(q8sums, 1));
1713
+ va_bsum = _mm512_castsi128_si512(q8s);
1714
+ vd1 = _mm512_set1_ps(A[0 * KB + i].d);
1715
+ }
1716
+
1717
+ // step 1: accumultate the quants
1718
+ __m512i acc = _mm512_setzero_si512();
1719
+ const char * b_ptr = B + PACKED_INDEX(col, i, KB, TILE_SIZE);
1720
+ const char * b_qs = b_ptr;
1721
+ const char * b_qh = b_ptr + offset_qh;
1722
+ for (int k_group = 0; k_group < QK_K / 32; ++k_group) {
1723
+ __m512i vsum = _mm512_setzero_si512();
1724
+ __m512i hmask0 = _mm512_set1_epi8(0x1);
1725
+ __m512i hmask1 = _mm512_set1_epi8(0x2);
1726
+ __m512i hbits = _mm512_loadu_si512((const __m512i *)(b_qh + k_group * 64));
1727
+ for (int k = 0; k < 8; k += 2) {
1728
+ __m512i va0 = _mm512_permutexvar_epi32(_mm512_set1_epi32(k + 0), va[k_group]);
1729
+ __m512i va1 = _mm512_permutexvar_epi32(_mm512_set1_epi32(k + 1), va[k_group]);
1730
+
1731
+ __m512i bytes = _mm512_loadu_si512((const __m512i *)b_qs);
1732
+ __m512i vb0 = _mm512_and_si512(bytes, lowMask);
1733
+ __m512i vb1 = _mm512_and_si512(_mm512_srli_epi16(bytes, 4), lowMask);
1734
+
1735
+ __m512i vh0 = _mm512_slli_epi16(_mm512_srli_epi16(_mm512_and_si512(hbits, hmask0), k), 4);
1736
+ __m512i vh1 = _mm512_slli_epi16(_mm512_srli_epi16(_mm512_and_si512(hbits, hmask1), k + 1), 4);
1737
+
1738
+ hmask0 = _mm512_slli_epi16(hmask0, 2);
1739
+ hmask1 = _mm512_slli_epi16(hmask1, 2);
1740
+ vb0 = _mm512_add_epi8(vb0, vh0);
1741
+ vb1 = _mm512_add_epi8(vb1, vh1);
1742
+
1743
+ vsum = _mm512_dpbusd_epi32(vsum, vb0, va0);
1744
+ vsum = _mm512_dpbusd_epi32(vsum, vb1, va1);
1745
+
1746
+ b_qs += 64;
1747
+ }
1748
+ // vacc += scale * (q8 @ q5)
1749
+ const __m512i vscale = _mm512_cvtepi8_epi32(_mm_loadu_si128((const __m128i *)(b_ptr + offset_scales + k_group * TILE_N)));
1750
+ acc = _mm512_add_epi32(acc, _mm512_mullo_epi32(vsum, vscale));
1751
+ }
1752
+ const __m512 vd0 = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)(b_ptr + offset_d0)));
1753
+ vc[col] = _mm512_fmadd_ps(_mm512_cvtepi32_ps(acc), _mm512_mul_ps(vd0, vd1), vc[col]);
1754
+
1755
+ // step 2: accumulate the mins
1756
+ __m512i acc_m = _mm512_setzero_si512();
1757
+ for (int k = 0; k < 4; ++k) {
1758
+ __m512i vmask = _mm512_set1_epi32(k);
1759
+ __m512i va = _mm512_permutexvar_epi32(vmask, va_bsum);
1760
+ __m512i vb = _mm512_cvtepi8_epi16(_mm256_loadu_si256((const __m256i *)(b_ptr + offset_mins + k * 32)));
1761
+ acc_m = _mm512_dpwssds_epi32(acc_m, va, vb);
1762
+ }
1763
+ const __m512 vdmin = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)(b_ptr + offset_dmin)));
1764
+ vc[col] = _mm512_fnmadd_ps(_mm512_cvtepi32_ps(acc_m), _mm512_mul_ps(vdmin, vd1), vc[col]);
1765
+ };
1766
+
1767
+ for (int i = 0; i < KB; ++i) {
1768
+ Unroll<COLS>{}(compute, i);
1769
+ }
1770
+
1771
+ //store to C
1772
+ auto storec = [&](auto col) {
1773
+ _mm512_storeu_ps((__m512i*)(C + 0 * ldc + col * 16), vc[col]);
1774
+ };
1775
+ Unroll<COLS>{}(storec);
1776
+ }
1777
+ };
1778
+
1779
+ template <int BLOCK_M, int BLOCK_N, int BLOCK_K>
1780
+ struct tinygemm_kernel_vnni<block_q8_K, block_q6_K, float, BLOCK_M, BLOCK_N, BLOCK_K> {
1781
+ static void apply(int KB, const void * RESTRICT _A, const void * RESTRICT _B, float * RESTRICT C, int ldc) {
1782
+
1783
+ constexpr int COLS = BLOCK_N / 16;
1784
+ const int TILE_SIZE = TILE_N * sizeof(block_q6_K);
1785
+
1786
+ const block_q8_K * RESTRICT A = static_cast<const block_q8_K *>(_A);
1787
+ const char * RESTRICT B = static_cast<const char *>(_B);
1788
+
1789
+ // load the 256 bytes from A to 4 avx512 vectors
1790
+ __m512i va[4];
1791
+ __m512 vc[COLS];
1792
+ __m512 vd1;
1793
+
1794
+ // packed_B:
1795
+ const int offset_qh = (QK_K / 2) * TILE_N;
1796
+ const int offset_scales = (QK_K / 2) * TILE_N + (QK_K / 4) * TILE_N;
1797
+ const int offset_d0 = (QK_K / 2) * TILE_N + (QK_K / 4) * TILE_N + 16 * TILE_N;
1798
+
1799
+ // compensation
1800
+ __m512i vcomp;
1801
+
1802
+ const __m512i m32s = _mm512_set1_epi32(32);
1803
+ const __m512i lowMask = _mm512_set1_epi8(0xF);
1804
+
1805
+ auto loadc = [&](auto col) {
1806
+ vc[col] = _mm512_setzero_ps();
1807
+ };
1808
+ Unroll<COLS>{}(loadc);
1809
+
1810
+ auto compute = [&](auto col, auto i) {
1811
+ if constexpr (col == 0) {
1812
+ // load a
1813
+ va[0] = _mm512_loadu_si512((const __m512i *)(A[0 * KB + i].qs + 0));
1814
+ va[1] = _mm512_loadu_si512((const __m512i *)(A[0 * KB + i].qs + 64));
1815
+ va[2] = _mm512_loadu_si512((const __m512i *)(A[0 * KB + i].qs + 128));
1816
+ va[3] = _mm512_loadu_si512((const __m512i *)(A[0 * KB + i].qs + 192));
1817
+
1818
+ const __m256i q8sums = _mm256_loadu_si256((const __m256i *)A[0 * KB + i].bsums);
1819
+ vcomp = _mm512_mullo_epi32(_mm512_cvtepi16_epi32(q8sums), m32s);
1820
+ vd1 = _mm512_set1_ps(A[0 * KB + i].d);
1821
+ }
1822
+
1823
+ // accmulate the quants
1824
+ __m512i acc = _mm512_setzero_si512();
1825
+ const char * b_ptr = B + PACKED_INDEX(col, i, KB, TILE_SIZE);
1826
+ const char * b_qs = b_ptr;
1827
+ const char * b_qh = b_ptr + offset_qh;
1828
+ int mask = 0;
1829
+ for (int k_group = 0; k_group < QK_K / 16; ++k_group) {
1830
+ int r = k_group >> 2;
1831
+ __m512i va0 = _mm512_permutexvar_epi32(_mm512_set1_epi32(mask++), va[r]);
1832
+ __m512i va1 = _mm512_permutexvar_epi32(_mm512_set1_epi32(mask++), va[r]);
1833
+
1834
+ __m512i vsum = _mm512_setzero_si512();
1835
+ __m512i hmask = _mm512_set1_epi8(0x3);
1836
+
1837
+ __m512i bytes = _mm512_loadu_si512(b_qs);
1838
+ __m512i hbits = _mm512_loadu_si512(b_qh);
1839
+ __m512i vb0 = _mm512_and_si512(bytes, lowMask);
1840
+ __m512i vb1 = _mm512_and_si512(_mm512_srli_epi16(bytes, 4), lowMask);
1841
+ __m512i vh0 = _mm512_slli_epi16(_mm512_and_si512(hbits, hmask), 4);
1842
+ __m512i vh1 = _mm512_slli_epi16(_mm512_and_si512(hbits, _mm512_slli_epi16(hmask, 2)), 2);
1843
+
1844
+ vb0 = _mm512_add_epi8(vb0, vh0);
1845
+ vb1 = _mm512_add_epi8(vb1, vh1);
1846
+ vsum = _mm512_dpbusd_epi32(vsum, vb0, va0);
1847
+ vsum = _mm512_dpbusd_epi32(vsum, vb1, va1);
1848
+ b_qs += 64;
1849
+
1850
+ va0 = _mm512_permutexvar_epi32(_mm512_set1_epi32(mask++), va[r]);
1851
+ va1 = _mm512_permutexvar_epi32(_mm512_set1_epi32(mask++), va[r]);
1852
+
1853
+ bytes = _mm512_loadu_si512(b_qs);
1854
+ vb0 = _mm512_and_si512(bytes, lowMask);
1855
+ vb1 = _mm512_and_si512(_mm512_srli_epi16(bytes, 4), lowMask);
1856
+ vh0 = _mm512_and_si512(hbits, _mm512_slli_epi16(hmask, 4));
1857
+ vh1 = _mm512_srli_epi16(_mm512_and_si512(hbits, _mm512_slli_epi16(hmask, 6)), 2);
1858
+ vb0 = _mm512_add_epi8(vb0, vh0);
1859
+ vb1 = _mm512_add_epi8(vb1, vh1);
1860
+ vsum = _mm512_dpbusd_epi32(vsum, vb0, va0);
1861
+ vsum = _mm512_dpbusd_epi32(vsum, vb1, va1);
1862
+ b_qs += 64;
1863
+ b_qh += 64;
1864
+
1865
+ // B * A - 32 * A
1866
+ __m512i vmask = _mm512_set1_epi32(k_group);
1867
+ vsum = _mm512_sub_epi32(vsum, _mm512_permutexvar_epi32(vmask, vcomp));
1868
+
1869
+ // vacc += scale * (q8 @ q6)
1870
+ const __m512i vscale = _mm512_cvtepi8_epi32(_mm_loadu_si128((const __m128i *)(b_ptr + offset_scales + k_group * TILE_N)));
1871
+ acc = _mm512_add_epi32(acc, _mm512_mullo_epi32(vsum, vscale));
1872
+ }
1873
+ const __m512 vd0 = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)(b_ptr + offset_d0)));
1874
+ vc[col] = _mm512_fmadd_ps(_mm512_cvtepi32_ps(acc), _mm512_mul_ps(vd0, vd1), vc[col]);
1875
+ };
1876
+
1877
+ for (int i = 0; i < KB; ++i) {
1878
+ Unroll<COLS>{}(compute, i);
1879
+ }
1880
+
1881
+ //store to C
1882
+ auto storec = [&](int col) {
1883
+ _mm512_storeu_ps((__m512i*)(C + 0 * ldc + col * 16), vc[col]);
1884
+ };
1885
+ Unroll<COLS>{}(storec);
1886
+ }
1887
+ };
1888
+
1889
+ template <int BLOCK_M, int BLOCK_N, int BLOCK_K>
1890
+ struct tinygemm_kernel_vnni<block_q8_K, block_iq4_xs, float, BLOCK_M, BLOCK_N, BLOCK_K> {
1891
+ static void apply(int KB, const void * RESTRICT _A, const void * RESTRICT _B, float * RESTRICT C, int ldc) {
1892
+
1893
+ constexpr int COLS = BLOCK_N / 16;
1894
+ const int TILE_SIZE = TILE_N * sizeof(block_iq4_xs) + TILE_N * 2;
1895
+
1896
+ const block_q8_K * RESTRICT A = static_cast<const block_q8_K *>(_A);
1897
+ const char * RESTRICT B = static_cast<const char *>(_B);
1898
+
1899
+ // load the 256 bytes from A to 4 avx512 vectors
1900
+ __m512i va[4];
1901
+ __m512 vc[COLS];
1902
+ __m512 vd1;
1903
+
1904
+ // packed_B:
1905
+ const int offset_scales = (QK_K / 2) * TILE_N ;
1906
+ const int offset_d0 = (QK_K / 2) * TILE_N + 8 * TILE_N;
1907
+
1908
+ // compensation
1909
+ __m512i vcomp;
1910
+
1911
+ const __m256i m128s = _mm256_set1_epi16(128);
1912
+ const __m512i lowMask = _mm512_set1_epi8(0xF);
1913
+
1914
+ const __m512i values128 = _mm512_set_epi8(
1915
+ 113, 89, 69, 53, 38, 25, 13, 1, -10, -22, -35, -49, -65, -83, -104, -127,
1916
+ 113, 89, 69, 53, 38, 25, 13, 1, -10, -22, -35, -49, -65, -83, -104, -127,
1917
+ 113, 89, 69, 53, 38, 25, 13, 1, -10, -22, -35, -49, -65, -83, -104, -127,
1918
+ 113, 89, 69, 53, 38, 25, 13, 1, -10, -22, -35, -49, -65, -83, -104, -127
1919
+ );
1920
+ const __m512i off = _mm512_set1_epi8(static_cast<char>(0x80));
1921
+ const __m512i values256 = _mm512_add_epi8(values128, off);
1922
+
1923
+ auto loadc = [&](auto col) {
1924
+ vc[col] = _mm512_setzero_ps();
1925
+ };
1926
+ Unroll<COLS>{}(loadc);
1927
+
1928
+ auto compute = [&](auto col, auto i) {
1929
+ if constexpr (col == 0) {
1930
+ // load a
1931
+ va[0] = _mm512_loadu_si512((const __m512i *)(A[0 * KB + i].qs + 0));
1932
+ va[1] = _mm512_loadu_si512((const __m512i *)(A[0 * KB + i].qs + 64));
1933
+ va[2] = _mm512_loadu_si512((const __m512i *)(A[0 * KB + i].qs + 128));
1934
+ va[3] = _mm512_loadu_si512((const __m512i *)(A[0 * KB + i].qs + 192));
1935
+
1936
+ // compensation: 128 * A
1937
+ const __m256i q8sums = _mm256_loadu_si256((const __m256i *)A[0 * KB + i].bsums);
1938
+ vcomp = _mm512_castsi256_si512(_mm256_madd_epi16(q8sums, m128s));
1939
+ vd1 = _mm512_set1_ps(A[0 * KB + i].d);
1940
+ }
1941
+
1942
+ // accmulate the quants
1943
+ __m512i acc = _mm512_setzero_si512();
1944
+ const char * b_ptr = B + PACKED_INDEX(col, i, KB, TILE_SIZE);
1945
+ const char * b_qs = b_ptr;
1946
+ int mask = 0;
1947
+ for (int k_group = 0; k_group < QK_K / 32; ++k_group) {
1948
+ int r = k_group >> 1;
1949
+ __m512i vmask = _mm512_set1_epi32(k_group);
1950
+ __m512i vsum = _mm512_setzero_si512();
1951
+ for (int k = 0; k < 8; k += 2) {
1952
+ __m512i va0 = _mm512_permutexvar_epi32(_mm512_set1_epi32(mask++), va[r]);
1953
+ __m512i va1 = _mm512_permutexvar_epi32(_mm512_set1_epi32(mask++), va[r]);
1954
+
1955
+ __m512i bytes = _mm512_loadu_si512(b_qs);
1956
+ __m512i vb0 = _mm512_shuffle_epi8(values256, _mm512_and_si512(bytes, lowMask));
1957
+ __m512i vb1 = _mm512_shuffle_epi8(values256, _mm512_and_si512(_mm512_srli_epi16(bytes, 4), lowMask));
1958
+
1959
+ vsum = _mm512_dpbusd_epi32(vsum, vb0, va0);
1960
+ vsum = _mm512_dpbusd_epi32(vsum, vb1, va1);
1961
+ b_qs += 64;
1962
+ }
1963
+ // (B + 128) * A - 128 * A
1964
+ vsum = _mm512_sub_epi32(vsum, _mm512_permutexvar_epi32(vmask, vcomp));
1965
+
1966
+ // vacc += scale * (q8 @ q4)
1967
+ const __m512i vscale = _mm512_cvtepi8_epi32(_mm_loadu_si128((const __m128i *)(b_ptr + offset_scales + k_group * TILE_N)));
1968
+ acc = _mm512_add_epi32(acc, _mm512_mullo_epi32(vsum, vscale));
1969
+ }
1970
+ const __m512 vd0 = _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)(b_ptr + offset_d0)));
1971
+ vc[col] = _mm512_fmadd_ps(_mm512_cvtepi32_ps(acc), _mm512_mul_ps(vd0, vd1), vc[col]);
1972
+ };
1973
+
1974
+ for (int i = 0; i < KB; ++i) {
1975
+ Unroll<COLS>{}(compute, i);
1976
+ }
1977
+
1978
+ //store to C
1979
+ auto storec = [&](auto col) {
1980
+ _mm512_storeu_ps((__m512i*)(C + 0 * ldc + col * 16), vc[col]);
1981
+ };
1982
+ Unroll<COLS>{}(storec);
1983
+ }
1984
+ };
1985
+
1986
+ #define LAUNCH_TINYGEMM_KERNEL_VNNI(NB_SIZE) \
1987
+ tinygemm_kernel_vnni<vec_dot_type, type, float, 1, NB_SIZE, blck_size>::apply( \
1988
+ KB, wdata_batch, \
1989
+ (const char *)src0->data + src0_offset + PACKED_INDEX(nb * kTilesN, 0, KB, TILE_SIZE), \
1990
+ (float *) dst->data + dst_offset + nb_start, ldc)
1991
+
1992
+ template <typename TA, typename TB, typename TC, int BLOCK_K,
1993
+ typename std::enable_if<!is_type_qkk<TB>::value, int>::type = 0>
1994
+ void tinygemm_kernel_amx(int M, int N, int KB, const void * RESTRICT _A, const void * RESTRICT _B, TC * RESTRICT C, int ldc) {
1995
+ using packed_B_t = packed_B_type<TB>;
1996
+ const int TILE_SIZE = get_tile_size<TB>();
1997
+ const bool need_unpack = do_unpack<TB>::value;
1998
+
1999
+ GGML_ASSERT(M <= 2 * TILE_M && N == 2 * TILE_N);
2000
+ const TA * RESTRICT A = static_cast<const TA *>(_A);
2001
+ const char * RESTRICT B = static_cast<const char *>(_B);
2002
+
2003
+ const int m0 = std::min(M, TILE_M);
2004
+ const int m1 = std::max(M - TILE_M, 0);
2005
+ const int lda = KB * sizeof(TA);
2006
+ //const int ldb = KB * sizeof(TB);
2007
+
2008
+ alignas(64) static thread_local packed_B_t Tile0[TILE_N * TILE_K];
2009
+ alignas(64) static thread_local packed_B_t Tile1[TILE_N * TILE_K];
2010
+ alignas(64) static thread_local int8_t Tile23[TILE_M * TILE_K];
2011
+
2012
+ alignas(64) static thread_local int32_t TileC0[TILE_M * TILE_N * 4];
2013
+ alignas(64) static thread_local int32_t TileC1[TILE_M * TILE_N * 4];
2014
+
2015
+ // double buffering C to interleave avx512 and amx
2016
+ int32_t * C_cur = TileC0;
2017
+ int32_t * C_pre = TileC1;
2018
+
2019
+ auto Tile4 = [&](int32_t * base) { return base; };
2020
+ auto Tile5 = [&](int32_t * base) { return base + TILE_M * TILE_N; };
2021
+ auto Tile6 = [&](int32_t * base) { return base + 2 * TILE_M * TILE_N; };
2022
+ auto Tile7 = [&](int32_t * base) { return base + 3 * TILE_M * TILE_N; };
2023
+
2024
+ if (M == 2 * TILE_M) {
2025
+ // i = 0
2026
+ const char * B_blk0 = B + PACKED_INDEX(0, 0, KB, TILE_SIZE);
2027
+ const char * B_blk1 = B + PACKED_INDEX(1, 0, KB, TILE_SIZE);
2028
+ if (need_unpack) {
2029
+ unpack_B<TB>(Tile0, B_blk0);
2030
+ _tile_loadd(TMM0, Tile0, TILE_N * VNNI_BLK);
2031
+ } else {
2032
+ _tile_loadd(TMM0, B_blk0, TILE_N * VNNI_BLK);
2033
+ }
2034
+
2035
+ _tile_zero(TMM4);
2036
+ _tile_loadd(TMM2, A[0].qs, lda);
2037
+ _tile_dpbssd(TMM4, TMM2, TMM0);
2038
+ _tile_stored(TMM4, Tile4(C_pre), TILE_N * sizeof(int32_t));
2039
+
2040
+ _tile_zero(TMM5);
2041
+ _tile_loadd(TMM3, A[TILE_M * KB + 0].qs, lda);
2042
+ _tile_dpbssd(TMM5, TMM3, TMM0);
2043
+ _tile_stored(TMM5, Tile5(C_pre), TILE_N * sizeof(int32_t));
2044
+
2045
+ if (need_unpack) {
2046
+ unpack_B<TB>(Tile1, B_blk1);
2047
+ _tile_loadd(TMM1, Tile1, TILE_N * VNNI_BLK);
2048
+ } else {
2049
+ _tile_loadd(TMM1, B_blk1, TILE_N * VNNI_BLK);
2050
+ }
2051
+
2052
+ _tile_zero(TMM6);
2053
+ _tile_dpbssd(TMM6, TMM2, TMM1);
2054
+ _tile_stored(TMM6, Tile6(C_pre), TILE_N * sizeof(int32_t));
2055
+
2056
+ _tile_zero(TMM7);
2057
+ _tile_dpbssd(TMM7, TMM3, TMM1);
2058
+ _tile_stored(TMM7, Tile7(C_pre), TILE_N * sizeof(int32_t));
2059
+
2060
+ for (int i = 1; i < KB; ++i) {
2061
+ // index of previous iter
2062
+ const int ii = i - 1;
2063
+ const char * B_blk0 = B + PACKED_INDEX(0, i, KB, TILE_SIZE);
2064
+ const char * B_blk1 = B + PACKED_INDEX(1, i, KB, TILE_SIZE);
2065
+ GGML_DISPATCH_BOOL(ii > 0, is_acc, [&] {
2066
+ if (need_unpack) {
2067
+ unpack_B<TB>(Tile0, B_blk0);
2068
+ _tile_loadd(TMM0, Tile0, TILE_N * VNNI_BLK);
2069
+ } else {
2070
+ _tile_loadd(TMM0, B_blk0, TILE_N * VNNI_BLK);
2071
+ }
2072
+ _tile_zero(TMM4);
2073
+ _tile_loadd(TMM2, A[i].qs, lda);
2074
+ acc_C<TA, TB, is_acc>::apply(C, ldc, Tile4(C_pre), &A[ii], KB, B + PACKED_INDEX(0, ii, KB, TILE_SIZE), TILE_M);
2075
+
2076
+ _tile_dpbssd(TMM4, TMM2, TMM0);
2077
+ _tile_stored(TMM4, Tile4(C_cur), TILE_N * sizeof(int32_t));
2078
+
2079
+ _tile_zero(TMM5);
2080
+ _tile_loadd(TMM3, A[TILE_M * KB + i].qs, lda);
2081
+ acc_C<TA, TB, is_acc>::apply(C + TILE_M * ldc, ldc, Tile5(C_pre), &A[TILE_M * KB + ii], KB, B + PACKED_INDEX(0, ii, KB, TILE_SIZE), TILE_M);
2082
+
2083
+ _tile_dpbssd(TMM5, TMM3, TMM0);
2084
+ _tile_stored(TMM5, Tile5(C_cur), TILE_N * sizeof(int32_t));
2085
+
2086
+ if (need_unpack) {
2087
+ unpack_B<TB>(Tile1, B_blk1);
2088
+ _tile_loadd(TMM1, Tile1, TILE_N * VNNI_BLK);
2089
+ } else {
2090
+ _tile_loadd(TMM1, B_blk1, TILE_N * VNNI_BLK);
2091
+ }
2092
+ _tile_zero(TMM6);
2093
+ acc_C<TA, TB, is_acc>::apply(C + TILE_N, ldc, Tile6(C_pre), &A[ii], KB, B + PACKED_INDEX(1, ii, KB, TILE_SIZE), TILE_M);
2094
+
2095
+ _tile_dpbssd(TMM6, TMM2, TMM1);
2096
+ _tile_stored(TMM6, Tile6(C_cur), TILE_N * sizeof(int32_t));
2097
+
2098
+ _tile_zero(TMM7);
2099
+ acc_C<TA, TB, is_acc>::apply(C + TILE_M * ldc + TILE_N, ldc, Tile7(C_pre), &A[TILE_M * KB + ii], KB, B + PACKED_INDEX(1, ii, KB, TILE_SIZE), TILE_M);
2100
+
2101
+ _tile_dpbssd(TMM7, TMM3, TMM1);
2102
+ _tile_stored(TMM7, Tile7(C_cur), TILE_N * sizeof(int32_t));
2103
+
2104
+ std::swap(C_cur, C_pre);
2105
+ });
2106
+ }
2107
+ // final accumulation
2108
+ {
2109
+ int ii = KB - 1;
2110
+ acc_C<TA, TB, true>::apply(C, ldc, Tile4(C_pre), &A[ii], KB, B + PACKED_INDEX(0, ii, KB, TILE_SIZE), TILE_M);
2111
+ acc_C<TA, TB, true>::apply(C + TILE_M * ldc, ldc, Tile5(C_pre), &A[TILE_M * KB + ii], KB, B + PACKED_INDEX(0, ii, KB, TILE_SIZE), TILE_M);
2112
+ acc_C<TA, TB, true>::apply(C + TILE_N, ldc, Tile6(C_pre), &A[ii], KB, B + PACKED_INDEX(1, ii, KB, TILE_SIZE), TILE_M);
2113
+ acc_C<TA, TB, true>::apply(C + TILE_M * ldc + TILE_N, ldc, Tile7(C_pre), &A[TILE_M * KB + ii], KB, B + PACKED_INDEX(1, ii, KB, TILE_SIZE), TILE_M);
2114
+ }
2115
+ } else {
2116
+ for (int i = 0; i < KB; ++i) {
2117
+ _tile_zero(TMM4);
2118
+ _tile_zero(TMM6);
2119
+ if (m1 != 0) {
2120
+ _tile_zero(TMM5);
2121
+ _tile_zero(TMM7);
2122
+ }
2123
+
2124
+ const char * B_blk0 = B + PACKED_INDEX(0, i, KB, TILE_SIZE);
2125
+ const char * B_blk1 = B + PACKED_INDEX(1, i, KB, TILE_SIZE);
2126
+ if (need_unpack) {
2127
+ unpack_B<TB>(Tile0, B_blk0);
2128
+ _tile_loadd(TMM0, Tile0, TILE_N * VNNI_BLK);
2129
+ } else {
2130
+ _tile_loadd(TMM0, B_blk0, TILE_N * VNNI_BLK);
2131
+ }
2132
+
2133
+ if (need_unpack) {
2134
+ unpack_B<TB>(Tile1, B_blk1);
2135
+ _tile_loadd(TMM1, Tile1, TILE_N * VNNI_BLK);
2136
+ } else {
2137
+ _tile_loadd(TMM1, B_blk1, TILE_N * VNNI_BLK);
2138
+ }
2139
+
2140
+ if (m0 == TILE_M) {
2141
+ _tile_loadd(TMM2, A[i].qs, lda);
2142
+ } else {
2143
+ unpack_A(Tile23, &A[i], KB, m0);
2144
+ _tile_loadd(TMM2, Tile23, TILE_K);
2145
+ }
2146
+
2147
+ _tile_dpbssd(TMM4, TMM2, TMM0);
2148
+ _tile_dpbssd(TMM6, TMM2, TMM1);
2149
+
2150
+ _tile_stored(TMM4, Tile4(C_cur), TILE_N * sizeof(int32_t));
2151
+ _tile_stored(TMM6, Tile6(C_cur), TILE_N * sizeof(int32_t));
2152
+
2153
+ GGML_DISPATCH_BOOL(i > 0, is_acc, [&] {
2154
+ acc_C<TA, TB, is_acc>::apply(C, ldc, Tile4(C_cur), &A[i], KB, B + PACKED_INDEX(0, i, KB, TILE_SIZE), m0);
2155
+ acc_C<TA, TB, is_acc>::apply(C + TILE_N, ldc, Tile6(C_cur), &A[i], KB, B + PACKED_INDEX(1, i, KB, TILE_SIZE), m0);
2156
+ });
2157
+
2158
+ if (m1 != 0) {
2159
+ unpack_A(Tile23, &A[TILE_M * KB + i], KB, m1);
2160
+ _tile_loadd(TMM3, Tile23, TILE_K);
2161
+
2162
+ _tile_dpbssd(TMM5, TMM3, TMM0);
2163
+ _tile_dpbssd(TMM7, TMM3, TMM1);
2164
+ _tile_stored(TMM5, Tile5(C_cur), TILE_N * sizeof(int32_t));
2165
+ _tile_stored(TMM7, Tile7(C_cur), TILE_N * sizeof(int32_t));
2166
+ GGML_DISPATCH_BOOL(i > 0, is_acc, [&] {
2167
+ acc_C<TA, TB, is_acc>::apply(C + TILE_M * ldc, ldc, Tile5(C_cur), &A[TILE_M * KB + i], KB, B + PACKED_INDEX(0, i, KB, TILE_SIZE), m1);
2168
+ acc_C<TA, TB, is_acc>::apply(C + TILE_M * ldc + TILE_N, ldc, Tile7(C_cur), &A[TILE_M * KB + i], KB, B + PACKED_INDEX(1, i, KB, TILE_SIZE), m1);
2169
+ });
2170
+ }
2171
+ }
2172
+ }
2173
+ return;
2174
+ }
2175
+
2176
+ template <typename TA, typename TB, typename TC, int BLOCK_K,
2177
+ typename std::enable_if<is_type_qkk<TB>::value, int>::type = 0>
2178
+ void tinygemm_kernel_amx(int M, int N, int KB, const void * RESTRICT _A, const void * RESTRICT _B, float * RESTRICT C, int ldc) {
2179
+ static_assert(std::is_same<TA, block_q8_K>::value);
2180
+ const int TILE_SIZE = get_tile_size<TB>();
2181
+
2182
+ GGML_ASSERT(M <= 2 * TILE_M && N == 2 * TILE_N);
2183
+ const TA * RESTRICT A = static_cast<const TA *>(_A);
2184
+ const char * RESTRICT B = static_cast<const char *>(_B);
2185
+
2186
+ const int m0 = std::min(M, TILE_M);
2187
+ const int m1 = std::max(M - TILE_M, 0);
2188
+ //const int lda = KB * sizeof(TA);
2189
+
2190
+ alignas(64) static thread_local int8_t Tile0[TILE_N * TILE_K];
2191
+ alignas(64) static thread_local int8_t Tile1[TILE_N * TILE_K];
2192
+ alignas(64) static thread_local int8_t Tile23[TILE_M * TILE_K];
2193
+
2194
+ // mat mul result for each group
2195
+ alignas(64) static thread_local int32_t Tile4[TILE_M * TILE_N];
2196
+ alignas(64) static thread_local int32_t Tile5[TILE_M * TILE_N];
2197
+ alignas(64) static thread_local int32_t Tile6[TILE_M * TILE_N];
2198
+ alignas(64) static thread_local int32_t Tile7[TILE_M * TILE_N];
2199
+
2200
+ // sum of each QK_K block, contains 8 groups, int32
2201
+ alignas(64) static thread_local int32_t Sumi4[TILE_M * TILE_N];
2202
+ alignas(64) static thread_local int32_t Sumi5[TILE_M * TILE_N];
2203
+ alignas(64) static thread_local int32_t Sumi6[TILE_M * TILE_N];
2204
+ alignas(64) static thread_local int32_t Sumi7[TILE_M * TILE_N];
2205
+
2206
+ const int k_group_size = std::is_same<TB, block_q6_K>::value ? 16 : 32;
2207
+ for (int i = 0; i < KB; ++i) {
2208
+ // step 1: accumulate the quants across 8 groups, each group with 32
2209
+ for (int k = 0; k < QK_K / k_group_size; ++k) {
2210
+ GGML_DISPATCH_BOOL(k > 0, is_acc, [&] {
2211
+ _tile_zero(TMM4);
2212
+ _tile_zero(TMM6);
2213
+
2214
+ unpack_B<TB>(Tile0, B + PACKED_INDEX(0, i, KB, TILE_SIZE), k);
2215
+ _tile_loadd(TMM0, Tile0, TILE_N * VNNI_BLK);
2216
+
2217
+ unpack_B<TB>(Tile1, B + PACKED_INDEX(1, i, KB, TILE_SIZE), k);
2218
+ _tile_loadd(TMM1, Tile1, TILE_N * VNNI_BLK);
2219
+
2220
+ unpack_A<TB>(Tile23, &A[i], KB, k, m0);
2221
+ _tile_loadd(TMM2, Tile23, TILE_K);
2222
+
2223
+ _tile_dpbssd(TMM4, TMM2, TMM0);
2224
+ _tile_dpbssd(TMM6, TMM2, TMM1);
2225
+
2226
+ _tile_stored(TMM4, Tile4, TILE_N * sizeof(int32_t));
2227
+ _tile_stored(TMM6, Tile6, TILE_N * sizeof(int32_t));
2228
+
2229
+ scale_C<TB, is_acc>(Tile4, Sumi4, B + PACKED_INDEX(0, i, KB, TILE_SIZE), k, m0);
2230
+ scale_C<TB, is_acc>(Tile6, Sumi6, B + PACKED_INDEX(1, i, KB, TILE_SIZE), k, m0);
2231
+
2232
+ if (m1 != 0) {
2233
+ _tile_zero(TMM5);
2234
+ _tile_zero(TMM7);
2235
+
2236
+ unpack_A<TB>(Tile23, &A[TILE_M * KB + i], KB, k, m1);
2237
+ _tile_loadd(TMM3, Tile23, TILE_K);
2238
+
2239
+ _tile_dpbssd(TMM5, TMM3, TMM0);
2240
+ _tile_dpbssd(TMM7, TMM3, TMM1);
2241
+
2242
+ _tile_stored(TMM5, Tile5, TILE_N * sizeof(int32_t));
2243
+ _tile_stored(TMM7, Tile7, TILE_N * sizeof(int32_t));
2244
+
2245
+ scale_C<TB, is_acc>(Tile5, Sumi5, B + PACKED_INDEX(0, i, KB, TILE_SIZE), k, m1);
2246
+ scale_C<TB, is_acc>(Tile7, Sumi7, B + PACKED_INDEX(1, i, KB, TILE_SIZE), k, m1);
2247
+ }
2248
+ });
2249
+ }
2250
+
2251
+ // step 2: accmulate the mins
2252
+ GGML_DISPATCH_BOOL(i > 0, is_acc, [&] {
2253
+ acc_C<TA, TB, is_acc>::apply(C, ldc, Sumi4, &A[i], KB, B + PACKED_INDEX(0, i, KB, TILE_SIZE), m0);
2254
+ acc_C<TA, TB, is_acc>::apply(C + TILE_N, ldc, Sumi6, &A[i], KB, B + PACKED_INDEX(1, i, KB, TILE_SIZE), m0);
2255
+ if (m1 != 0) {
2256
+ acc_C<TA, TB, is_acc>::apply(C + TILE_M * ldc, ldc, Sumi5, &A[TILE_M * KB + i], KB, B + PACKED_INDEX(0, i, KB, TILE_SIZE), m1);
2257
+ acc_C<TA, TB, is_acc>::apply(C + TILE_M * ldc + TILE_N, ldc, Sumi7, &A[TILE_M * KB + i], KB, B + PACKED_INDEX(1, i, KB, TILE_SIZE), m1);
2258
+ }
2259
+ });
2260
+ }
2261
+ return;
2262
+ }
2263
+
2264
+ } // anonymous namespace
2265
+
2266
+ // get the packed tensor size for quantized weights
2267
+ size_t ggml_backend_amx_get_alloc_size(const struct ggml_tensor * tensor) {
2268
+ const enum ggml_type TYPE = tensor->type;
2269
+
2270
+ const int K = tensor->ne[0]; // ne0: in_features
2271
+ const int N = tensor->ne[1]; // ne1: out_features
2272
+
2273
+ auto get_tensor_size = [&] {
2274
+ size_t row_size_B{0};
2275
+ GGML_DISPATCH_QTYPES(TYPE, [&] {
2276
+ row_size_B = get_row_size<type, blck_size>(K);
2277
+ });
2278
+ return N * row_size_B;
2279
+ };
2280
+
2281
+ if (qtype_has_amx_kernels(TYPE)) {
2282
+ return get_tensor_size();
2283
+ } else {
2284
+ // for f16, bf16 we don't do packing
2285
+ return ggml_nbytes(tensor);
2286
+ }
2287
+ }
2288
+
2289
+ // pack weight to vnni format
2290
+ void ggml_backend_amx_convert_weight(struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
2291
+ GGML_ASSERT(offset == 0 && size == ggml_nbytes(tensor)); // only full tensor conversion is supported for now
2292
+
2293
+ const enum ggml_type TYPE = tensor->type;
2294
+
2295
+ const int K = tensor->ne[0]; // ne0: in_features
2296
+ const int N = tensor->ne[1]; // ne1: out_features
2297
+
2298
+ GGML_DISPATCH_QTYPES(TYPE, [&] {
2299
+ convert_B_packed_format<type, blck_size>((void *)((char *)tensor->data + offset), (const type *)data, N, K);
2300
+ });
2301
+ }
2302
+
2303
+ // ne2 is passed explicitly to help compiler optimize repeated calls
2304
+ inline int64_t ggml_batch_offset(const ggml_tensor * t, int64_t batch_idx, int64_t ne2) {
2305
+ const int64_t i2 = batch_idx % ne2;
2306
+ const int64_t i3 = batch_idx / ne2;
2307
+ return i3 * t->nb[3] + i2 * t->nb[2];
2308
+ }
2309
+
2310
+ size_t ggml_backend_amx_desired_wsize(const struct ggml_tensor * dst) {
2311
+ struct ggml_tensor * src0 = dst->src[0];
2312
+
2313
+ const enum ggml_type TYPE = src0->type;
2314
+
2315
+ const bool is_floating_type = TYPE == GGML_TYPE_F16;
2316
+ if (is_floating_type) {
2317
+ return 0;
2318
+ }
2319
+
2320
+ const int M = dst->ne[1];
2321
+ const int K = src0->ne[0];
2322
+ const int64_t n_batch = dst->ne[2] * dst->ne[3];
2323
+
2324
+ size_t desired_wsize = 0;
2325
+
2326
+ GGML_DISPATCH_QTYPES(TYPE, [&] {
2327
+ const size_t row_size_A = K / blck_size * sizeof(vec_dot_type);
2328
+ desired_wsize = n_batch * M * row_size_A;
2329
+ });
2330
+
2331
+ return desired_wsize;
2332
+ }
2333
+
2334
+ // NB: mixed dtype gemm with Advanced Matrix Extensions (Intel AMX)
2335
+ //
2336
+ // src0: weight in shape of {N, K}, quantized
2337
+ // src1: input in shape of {M, K}, float32
2338
+ // dst: output in shape of {M, N}, float32
2339
+ //
2340
+ // the function performs: dst = src1 @ src0.T for each batch
2341
+ //
2342
+ void ggml_backend_amx_mul_mat(const ggml_compute_params * params, struct ggml_tensor * dst) {
2343
+ struct ggml_tensor * src0 = dst->src[0];
2344
+ struct ggml_tensor * src1 = dst->src[1];
2345
+
2346
+ const enum ggml_type TYPE = src0->type;
2347
+
2348
+ // f16 only has avx512 kernels for now,
2349
+ // amx kernels will be added once 6th gen xeon is released.
2350
+ const bool is_floating_type = TYPE == GGML_TYPE_F16;
2351
+
2352
+ const int M = dst->ne[1];
2353
+ const int N = dst->ne[0];
2354
+ const int K = src0->ne[0];
2355
+ const int ldc = dst->nb[1] / dst->nb[0];
2356
+
2357
+ const int64_t ne2 = dst->ne[2];
2358
+ const int64_t n_batch = ne2 * dst->ne[3];
2359
+
2360
+ if (is_floating_type) {
2361
+ constexpr int BLOCK_M = 4;
2362
+ constexpr int BLOCK_N = 6;
2363
+ const int MB = div_up(M, BLOCK_M);
2364
+ const int NB = div_up(N, BLOCK_N);
2365
+
2366
+ parallel_for_ggml(params, n_batch * MB * NB, [&](int begin, int end) {
2367
+ GGML_DISPATCH_FLOATING_TYPES(TYPE, [&] {
2368
+ for (int i = begin; i < end; ++i) {
2369
+ int batch_idx = i / (MB * NB);
2370
+ int remaining = i % (MB * NB);
2371
+ int mb = remaining / NB;
2372
+ int nb = remaining % NB;
2373
+
2374
+ int64_t src0_offset = ggml_batch_offset(src0, batch_idx, ne2);
2375
+ int64_t src1_offset = ggml_batch_offset(src1, batch_idx, ne2);
2376
+ int64_t dst_offset = ggml_batch_offset(dst, batch_idx, ne2);
2377
+
2378
+ int mb_start = mb * BLOCK_M;
2379
+ int mb_size = std::min(BLOCK_M, M - mb_start);
2380
+ int nb_start = nb * BLOCK_N;
2381
+ int nb_size = std::min(BLOCK_N, N - nb_start);
2382
+
2383
+ switch (mb_size << 4 | nb_size) {
2384
+ case 0x12: LAUNCH_TINYGEMM_KERNEL_AVX(1, 2); break;
2385
+ case 0x14: LAUNCH_TINYGEMM_KERNEL_AVX(1, 4); break;
2386
+ case 0x16: LAUNCH_TINYGEMM_KERNEL_AVX(1, 6); break;
2387
+ case 0x22: LAUNCH_TINYGEMM_KERNEL_AVX(2, 2); break;
2388
+ case 0x24: LAUNCH_TINYGEMM_KERNEL_AVX(2, 4); break;
2389
+ case 0x26: LAUNCH_TINYGEMM_KERNEL_AVX(2, 6); break;
2390
+ case 0x32: LAUNCH_TINYGEMM_KERNEL_AVX(3, 2); break;
2391
+ case 0x34: LAUNCH_TINYGEMM_KERNEL_AVX(3, 4); break;
2392
+ case 0x36: LAUNCH_TINYGEMM_KERNEL_AVX(3, 6); break;
2393
+ case 0x42: LAUNCH_TINYGEMM_KERNEL_AVX(4, 2); break;
2394
+ case 0x44: LAUNCH_TINYGEMM_KERNEL_AVX(4, 4); break;
2395
+ case 0x46: LAUNCH_TINYGEMM_KERNEL_AVX(4, 6); break;
2396
+ default: fprintf(stderr, "Unexpected block size!\n");
2397
+ }
2398
+ }
2399
+ });
2400
+ });
2401
+ return;
2402
+ }
2403
+
2404
+ // pointer to work space, used convert A from float to quantized type
2405
+ void * wdata = params->wdata;
2406
+
2407
+ //TODO: performance improvement: merge quant A
2408
+ // if (params->ith == 0) {
2409
+ GGML_DISPATCH_QTYPES(TYPE, [&] {
2410
+ const size_t row_size_A = K / blck_size * sizeof(vec_dot_type);
2411
+ const size_t desired_wsize = n_batch * M * row_size_A;
2412
+ if (params->wsize < desired_wsize) {
2413
+ GGML_ABORT("insufficient work space size");
2414
+ }
2415
+
2416
+ // Q4_0, Q4_1, Q8_0 handles 1 TILE_K per blck_size
2417
+ // Q4_K, Q5_K, Q6_K, IQ4_XS handles 8 TILE_K per blck_size
2418
+ GGML_ASSERT(TILE_K == blck_size || TILE_K * 8 == blck_size);
2419
+
2420
+ parallel_for_ggml(params, n_batch, [&](int begin, int end) {
2421
+ for (int batch_idx = begin; batch_idx < end; ++batch_idx) {
2422
+ int64_t src1_offset = ggml_batch_offset(src1, batch_idx, ne2);
2423
+ const float * A_data = (const float *)((const char *)src1->data + src1_offset);
2424
+ char * wdata_batch = (char *)wdata + batch_idx * M * row_size_A;
2425
+
2426
+ for (int m = 0; m < M; ++m) {
2427
+ from_float<vec_dot_type>(A_data + m * K, wdata_batch + m * row_size_A, K);
2428
+ }
2429
+ }
2430
+ });
2431
+ });
2432
+ // }
2433
+
2434
+ ggml_barrier(params->threadpool);
2435
+
2436
+ if (M == 1) {
2437
+ // MB = 1 and handle 8 tiles in each block
2438
+ constexpr int kTilesN = 4;
2439
+ constexpr int BLOCK_N = TILE_N * kTilesN;
2440
+ const int NB = div_up(N, BLOCK_N);
2441
+
2442
+ parallel_for_ggml(params, n_batch * NB, [&](int begin, int end) {
2443
+ GGML_DISPATCH_QTYPES(TYPE, [&] {
2444
+ const int KB = K / blck_size;
2445
+ const int TILE_SIZE = get_tile_size<type>();
2446
+ const int row_size_A = KB * sizeof(vec_dot_type);
2447
+ for (int i = begin; i < end; ++i) {
2448
+ int batch_idx = i / NB;
2449
+ int nb = i % NB;
2450
+
2451
+ int64_t src0_offset = ggml_batch_offset(src0, batch_idx, ne2);
2452
+ int64_t dst_offset = ggml_batch_offset(dst, batch_idx, ne2);
2453
+ const char * wdata_batch = (const char *)wdata + batch_idx * row_size_A;
2454
+
2455
+ int nb_start = nb * BLOCK_N;
2456
+ int nb_size = std::min(BLOCK_N, N - nb_start); // 32, 64, 96
2457
+
2458
+ switch (nb_size) {
2459
+ //case 160: LAUNCH_TINYGEMM_KERNEL_VNNI(160); break;
2460
+ case 128: LAUNCH_TINYGEMM_KERNEL_VNNI(128); break;
2461
+ case 96: LAUNCH_TINYGEMM_KERNEL_VNNI(96); break;
2462
+ case 64: LAUNCH_TINYGEMM_KERNEL_VNNI(64); break;
2463
+ case 32: LAUNCH_TINYGEMM_KERNEL_VNNI(32); break;
2464
+ default: fprintf(stderr, "Unexpected n block size!\n");
2465
+ }
2466
+ }
2467
+ });
2468
+ });
2469
+ return;
2470
+ }
2471
+
2472
+ // handle 4 tiles at a tile
2473
+ constexpr int BLOCK_M = TILE_M * 2;
2474
+ constexpr int BLOCK_N = TILE_N * 2;
2475
+ const int MB = div_up(M, BLOCK_M);
2476
+ const int NB = div_up(N, BLOCK_N);
2477
+
2478
+ parallel_for_ggml(params, n_batch * MB * NB, [&](int begin, int end) {
2479
+ // init tile config for each thread
2480
+ ggml_tile_config_init();
2481
+
2482
+ GGML_DISPATCH_QTYPES(TYPE, [&] {
2483
+ const int KB = K / blck_size;
2484
+ const int TILE_SIZE = get_tile_size<type>();
2485
+ const int row_size_A = KB * sizeof(vec_dot_type);
2486
+
2487
+ for (int i = begin; i < end; ++i) {
2488
+ int batch_idx = i / (MB * NB);
2489
+ int remaining = i % (MB * NB);
2490
+ int mb = remaining / NB;
2491
+ int nb = remaining % NB;
2492
+
2493
+ int64_t src0_offset = ggml_batch_offset(src0, batch_idx, ne2);
2494
+ int64_t dst_offset = ggml_batch_offset(dst, batch_idx, ne2);
2495
+ const char * wdata_batch = (const char *)wdata + batch_idx * M * row_size_A;
2496
+
2497
+ int mb_start = mb * BLOCK_M;
2498
+ int mb_size = std::min(BLOCK_M, M - mb_start);
2499
+ int nb_start = nb * BLOCK_N;
2500
+ int nb_size = BLOCK_N;
2501
+
2502
+ tinygemm_kernel_amx<vec_dot_type, type, float, blck_size>(
2503
+ mb_size, nb_size, KB,
2504
+ wdata_batch + mb_start * row_size_A,
2505
+ (const char *)src0->data + src0_offset + PACKED_INDEX(nb * 2, 0, KB, TILE_SIZE),
2506
+ (float *) dst->data + dst_offset + mb_start * N + nb_start, ldc);
2507
+ }
2508
+ });
2509
+ });
2510
+ }
2511
+
2512
+ #endif // if defined(__AMX_INT8__) && defined(__AVX512VNNI__)