llama-cpp-pro 0.2.2

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 (310) hide show
  1. package/CHANGELOG.md +295 -0
  2. package/LICENSE +21 -0
  3. package/LlamaCpp.podspec +33 -0
  4. package/LlamaCppCapacitor.podspec +33 -0
  5. package/Package.swift +29 -0
  6. package/README.md +93 -0
  7. package/android/build.gradle +88 -0
  8. package/android/src/main/AndroidManifest.xml +4 -0
  9. package/android/src/main/CMakeLists-arm64.txt +138 -0
  10. package/android/src/main/CMakeLists-x86_64.txt +141 -0
  11. package/android/src/main/CMakeLists.txt +138 -0
  12. package/android/src/main/java/ai/annadata/plugin/capacitor/LlamaCpp.java +1340 -0
  13. package/android/src/main/java/ai/annadata/plugin/capacitor/LlamaCppPlugin.java +814 -0
  14. package/android/src/main/java/ai/annadata/plugin/capacitor/ModelAdmissionController.java +214 -0
  15. package/android/src/main/jni-chat-session.cpp +261 -0
  16. package/android/src/main/jni-lora.cpp +197 -0
  17. package/android/src/main/jni-multimodal.cpp +167 -0
  18. package/android/src/main/jni-tts.cpp +290 -0
  19. package/android/src/main/jni-utils.h +148 -0
  20. package/android/src/main/jni.cpp +1808 -0
  21. package/android/src/main/jniLibs/arm64-v8a/libllama-cpp-arm64.so +0 -0
  22. package/android/src/main/res/.gitkeep +0 -0
  23. package/build-native.sh +280 -0
  24. package/cmake/desktop-metal-embed.cmake +30 -0
  25. package/cmake/desktop-sources.cmake +100 -0
  26. package/cmake/ggml-backends.cmake +44 -0
  27. package/cpp/LICENSE +21 -0
  28. package/cpp/README.md +15 -0
  29. package/cpp/anyascii.c +22223 -0
  30. package/cpp/anyascii.h +42 -0
  31. package/cpp/cap-completion.cpp +942 -0
  32. package/cpp/cap-completion.h +127 -0
  33. package/cpp/cap-embedding.cpp +193 -0
  34. package/cpp/cap-embedding.h +35 -0
  35. package/cpp/cap-ios-bridge.cpp +1810 -0
  36. package/cpp/cap-ios-bridge.h +61 -0
  37. package/cpp/cap-llama.cpp +412 -0
  38. package/cpp/cap-llama.h +161 -0
  39. package/cpp/cap-mtmd.hpp +602 -0
  40. package/cpp/cap-native-server.cpp +1095 -0
  41. package/cpp/cap-native-server.h +40 -0
  42. package/cpp/cap-tts.cpp +591 -0
  43. package/cpp/cap-tts.h +59 -0
  44. package/cpp/cap-wasm-fs.cpp +156 -0
  45. package/cpp/cap-wasm-jspi.cpp +19 -0
  46. package/cpp/cap-wasm-jspi.h +30 -0
  47. package/cpp/cap-wasm-vfs.cpp +22 -0
  48. package/cpp/chat-parser.cpp +393 -0
  49. package/cpp/chat-parser.h +120 -0
  50. package/cpp/chat.cpp +2315 -0
  51. package/cpp/chat.h +221 -0
  52. package/cpp/common.cpp +1664 -0
  53. package/cpp/common.h +744 -0
  54. package/cpp/ggml-alloc.c +1028 -0
  55. package/cpp/ggml-alloc.h +76 -0
  56. package/cpp/ggml-backend-impl.h +255 -0
  57. package/cpp/ggml-backend-reg.cpp +600 -0
  58. package/cpp/ggml-backend.cpp +2121 -0
  59. package/cpp/ggml-backend.h +354 -0
  60. package/cpp/ggml-common.h +1878 -0
  61. package/cpp/ggml-cpp.h +39 -0
  62. package/cpp/ggml-cpu/amx/amx.cpp +221 -0
  63. package/cpp/ggml-cpu/amx/amx.h +8 -0
  64. package/cpp/ggml-cpu/amx/common.h +91 -0
  65. package/cpp/ggml-cpu/amx/mmq.cpp +2512 -0
  66. package/cpp/ggml-cpu/amx/mmq.h +10 -0
  67. package/cpp/ggml-cpu/arch/arm/cpu-feats.cpp +94 -0
  68. package/cpp/ggml-cpu/arch/arm/quants.c +3650 -0
  69. package/cpp/ggml-cpu/arch/arm/repack.cpp +1891 -0
  70. package/cpp/ggml-cpu/arch/x86/cpu-feats.cpp +327 -0
  71. package/cpp/ggml-cpu/arch/x86/quants.c +3820 -0
  72. package/cpp/ggml-cpu/arch/x86/repack.cpp +6307 -0
  73. package/cpp/ggml-cpu/arch-fallback.h +215 -0
  74. package/cpp/ggml-cpu/binary-ops.cpp +158 -0
  75. package/cpp/ggml-cpu/binary-ops.h +16 -0
  76. package/cpp/ggml-cpu/common.h +73 -0
  77. package/cpp/ggml-cpu/ggml-cpu-impl.h +559 -0
  78. package/cpp/ggml-cpu/ggml-cpu.c +3578 -0
  79. package/cpp/ggml-cpu/ggml-cpu.cpp +672 -0
  80. package/cpp/ggml-cpu/ops.cpp +10587 -0
  81. package/cpp/ggml-cpu/ops.h +114 -0
  82. package/cpp/ggml-cpu/quants.c +1193 -0
  83. package/cpp/ggml-cpu/quants.h +97 -0
  84. package/cpp/ggml-cpu/repack.cpp +1982 -0
  85. package/cpp/ggml-cpu/repack.h +120 -0
  86. package/cpp/ggml-cpu/simd-mappings.h +1184 -0
  87. package/cpp/ggml-cpu/traits.cpp +36 -0
  88. package/cpp/ggml-cpu/traits.h +38 -0
  89. package/cpp/ggml-cpu/unary-ops.cpp +186 -0
  90. package/cpp/ggml-cpu/unary-ops.h +28 -0
  91. package/cpp/ggml-cpu/vec.cpp +348 -0
  92. package/cpp/ggml-cpu/vec.h +1121 -0
  93. package/cpp/ggml-cpu.h +145 -0
  94. package/cpp/ggml-impl.h +622 -0
  95. package/cpp/ggml-metal-impl.h +688 -0
  96. package/cpp/ggml-metal.h +66 -0
  97. package/cpp/ggml-metal.m +6833 -0
  98. package/cpp/ggml-metal.metal +10754 -0
  99. package/cpp/ggml-opt.cpp +1093 -0
  100. package/cpp/ggml-opt.h +256 -0
  101. package/cpp/ggml-quants.c +5324 -0
  102. package/cpp/ggml-quants.h +106 -0
  103. package/cpp/ggml-threading.cpp +12 -0
  104. package/cpp/ggml-threading.h +14 -0
  105. package/cpp/ggml.c +7108 -0
  106. package/cpp/ggml.h +2492 -0
  107. package/cpp/gguf.cpp +1358 -0
  108. package/cpp/gguf.h +202 -0
  109. package/cpp/json-partial.cpp +256 -0
  110. package/cpp/json-partial.h +38 -0
  111. package/cpp/json-schema-to-grammar.cpp +985 -0
  112. package/cpp/json-schema-to-grammar.h +21 -0
  113. package/cpp/llama-adapter.cpp +388 -0
  114. package/cpp/llama-adapter.h +76 -0
  115. package/cpp/llama-arch.cpp +2355 -0
  116. package/cpp/llama-arch.h +499 -0
  117. package/cpp/llama-batch.cpp +875 -0
  118. package/cpp/llama-batch.h +160 -0
  119. package/cpp/llama-chat.cpp +783 -0
  120. package/cpp/llama-chat.h +65 -0
  121. package/cpp/llama-context.cpp +2788 -0
  122. package/cpp/llama-context.h +306 -0
  123. package/cpp/llama-cparams.cpp +5 -0
  124. package/cpp/llama-cparams.h +41 -0
  125. package/cpp/llama-cpp.h +30 -0
  126. package/cpp/llama-grammar.cpp +1229 -0
  127. package/cpp/llama-grammar.h +173 -0
  128. package/cpp/llama-graph.cpp +1891 -0
  129. package/cpp/llama-graph.h +810 -0
  130. package/cpp/llama-hparams.cpp +180 -0
  131. package/cpp/llama-hparams.h +233 -0
  132. package/cpp/llama-impl.cpp +167 -0
  133. package/cpp/llama-impl.h +61 -0
  134. package/cpp/llama-io.cpp +15 -0
  135. package/cpp/llama-io.h +35 -0
  136. package/cpp/llama-kv-cache-iswa.cpp +318 -0
  137. package/cpp/llama-kv-cache-iswa.h +135 -0
  138. package/cpp/llama-kv-cache.cpp +2059 -0
  139. package/cpp/llama-kv-cache.h +374 -0
  140. package/cpp/llama-kv-cells.h +491 -0
  141. package/cpp/llama-memory-hybrid.cpp +258 -0
  142. package/cpp/llama-memory-hybrid.h +137 -0
  143. package/cpp/llama-memory-recurrent.cpp +1146 -0
  144. package/cpp/llama-memory-recurrent.h +179 -0
  145. package/cpp/llama-memory.cpp +59 -0
  146. package/cpp/llama-memory.h +119 -0
  147. package/cpp/llama-mmap.cpp +609 -0
  148. package/cpp/llama-mmap.h +68 -0
  149. package/cpp/llama-model-loader.cpp +1166 -0
  150. package/cpp/llama-model-loader.h +170 -0
  151. package/cpp/llama-model-saver.cpp +282 -0
  152. package/cpp/llama-model-saver.h +37 -0
  153. package/cpp/llama-model.cpp +19061 -0
  154. package/cpp/llama-model.h +491 -0
  155. package/cpp/llama-sampling.cpp +2575 -0
  156. package/cpp/llama-sampling.h +32 -0
  157. package/cpp/llama-vocab.cpp +3792 -0
  158. package/cpp/llama-vocab.h +176 -0
  159. package/cpp/llama.cpp +358 -0
  160. package/cpp/llama.h +1373 -0
  161. package/cpp/log.cpp +428 -0
  162. package/cpp/log.h +103 -0
  163. package/cpp/minja/chat-template.hpp +550 -0
  164. package/cpp/minja/minja.hpp +3009 -0
  165. package/cpp/nlohmann/json.hpp +25526 -0
  166. package/cpp/nlohmann/json_fwd.hpp +187 -0
  167. package/cpp/regex-partial.cpp +204 -0
  168. package/cpp/regex-partial.h +56 -0
  169. package/cpp/sampling.cpp +579 -0
  170. package/cpp/sampling.h +107 -0
  171. package/cpp/tools/mtmd/clip-impl.h +473 -0
  172. package/cpp/tools/mtmd/clip.cpp +4322 -0
  173. package/cpp/tools/mtmd/clip.h +106 -0
  174. package/cpp/tools/mtmd/miniaudio/miniaudio.h +93468 -0
  175. package/cpp/tools/mtmd/mtmd-audio.cpp +769 -0
  176. package/cpp/tools/mtmd/mtmd-audio.h +47 -0
  177. package/cpp/tools/mtmd/mtmd-helper.cpp +460 -0
  178. package/cpp/tools/mtmd/mtmd-helper.h +95 -0
  179. package/cpp/tools/mtmd/mtmd.cpp +1066 -0
  180. package/cpp/tools/mtmd/mtmd.h +302 -0
  181. package/cpp/tools/mtmd/stb/stb_image.h +7988 -0
  182. package/cpp/unicode-data.cpp +7034 -0
  183. package/cpp/unicode-data.h +20 -0
  184. package/cpp/unicode.cpp +1061 -0
  185. package/cpp/unicode.h +68 -0
  186. package/cpp/vendor/cpp-httplib/httplib.cpp +16509 -0
  187. package/cpp/vendor/cpp-httplib/httplib.h +3883 -0
  188. package/desktop/electron-builder.config.cjs +157 -0
  189. package/desktop/entitlements.mac.plist +12 -0
  190. package/desktop/package.json +11 -0
  191. package/desktop/resolve-package-root.cjs +88 -0
  192. package/desktop/src/main/backend-selector.cjs +148 -0
  193. package/desktop/src/main/gpu-probe.cjs +142 -0
  194. package/desktop/src/main/index.cjs +58 -0
  195. package/desktop/src/main/ipc-handlers.cjs +212 -0
  196. package/desktop/src/main/model-store.cjs +50 -0
  197. package/desktop/src/main/preload.cjs +39 -0
  198. package/desktop/src/main/sidecar-client.cjs +76 -0
  199. package/desktop/src/main/sidecar-manager.cjs +364 -0
  200. package/dist/docs.json +14357 -0
  201. package/dist/esm/definitions.d.ts +731 -0
  202. package/dist/esm/definitions.js +2 -0
  203. package/dist/esm/definitions.js.map +1 -0
  204. package/dist/esm/desktop.d.ts +37 -0
  205. package/dist/esm/desktop.js +133 -0
  206. package/dist/esm/desktop.js.map +1 -0
  207. package/dist/esm/index.d.ts +200 -0
  208. package/dist/esm/index.js +612 -0
  209. package/dist/esm/index.js.map +1 -0
  210. package/dist/esm/isomorphic/desktop.runtime.d.ts +37 -0
  211. package/dist/esm/isomorphic/desktop.runtime.js +36 -0
  212. package/dist/esm/isomorphic/desktop.runtime.js.map +1 -0
  213. package/dist/esm/isomorphic/errors.d.ts +6 -0
  214. package/dist/esm/isomorphic/errors.js +9 -0
  215. package/dist/esm/isomorphic/errors.js.map +1 -0
  216. package/dist/esm/isomorphic/model.admission.d.ts +17 -0
  217. package/dist/esm/isomorphic/model.admission.js +27 -0
  218. package/dist/esm/isomorphic/model.admission.js.map +1 -0
  219. package/dist/esm/isomorphic/model.scheduler.d.ts +31 -0
  220. package/dist/esm/isomorphic/model.scheduler.js +95 -0
  221. package/dist/esm/isomorphic/model.scheduler.js.map +1 -0
  222. package/dist/esm/isomorphic/provider.desktop.d.ts +40 -0
  223. package/dist/esm/isomorphic/provider.desktop.js +411 -0
  224. package/dist/esm/isomorphic/provider.desktop.js.map +1 -0
  225. package/dist/esm/isomorphic/provider.factory.d.ts +2 -0
  226. package/dist/esm/isomorphic/provider.factory.js +16 -0
  227. package/dist/esm/isomorphic/provider.factory.js.map +1 -0
  228. package/dist/esm/isomorphic/provider.interface.d.ts +76 -0
  229. package/dist/esm/isomorphic/provider.interface.js +2 -0
  230. package/dist/esm/isomorphic/provider.interface.js.map +1 -0
  231. package/dist/esm/isomorphic/provider.native.d.ts +18 -0
  232. package/dist/esm/isomorphic/provider.native.js +173 -0
  233. package/dist/esm/isomorphic/provider.native.js.map +1 -0
  234. package/dist/esm/isomorphic/provider.web.d.ts +88 -0
  235. package/dist/esm/isomorphic/provider.web.js +573 -0
  236. package/dist/esm/isomorphic/provider.web.js.map +1 -0
  237. package/dist/esm/isomorphic/sidecar-sse.d.ts +14 -0
  238. package/dist/esm/isomorphic/sidecar-sse.js +76 -0
  239. package/dist/esm/isomorphic/sidecar-sse.js.map +1 -0
  240. package/dist/esm/isomorphic/wasmMemoryCalibration.d.ts +26 -0
  241. package/dist/esm/isomorphic/wasmMemoryCalibration.js +60 -0
  242. package/dist/esm/isomorphic/wasmMemoryCalibration.js.map +1 -0
  243. package/dist/esm/isomorphic/wasmMemoryPolicy.d.ts +55 -0
  244. package/dist/esm/isomorphic/wasmMemoryPolicy.js +93 -0
  245. package/dist/esm/isomorphic/wasmMemoryPolicy.js.map +1 -0
  246. package/dist/esm/storage/manifest.d.ts +13 -0
  247. package/dist/esm/storage/manifest.js +87 -0
  248. package/dist/esm/storage/manifest.js.map +1 -0
  249. package/dist/esm/storage/opfs.store.d.ts +31 -0
  250. package/dist/esm/storage/opfs.store.js +241 -0
  251. package/dist/esm/storage/opfs.store.js.map +1 -0
  252. package/dist/esm/web.d.ts +206 -0
  253. package/dist/esm/web.js +521 -0
  254. package/dist/esm/web.js.map +1 -0
  255. package/dist/esm/workers/async-file.d.ts +13 -0
  256. package/dist/esm/workers/async-file.js +12 -0
  257. package/dist/esm/workers/async-file.js.map +1 -0
  258. package/dist/esm/workers/heapfs.d.ts +55 -0
  259. package/dist/esm/workers/heapfs.js +115 -0
  260. package/dist/esm/workers/heapfs.js.map +1 -0
  261. package/dist/esm/workers/wasm.engine.d.ts +86 -0
  262. package/dist/esm/workers/wasm.engine.js +504 -0
  263. package/dist/esm/workers/wasm.engine.js.map +1 -0
  264. package/dist/esm/workers/worker.protocol.d.ts +160 -0
  265. package/dist/esm/workers/worker.protocol.js +2 -0
  266. package/dist/esm/workers/worker.protocol.js.map +1 -0
  267. package/dist/plugin.cjs +3179 -0
  268. package/dist/plugin.cjs.map +1 -0
  269. package/dist/plugin.js +3181 -0
  270. package/dist/plugin.js.map +1 -0
  271. package/dist/wasm/llama_engine.d.ts +74 -0
  272. package/dist/wasm/llama_engine.js +1829 -0
  273. package/dist/wasm/llama_engine.wasm +0 -0
  274. package/dist/wasm/llama_engine_emscripten.mjs +2 -0
  275. package/dist/wasm/package.json +16 -0
  276. package/dist/workers/llm.worker.js +1226 -0
  277. package/dist/workers/llm.worker.js.map +7 -0
  278. package/extraResources/llama-wasm/llama_engine.d.ts +74 -0
  279. package/extraResources/llama-wasm/llama_engine.js +1829 -0
  280. package/extraResources/llama-wasm/llama_engine.wasm +0 -0
  281. package/extraResources/llama-wasm/llama_engine_emscripten.mjs +2 -0
  282. package/extraResources/llama-wasm/package.json +16 -0
  283. package/extraResources/sidecar/README.md +11 -0
  284. package/extraResources/sidecar/darwin-arm64 +0 -0
  285. package/extraResources/sidecar/darwin-x64 +0 -0
  286. package/ios/CMakeLists-arm64.txt +161 -0
  287. package/ios/CMakeLists-x86_64.txt +188 -0
  288. package/ios/CMakeLists.txt +161 -0
  289. package/ios/Frameworks/llama-cpp.framework/Info.plist +28 -0
  290. package/ios/Frameworks/llama-cpp.framework/llama-cpp +0 -0
  291. package/ios/Sources/LlamaCppCapacitor/LlamaCpp.swift +1365 -0
  292. package/ios/Sources/LlamaCppCapacitor/LlamaCppPlugin.swift +694 -0
  293. package/ios/Sources/LlamaCppCapacitor/LlamaNativeBridge.swift +349 -0
  294. package/ios/Sources/LlamaCppCapacitor/ModelAdmissionController.swift +177 -0
  295. package/ios/embed-metal-shaders.sh +24 -0
  296. package/ios/metal-embed.cmake +29 -0
  297. package/package.json +281 -0
  298. package/scripts/build-js-preserve-wasm.cjs +53 -0
  299. package/scripts/build-sidecar-linux.sh +6 -0
  300. package/scripts/build-sidecar-win.bat +19 -0
  301. package/scripts/build-sidecar.sh +184 -0
  302. package/scripts/embed-llama-ios-app-framework.sh +63 -0
  303. package/scripts/ensure-desktop-sidecar-bundle.cjs +103 -0
  304. package/scripts/ensure-llama-ios-xcframework.sh +108 -0
  305. package/scripts/fix-esm-extensions.cjs +45 -0
  306. package/scripts/prepare-js-dist.cjs +28 -0
  307. package/scripts/stage-desktop-resources.cjs +116 -0
  308. package/sidecar/CMakeLists.txt +192 -0
  309. package/sidecar/cap-sidecar-main.cpp +68 -0
  310. package/types/llama-cpp-pro.d.ts +441 -0
@@ -0,0 +1,215 @@
1
+ #pragma once
2
+
3
+ // Rename `_generic` functions if no native implementation is available.
4
+ // This effectively selects the generic implementation.
5
+
6
+ #if defined(LM_GGML_CPU_GENERIC)
7
+ // quants.c
8
+ #define quantize_row_q8_0_generic quantize_row_q8_0
9
+ #define quantize_row_q8_1_generic quantize_row_q8_1
10
+ #define quantize_row_q8_K_generic quantize_row_q8_K
11
+ #define lm_ggml_vec_dot_q4_0_q8_0_generic lm_ggml_vec_dot_q4_0_q8_0
12
+ #define lm_ggml_vec_dot_q4_1_q8_1_generic lm_ggml_vec_dot_q4_1_q8_1
13
+ #define lm_ggml_vec_dot_q5_0_q8_0_generic lm_ggml_vec_dot_q5_0_q8_0
14
+ #define lm_ggml_vec_dot_q5_1_q8_1_generic lm_ggml_vec_dot_q5_1_q8_1
15
+ #define lm_ggml_vec_dot_q8_0_q8_0_generic lm_ggml_vec_dot_q8_0_q8_0
16
+ #define lm_ggml_vec_dot_mxfp4_q8_0_generic lm_ggml_vec_dot_mxfp4_q8_0
17
+ #define lm_ggml_vec_dot_tq1_0_q8_K_generic lm_ggml_vec_dot_tq1_0_q8_K
18
+ #define lm_ggml_vec_dot_tq2_0_q8_K_generic lm_ggml_vec_dot_tq2_0_q8_K
19
+ #define lm_ggml_vec_dot_q2_K_q8_K_generic lm_ggml_vec_dot_q2_K_q8_K
20
+ #define lm_ggml_vec_dot_q3_K_q8_K_generic lm_ggml_vec_dot_q3_K_q8_K
21
+ #define lm_ggml_vec_dot_q4_K_q8_K_generic lm_ggml_vec_dot_q4_K_q8_K
22
+ #define lm_ggml_vec_dot_q5_K_q8_K_generic lm_ggml_vec_dot_q5_K_q8_K
23
+ #define lm_ggml_vec_dot_q6_K_q8_K_generic lm_ggml_vec_dot_q6_K_q8_K
24
+ #define lm_ggml_vec_dot_iq2_xxs_q8_K_generic lm_ggml_vec_dot_iq2_xxs_q8_K
25
+ #define lm_ggml_vec_dot_iq2_xs_q8_K_generic lm_ggml_vec_dot_iq2_xs_q8_K
26
+ #define lm_ggml_vec_dot_iq2_s_q8_K_generic lm_ggml_vec_dot_iq2_s_q8_K
27
+ #define lm_ggml_vec_dot_iq3_xxs_q8_K_generic lm_ggml_vec_dot_iq3_xxs_q8_K
28
+ #define lm_ggml_vec_dot_iq3_s_q8_K_generic lm_ggml_vec_dot_iq3_s_q8_K
29
+ #define lm_ggml_vec_dot_iq1_s_q8_K_generic lm_ggml_vec_dot_iq1_s_q8_K
30
+ #define lm_ggml_vec_dot_iq1_m_q8_K_generic lm_ggml_vec_dot_iq1_m_q8_K
31
+ #define lm_ggml_vec_dot_iq4_nl_q8_0_generic lm_ggml_vec_dot_iq4_nl_q8_0
32
+ #define lm_ggml_vec_dot_iq4_xs_q8_K_generic lm_ggml_vec_dot_iq4_xs_q8_K
33
+ // repack.cpp
34
+ #define lm_ggml_quantize_mat_q8_0_4x4_generic lm_ggml_quantize_mat_q8_0_4x4
35
+ #define lm_ggml_quantize_mat_q8_0_4x8_generic lm_ggml_quantize_mat_q8_0_4x8
36
+ #define lm_ggml_quantize_mat_q8_K_4x8_generic lm_ggml_quantize_mat_q8_K_4x8
37
+ #define lm_ggml_gemv_q4_0_4x4_q8_0_generic lm_ggml_gemv_q4_0_4x4_q8_0
38
+ #define lm_ggml_gemv_q4_0_4x8_q8_0_generic lm_ggml_gemv_q4_0_4x8_q8_0
39
+ #define lm_ggml_gemv_q4_0_8x8_q8_0_generic lm_ggml_gemv_q4_0_8x8_q8_0
40
+ #define lm_ggml_gemv_q4_K_8x8_q8_K_generic lm_ggml_gemv_q4_K_8x8_q8_K
41
+ #define lm_ggml_gemv_q2_K_8x8_q8_K_generic lm_ggml_gemv_q2_K_8x8_q8_K
42
+ #define lm_ggml_gemv_iq4_nl_4x4_q8_0_generic lm_ggml_gemv_iq4_nl_4x4_q8_0
43
+ #define lm_ggml_gemv_iq4_nl_8x8_q8_0_generic lm_ggml_gemv_iq4_nl_8x8_q8_0
44
+ #define lm_ggml_gemm_q4_0_4x4_q8_0_generic lm_ggml_gemm_q4_0_4x4_q8_0
45
+ #define lm_ggml_gemm_q4_0_4x8_q8_0_generic lm_ggml_gemm_q4_0_4x8_q8_0
46
+ #define lm_ggml_gemm_q4_0_8x8_q8_0_generic lm_ggml_gemm_q4_0_8x8_q8_0
47
+ #define lm_ggml_gemm_q4_K_8x8_q8_K_generic lm_ggml_gemm_q4_K_8x8_q8_K
48
+ #define lm_ggml_gemm_q2_K_8x8_q8_K_generic lm_ggml_gemm_q2_K_8x8_q8_K
49
+ #define lm_ggml_gemm_iq4_nl_4x4_q8_0_generic lm_ggml_gemm_iq4_nl_4x4_q8_0
50
+ #define lm_ggml_gemm_iq4_nl_8x8_q8_0_generic lm_ggml_gemm_iq4_nl_8x8_q8_0
51
+ #elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM) || defined(_M_ARM64)
52
+ // repack.cpp
53
+ #define lm_ggml_quantize_mat_q8_K_4x8_generic lm_ggml_quantize_mat_q8_K_4x8
54
+ #define lm_ggml_gemv_q4_K_8x8_q8_K_generic lm_ggml_gemv_q4_K_8x8_q8_K
55
+ #define lm_ggml_gemv_iq4_nl_8x8_q8_0_generic lm_ggml_gemv_iq4_nl_8x8_q8_0
56
+ #define lm_ggml_gemv_q2_K_8x8_q8_K_generic lm_ggml_gemv_q2_K_8x8_q8_K
57
+ #define lm_ggml_gemm_q4_K_8x8_q8_K_generic lm_ggml_gemm_q4_K_8x8_q8_K
58
+ #define lm_ggml_gemm_iq4_nl_8x8_q8_0_generic lm_ggml_gemm_iq4_nl_8x8_q8_0
59
+ #define lm_ggml_gemm_q2_K_8x8_q8_K_generic lm_ggml_gemm_q2_K_8x8_q8_K
60
+ #elif defined(__x86_64__) || defined(__i386__) || defined(_M_IX86) || defined(_M_X64)
61
+ // repack.cpp
62
+ #define lm_ggml_quantize_mat_q8_0_4x4_generic lm_ggml_quantize_mat_q8_0_4x4
63
+ #define lm_ggml_gemv_q4_0_4x4_q8_0_generic lm_ggml_gemv_q4_0_4x4_q8_0
64
+ #define lm_ggml_gemv_q4_0_4x8_q8_0_generic lm_ggml_gemv_q4_0_4x8_q8_0
65
+ #define lm_ggml_gemv_iq4_nl_4x4_q8_0_generic lm_ggml_gemv_iq4_nl_4x4_q8_0
66
+ #define lm_ggml_gemm_q4_0_4x4_q8_0_generic lm_ggml_gemm_q4_0_4x4_q8_0
67
+ #define lm_ggml_gemm_q4_0_4x8_q8_0_generic lm_ggml_gemm_q4_0_4x8_q8_0
68
+ #define lm_ggml_gemm_iq4_nl_4x4_q8_0_generic lm_ggml_gemm_iq4_nl_4x4_q8_0
69
+ #elif defined(__POWERPC__) || defined(__powerpc__)
70
+ // ref: https://github.com/ggml-org/llama.cpp/pull/14146#issuecomment-2972561679
71
+ // quants.c
72
+ #define quantize_row_q8_K_generic quantize_row_q8_K
73
+ #define lm_ggml_vec_dot_tq1_0_q8_K_generic lm_ggml_vec_dot_tq1_0_q8_K
74
+ #define lm_ggml_vec_dot_tq2_0_q8_K_generic lm_ggml_vec_dot_tq2_0_q8_K
75
+ #define lm_ggml_vec_dot_iq1_m_q8_K_generic lm_ggml_vec_dot_iq1_m_q8_K
76
+ // repack.cpp
77
+ #define lm_ggml_quantize_mat_q8_0_4x4_generic lm_ggml_quantize_mat_q8_0_4x4
78
+ #define lm_ggml_quantize_mat_q8_0_4x8_generic lm_ggml_quantize_mat_q8_0_4x8
79
+ #define lm_ggml_quantize_mat_q8_K_4x8_generic lm_ggml_quantize_mat_q8_K_4x8
80
+ #define lm_ggml_gemv_q4_0_4x4_q8_0_generic lm_ggml_gemv_q4_0_4x4_q8_0
81
+ #define lm_ggml_gemv_q4_0_4x8_q8_0_generic lm_ggml_gemv_q4_0_4x8_q8_0
82
+ #define lm_ggml_gemv_q4_0_8x8_q8_0_generic lm_ggml_gemv_q4_0_8x8_q8_0
83
+ #define lm_ggml_gemv_q4_K_8x8_q8_K_generic lm_ggml_gemv_q4_K_8x8_q8_K
84
+ #define lm_ggml_gemv_q2_K_8x8_q8_K_generic lm_ggml_gemv_q2_K_8x8_q8_K
85
+ #define lm_ggml_gemv_iq4_nl_4x4_q8_0_generic lm_ggml_gemv_iq4_nl_4x4_q8_0
86
+ #define lm_ggml_gemv_iq4_nl_8x8_q8_0_generic lm_ggml_gemv_iq4_nl_8x8_q8_0
87
+ #define lm_ggml_gemm_q4_0_4x4_q8_0_generic lm_ggml_gemm_q4_0_4x4_q8_0
88
+ #define lm_ggml_gemm_q4_0_4x8_q8_0_generic lm_ggml_gemm_q4_0_4x8_q8_0
89
+ #define lm_ggml_gemm_q4_0_8x8_q8_0_generic lm_ggml_gemm_q4_0_8x8_q8_0
90
+ #define lm_ggml_gemm_q4_K_8x8_q8_K_generic lm_ggml_gemm_q4_K_8x8_q8_K
91
+ #define lm_ggml_gemm_q2_K_8x8_q8_K_generic lm_ggml_gemm_q2_K_8x8_q8_K
92
+ #define lm_ggml_gemm_iq4_nl_4x4_q8_0_generic lm_ggml_gemm_iq4_nl_4x4_q8_0
93
+ #define lm_ggml_gemm_iq4_nl_8x8_q8_0_generic lm_ggml_gemm_iq4_nl_8x8_q8_0
94
+ #elif defined(__loongarch64)
95
+ // quants.c
96
+ #define quantize_row_q8_K_generic quantize_row_q8_K
97
+ #define lm_ggml_vec_dot_tq1_0_q8_K_generic lm_ggml_vec_dot_tq1_0_q8_K
98
+ #define lm_ggml_vec_dot_tq2_0_q8_K_generic lm_ggml_vec_dot_tq2_0_q8_K
99
+ #define lm_ggml_vec_dot_iq1_m_q8_K_generic lm_ggml_vec_dot_iq1_m_q8_K
100
+ #define lm_ggml_vec_dot_mxfp4_q8_0_generic lm_ggml_vec_dot_mxfp4_q8_0
101
+ // repack.cpp
102
+ #define lm_ggml_quantize_mat_q8_0_4x4_generic lm_ggml_quantize_mat_q8_0_4x4
103
+ #define lm_ggml_quantize_mat_q8_0_4x8_generic lm_ggml_quantize_mat_q8_0_4x8
104
+ #define lm_ggml_quantize_mat_q8_K_4x8_generic lm_ggml_quantize_mat_q8_K_4x8
105
+ #define lm_ggml_gemv_q4_0_4x4_q8_0_generic lm_ggml_gemv_q4_0_4x4_q8_0
106
+ #define lm_ggml_gemv_q4_0_4x8_q8_0_generic lm_ggml_gemv_q4_0_4x8_q8_0
107
+ #define lm_ggml_gemv_q4_0_8x8_q8_0_generic lm_ggml_gemv_q4_0_8x8_q8_0
108
+ #define lm_ggml_gemv_q4_K_8x8_q8_K_generic lm_ggml_gemv_q4_K_8x8_q8_K
109
+ #define lm_ggml_gemv_q2_K_8x8_q8_K_generic lm_ggml_gemv_q2_K_8x8_q8_K
110
+ #define lm_ggml_gemv_iq4_nl_4x4_q8_0_generic lm_ggml_gemv_iq4_nl_4x4_q8_0
111
+ #define lm_ggml_gemv_iq4_nl_8x8_q8_0_generic lm_ggml_gemv_iq4_nl_8x8_q8_0
112
+ #define lm_ggml_gemm_q4_0_4x4_q8_0_generic lm_ggml_gemm_q4_0_4x4_q8_0
113
+ #define lm_ggml_gemm_q4_0_4x8_q8_0_generic lm_ggml_gemm_q4_0_4x8_q8_0
114
+ #define lm_ggml_gemm_q4_0_8x8_q8_0_generic lm_ggml_gemm_q4_0_8x8_q8_0
115
+ #define lm_ggml_gemm_q4_K_8x8_q8_K_generic lm_ggml_gemm_q4_K_8x8_q8_K
116
+ #define lm_ggml_gemm_q2_K_8x8_q8_K_generic lm_ggml_gemm_q2_K_8x8_q8_K
117
+ #define lm_ggml_gemm_iq4_nl_4x4_q8_0_generic lm_ggml_gemm_iq4_nl_4x4_q8_0
118
+ #define lm_ggml_gemm_iq4_nl_8x8_q8_0_generic lm_ggml_gemm_iq4_nl_8x8_q8_0
119
+ #elif defined(__riscv)
120
+ // quants.c
121
+ #define quantize_row_q8_K_generic quantize_row_q8_K
122
+ #define lm_ggml_vec_dot_tq1_0_q8_K_generic lm_ggml_vec_dot_tq1_0_q8_K
123
+ #define lm_ggml_vec_dot_tq2_0_q8_K_generic lm_ggml_vec_dot_tq2_0_q8_K
124
+ #define lm_ggml_vec_dot_iq2_xxs_q8_K_generic lm_ggml_vec_dot_iq2_xxs_q8_K
125
+ #define lm_ggml_vec_dot_iq2_xs_q8_K_generic lm_ggml_vec_dot_iq2_xs_q8_K
126
+ #define lm_ggml_vec_dot_iq2_s_q8_K_generic lm_ggml_vec_dot_iq2_s_q8_K
127
+ #define lm_ggml_vec_dot_iq3_xxs_q8_K_generic lm_ggml_vec_dot_iq3_xxs_q8_K
128
+ #define lm_ggml_vec_dot_iq3_s_q8_K_generic lm_ggml_vec_dot_iq3_s_q8_K
129
+ #define lm_ggml_vec_dot_iq1_s_q8_K_generic lm_ggml_vec_dot_iq1_s_q8_K
130
+ #define lm_ggml_vec_dot_iq1_m_q8_K_generic lm_ggml_vec_dot_iq1_m_q8_K
131
+ #define lm_ggml_vec_dot_iq4_nl_q8_0_generic lm_ggml_vec_dot_iq4_nl_q8_0
132
+ #define lm_ggml_vec_dot_iq4_xs_q8_K_generic lm_ggml_vec_dot_iq4_xs_q8_K
133
+ #define lm_ggml_vec_dot_mxfp4_q8_0_generic lm_ggml_vec_dot_mxfp4_q8_0
134
+ // repack.cpp
135
+ #define lm_ggml_quantize_mat_q8_0_4x4_generic lm_ggml_quantize_mat_q8_0_4x4
136
+ #define lm_ggml_quantize_mat_q8_0_4x8_generic lm_ggml_quantize_mat_q8_0_4x8
137
+ #define lm_ggml_quantize_mat_q8_K_4x8_generic lm_ggml_quantize_mat_q8_K_4x8
138
+ #define lm_ggml_gemv_q4_0_4x4_q8_0_generic lm_ggml_gemv_q4_0_4x4_q8_0
139
+ #define lm_ggml_gemv_q4_0_4x8_q8_0_generic lm_ggml_gemv_q4_0_4x8_q8_0
140
+ #define lm_ggml_gemv_q4_K_8x8_q8_K_generic lm_ggml_gemv_q4_K_8x8_q8_K
141
+ #define lm_ggml_gemv_q2_K_8x8_q8_K_generic lm_ggml_gemv_q2_K_8x8_q8_K
142
+ #define lm_ggml_gemv_iq4_nl_4x4_q8_0_generic lm_ggml_gemv_iq4_nl_4x4_q8_0
143
+ #define lm_ggml_gemv_iq4_nl_8x8_q8_0_generic lm_ggml_gemv_iq4_nl_8x8_q8_0
144
+ #define lm_ggml_gemm_q4_0_4x4_q8_0_generic lm_ggml_gemm_q4_0_4x4_q8_0
145
+ #define lm_ggml_gemm_q4_0_4x8_q8_0_generic lm_ggml_gemm_q4_0_4x8_q8_0
146
+ #define lm_ggml_gemm_q4_K_8x8_q8_K_generic lm_ggml_gemm_q4_K_8x8_q8_K
147
+ #define lm_ggml_gemm_q2_K_8x8_q8_K_generic lm_ggml_gemm_q2_K_8x8_q8_K
148
+ #define lm_ggml_gemm_iq4_nl_4x4_q8_0_generic lm_ggml_gemm_iq4_nl_4x4_q8_0
149
+ #define lm_ggml_gemm_iq4_nl_8x8_q8_0_generic lm_ggml_gemm_iq4_nl_8x8_q8_0
150
+ #elif defined(__s390x__)
151
+ // quants.c
152
+ #define quantize_row_q8_K_generic quantize_row_q8_K
153
+ #define lm_ggml_vec_dot_tq1_0_q8_K_generic lm_ggml_vec_dot_tq1_0_q8_K
154
+ #define lm_ggml_vec_dot_tq2_0_q8_K_generic lm_ggml_vec_dot_tq2_0_q8_K
155
+ #define lm_ggml_vec_dot_q2_K_q8_K_generic lm_ggml_vec_dot_q2_K_q8_K
156
+ #define lm_ggml_vec_dot_iq2_xxs_q8_K_generic lm_ggml_vec_dot_iq2_xxs_q8_K
157
+ #define lm_ggml_vec_dot_iq2_xs_q8_K_generic lm_ggml_vec_dot_iq2_xs_q8_K
158
+ #define lm_ggml_vec_dot_iq2_s_q8_K_generic lm_ggml_vec_dot_iq2_s_q8_K
159
+ #define lm_ggml_vec_dot_iq3_xxs_q8_K_generic lm_ggml_vec_dot_iq3_xxs_q8_K
160
+ #define lm_ggml_vec_dot_iq3_s_q8_K_generic lm_ggml_vec_dot_iq3_s_q8_K
161
+ #define lm_ggml_vec_dot_iq1_s_q8_K_generic lm_ggml_vec_dot_iq1_s_q8_K
162
+ #define lm_ggml_vec_dot_iq1_m_q8_K_generic lm_ggml_vec_dot_iq1_m_q8_K
163
+ #define lm_ggml_vec_dot_mxfp4_q8_0_generic lm_ggml_vec_dot_mxfp4_q8_0
164
+ // repack.cpp
165
+ #define lm_ggml_quantize_mat_q8_0_4x4_generic lm_ggml_quantize_mat_q8_0_4x4
166
+ #define lm_ggml_quantize_mat_q8_0_4x8_generic lm_ggml_quantize_mat_q8_0_4x8
167
+ #define lm_ggml_quantize_mat_q8_K_4x8_generic lm_ggml_quantize_mat_q8_K_4x8
168
+ #define lm_ggml_gemv_q4_0_4x4_q8_0_generic lm_ggml_gemv_q4_0_4x4_q8_0
169
+ #define lm_ggml_gemv_q4_0_4x8_q8_0_generic lm_ggml_gemv_q4_0_4x8_q8_0
170
+ #define lm_ggml_gemv_q4_0_8x8_q8_0_generic lm_ggml_gemv_q4_0_8x8_q8_0
171
+ #define lm_ggml_gemv_q4_K_8x8_q8_K_generic lm_ggml_gemv_q4_K_8x8_q8_K
172
+ #define lm_ggml_gemv_q2_K_8x8_q8_K_generic lm_ggml_gemv_q2_K_8x8_q8_K
173
+ #define lm_ggml_gemv_iq4_nl_4x4_q8_0_generic lm_ggml_gemv_iq4_nl_4x4_q8_0
174
+ #define lm_ggml_gemv_iq4_nl_8x8_q8_0_generic lm_ggml_gemv_iq4_nl_8x8_q8_0
175
+ #define lm_ggml_gemm_q4_0_4x4_q8_0_generic lm_ggml_gemm_q4_0_4x4_q8_0
176
+ #define lm_ggml_gemm_q4_0_4x8_q8_0_generic lm_ggml_gemm_q4_0_4x8_q8_0
177
+ #define lm_ggml_gemm_q4_0_8x8_q8_0_generic lm_ggml_gemm_q4_0_8x8_q8_0
178
+ #define lm_ggml_gemm_q4_K_8x8_q8_K_generic lm_ggml_gemm_q4_K_8x8_q8_K
179
+ #define lm_ggml_gemm_q2_K_8x8_q8_K_generic lm_ggml_gemm_q2_K_8x8_q8_K
180
+ #define lm_ggml_gemm_iq4_nl_4x4_q8_0_generic lm_ggml_gemm_iq4_nl_4x4_q8_0
181
+ #define lm_ggml_gemm_iq4_nl_8x8_q8_0_generic lm_ggml_gemm_iq4_nl_8x8_q8_0
182
+ #elif defined(__wasm__)
183
+ // quants.c
184
+ #define lm_ggml_vec_dot_q4_1_q8_1_generic lm_ggml_vec_dot_q4_1_q8_1
185
+ #define lm_ggml_vec_dot_tq1_0_q8_K_generic lm_ggml_vec_dot_tq1_0_q8_K
186
+ #define lm_ggml_vec_dot_tq2_0_q8_K_generic lm_ggml_vec_dot_tq2_0_q8_K
187
+ #define lm_ggml_vec_dot_iq2_xxs_q8_K_generic lm_ggml_vec_dot_iq2_xxs_q8_K
188
+ #define lm_ggml_vec_dot_iq2_xs_q8_K_generic lm_ggml_vec_dot_iq2_xs_q8_K
189
+ #define lm_ggml_vec_dot_iq2_s_q8_K_generic lm_ggml_vec_dot_iq2_s_q8_K
190
+ #define lm_ggml_vec_dot_iq3_xxs_q8_K_generic lm_ggml_vec_dot_iq3_xxs_q8_K
191
+ #define lm_ggml_vec_dot_iq3_s_q8_K_generic lm_ggml_vec_dot_iq3_s_q8_K
192
+ #define lm_ggml_vec_dot_iq1_s_q8_K_generic lm_ggml_vec_dot_iq1_s_q8_K
193
+ #define lm_ggml_vec_dot_iq1_m_q8_K_generic lm_ggml_vec_dot_iq1_m_q8_K
194
+ #define lm_ggml_vec_dot_iq4_nl_q8_0_generic lm_ggml_vec_dot_iq4_nl_q8_0
195
+ #define lm_ggml_vec_dot_iq4_xs_q8_K_generic lm_ggml_vec_dot_iq4_xs_q8_K
196
+ #define lm_ggml_vec_dot_mxfp4_q8_0_generic lm_ggml_vec_dot_mxfp4_q8_0
197
+ // repack.cpp
198
+ #define lm_ggml_quantize_mat_q8_0_4x4_generic lm_ggml_quantize_mat_q8_0_4x4
199
+ #define lm_ggml_quantize_mat_q8_0_4x8_generic lm_ggml_quantize_mat_q8_0_4x8
200
+ #define lm_ggml_quantize_mat_q8_K_4x8_generic lm_ggml_quantize_mat_q8_K_4x8
201
+ #define lm_ggml_gemv_q4_0_4x4_q8_0_generic lm_ggml_gemv_q4_0_4x4_q8_0
202
+ #define lm_ggml_gemv_q4_0_4x8_q8_0_generic lm_ggml_gemv_q4_0_4x8_q8_0
203
+ #define lm_ggml_gemv_q4_0_8x8_q8_0_generic lm_ggml_gemv_q4_0_8x8_q8_0
204
+ #define lm_ggml_gemv_q4_K_8x8_q8_K_generic lm_ggml_gemv_q4_K_8x8_q8_K
205
+ #define lm_ggml_gemv_q2_K_8x8_q8_K_generic lm_ggml_gemv_q2_K_8x8_q8_K
206
+ #define lm_ggml_gemv_iq4_nl_4x4_q8_0_generic lm_ggml_gemv_iq4_nl_4x4_q8_0
207
+ #define lm_ggml_gemv_iq4_nl_8x8_q8_0_generic lm_ggml_gemv_iq4_nl_8x8_q8_0
208
+ #define lm_ggml_gemm_q4_0_4x4_q8_0_generic lm_ggml_gemm_q4_0_4x4_q8_0
209
+ #define lm_ggml_gemm_q4_0_4x8_q8_0_generic lm_ggml_gemm_q4_0_4x8_q8_0
210
+ #define lm_ggml_gemm_q4_0_8x8_q8_0_generic lm_ggml_gemm_q4_0_8x8_q8_0
211
+ #define lm_ggml_gemm_q4_K_8x8_q8_K_generic lm_ggml_gemm_q4_K_8x8_q8_K
212
+ #define lm_ggml_gemm_q2_K_8x8_q8_K_generic lm_ggml_gemm_q2_K_8x8_q8_K
213
+ #define lm_ggml_gemm_iq4_nl_4x4_q8_0_generic lm_ggml_gemm_iq4_nl_4x4_q8_0
214
+ #define lm_ggml_gemm_iq4_nl_8x8_q8_0_generic lm_ggml_gemm_iq4_nl_8x8_q8_0
215
+ #endif
@@ -0,0 +1,158 @@
1
+ #include "binary-ops.h"
2
+
3
+ #if defined(LM_GGML_USE_ACCELERATE)
4
+ #include <Accelerate/Accelerate.h>
5
+
6
+ using vDSP_fn_t = void (*)(const float *, vDSP_Stride, const float *, vDSP_Stride, float *, vDSP_Stride, vDSP_Length);
7
+ #endif
8
+
9
+ static inline float op_add(float a, float b) {
10
+ return a + b;
11
+ }
12
+
13
+ static inline float op_sub(float a, float b) {
14
+ return a - b;
15
+ }
16
+
17
+ static inline float op_mul(float a, float b) {
18
+ return a * b;
19
+ }
20
+
21
+ static inline float op_div(float a, float b) {
22
+ return a / b;
23
+ }
24
+
25
+ template <float (*op)(float, float), typename src0_t, typename src1_t, typename dst_t>
26
+ static inline void vec_binary_op_contiguous(const int64_t n, dst_t * z, const src0_t * x, const src1_t * y) {
27
+ constexpr auto src0_to_f32 = type_conversion_table<src0_t>::to_f32;
28
+ constexpr auto src1_to_f32 = type_conversion_table<src1_t>::to_f32;
29
+ constexpr auto f32_to_dst = type_conversion_table<dst_t >::from_f32;
30
+
31
+ for (int i = 0; i < n; i++) {
32
+ z[i] = f32_to_dst(op(src0_to_f32(x[i]), src1_to_f32(y[i])));
33
+ }
34
+ }
35
+
36
+ template <float (*op)(float, float), typename src0_t, typename src1_t, typename dst_t>
37
+ static inline void vec_binary_op_non_contiguous(const int64_t n, const int64_t ne10, const int64_t nb10, dst_t * z, const src0_t * x, const src1_t * y) {
38
+ constexpr auto src0_to_f32 = type_conversion_table<src0_t>::to_f32;
39
+ constexpr auto src1_to_f32 = type_conversion_table<src1_t>::to_f32;
40
+ constexpr auto f32_to_dst = type_conversion_table<dst_t >::from_f32;
41
+
42
+ for (int i = 0; i < n; i++) {
43
+ int i10 = i % ne10;
44
+ const src1_t * y_ptr = (const src1_t *)((const char *)y + i10*nb10);
45
+ z[i] = f32_to_dst(op(src0_to_f32(x[i]), src1_to_f32(*y_ptr)));
46
+ }
47
+ }
48
+
49
+ template <float (*op)(float, float), typename src0_t, typename src1_t, typename dst_t>
50
+ static void apply_binary_op(const lm_ggml_compute_params * params, lm_ggml_tensor * dst) {
51
+ const lm_ggml_tensor * src0 = dst->src[0];
52
+ const lm_ggml_tensor * src1 = dst->src[1];
53
+
54
+ LM_GGML_ASSERT(lm_ggml_can_repeat(src1, src0) && lm_ggml_are_same_shape(src0, dst));
55
+
56
+ LM_GGML_TENSOR_BINARY_OP_LOCALS
57
+
58
+ LM_GGML_ASSERT( nb0 == sizeof(dst_t));
59
+ LM_GGML_ASSERT(nb00 == sizeof(src0_t));
60
+
61
+ const auto [ir0, ir1] = get_thread_range(params, src0);
62
+ const bool is_src1_contiguous = (nb10 == sizeof(src1_t));
63
+
64
+ if (!is_src1_contiguous) { // broadcast not implemented yet for non-contiguous
65
+ LM_GGML_ASSERT(lm_ggml_are_same_shape(src0, src1));
66
+ }
67
+
68
+ #ifdef LM_GGML_USE_ACCELERATE
69
+ vDSP_fn_t vDSP_op = nullptr;
70
+ // TODO - avoid the f32-only check using type 'trait' lookup tables and row-based src-to-float conversion functions
71
+ if (src0->type == LM_GGML_TYPE_F32 && src1->type == LM_GGML_TYPE_F32 && dst->type == LM_GGML_TYPE_F32) {
72
+ if (op == op_add) {
73
+ vDSP_op = vDSP_vadd;
74
+ } else if (op == op_sub) {
75
+ vDSP_op = vDSP_vsub;
76
+ } else if (op == op_mul) {
77
+ vDSP_op = vDSP_vmul;
78
+ } else if (op == op_div) {
79
+ vDSP_op = vDSP_vdiv;
80
+ }
81
+ }
82
+ #endif
83
+
84
+ for (int64_t ir = ir0; ir < ir1; ++ir) {
85
+ const int64_t i03 = ir/(ne02*ne01);
86
+ const int64_t i02 = (ir - i03*ne02*ne01)/ne01;
87
+ const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01);
88
+
89
+ const int64_t i13 = i03 % ne13;
90
+ const int64_t i12 = i02 % ne12;
91
+ const int64_t i11 = i01 % ne11;
92
+
93
+ dst_t * dst_ptr = (dst_t *) ((char *) dst->data + i03*nb3 + i02*nb2 + i01*nb1 );
94
+ const src0_t * src0_ptr = (const src0_t *) ((const char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01);
95
+ const src1_t * src1_ptr = (const src1_t *) ((const char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11);
96
+
97
+ if (is_src1_contiguous) {
98
+ // src1 is broadcastable across src0 and dst in i1, i2, i3
99
+ const int64_t nr0 = ne00 / ne10;
100
+
101
+ for (int64_t r = 0; r < nr0; ++r) {
102
+ #ifdef LM_GGML_USE_ACCELERATE
103
+ if constexpr (std::is_same_v<src0_t, float> && std::is_same_v<src1_t, float> && std::is_same_v<dst_t, float>) {
104
+ if (vDSP_op != nullptr) {
105
+ vDSP_op(src1_ptr, 1, src0_ptr + r*ne10, 1, dst_ptr + r*ne10, 1, ne10);
106
+ continue;
107
+ }
108
+ }
109
+ #endif
110
+ vec_binary_op_contiguous<op>(ne10, dst_ptr + r*ne10, src0_ptr + r*ne10, src1_ptr);
111
+ }
112
+ } else {
113
+ vec_binary_op_non_contiguous<op>(ne0, ne10, nb10, dst_ptr, src0_ptr, src1_ptr);
114
+ }
115
+ }
116
+ }
117
+
118
+ // TODO: Use the 'traits' lookup table (for type conversion fns), instead of a mass of 'if' conditions with long templates
119
+ template <float (*op)(float, float)>
120
+ static void binary_op(const lm_ggml_compute_params * params, lm_ggml_tensor * dst) {
121
+ const lm_ggml_tensor * src0 = dst->src[0];
122
+ const lm_ggml_tensor * src1 = dst->src[1];
123
+
124
+ /* */ if (src0->type == LM_GGML_TYPE_F32 && src1->type == LM_GGML_TYPE_F32 && dst->type == LM_GGML_TYPE_F32) { // all f32
125
+ apply_binary_op<op, float, float, float>(params, dst);
126
+ } else if (src0->type == LM_GGML_TYPE_F16 && src1->type == LM_GGML_TYPE_F16 && dst->type == LM_GGML_TYPE_F16) { // all f16
127
+ apply_binary_op<op, lm_ggml_fp16_t, lm_ggml_fp16_t, lm_ggml_fp16_t>(params, dst);
128
+ } else if (src0->type == LM_GGML_TYPE_BF16 && src1->type == LM_GGML_TYPE_BF16 && dst->type == LM_GGML_TYPE_BF16) { // all bf16
129
+ apply_binary_op<op, lm_ggml_bf16_t, lm_ggml_bf16_t, lm_ggml_bf16_t>(params, dst);
130
+ } else if (src0->type == LM_GGML_TYPE_BF16 && src1->type == LM_GGML_TYPE_F32 && dst->type == LM_GGML_TYPE_BF16) {
131
+ apply_binary_op<op, lm_ggml_bf16_t, float, lm_ggml_bf16_t>(params, dst);
132
+ } else if (src0->type == LM_GGML_TYPE_BF16 && src1->type == LM_GGML_TYPE_F32 && dst->type == LM_GGML_TYPE_F32) {
133
+ apply_binary_op<op, lm_ggml_bf16_t, float, float>(params, dst);
134
+ } else if (src0->type == LM_GGML_TYPE_F16 && src1->type == LM_GGML_TYPE_F32 && dst->type == LM_GGML_TYPE_F16) {
135
+ apply_binary_op<op, lm_ggml_fp16_t, float, lm_ggml_fp16_t>(params, dst);
136
+ } else if (src0->type == LM_GGML_TYPE_F16 && src1->type == LM_GGML_TYPE_F32 && dst->type == LM_GGML_TYPE_F32) {
137
+ apply_binary_op<op, lm_ggml_fp16_t, float, float>(params, dst);
138
+ } else {
139
+ LM_GGML_ABORT("%s: unsupported types: dst: %s, src0: %s, src1: %s\n", __func__,
140
+ lm_ggml_type_name(dst->type), lm_ggml_type_name(src0->type), lm_ggml_type_name(src1->type));
141
+ }
142
+ }
143
+
144
+ void lm_ggml_compute_forward_add_non_quantized(const lm_ggml_compute_params * params, lm_ggml_tensor * dst) {
145
+ binary_op<op_add>(params, dst);
146
+ }
147
+
148
+ void lm_ggml_compute_forward_sub(const lm_ggml_compute_params * params, lm_ggml_tensor * dst) {
149
+ binary_op<op_sub>(params, dst);
150
+ }
151
+
152
+ void lm_ggml_compute_forward_mul(const lm_ggml_compute_params * params, lm_ggml_tensor * dst) {
153
+ binary_op<op_mul>(params, dst);
154
+ }
155
+
156
+ void lm_ggml_compute_forward_div(const lm_ggml_compute_params * params, lm_ggml_tensor * dst) {
157
+ binary_op<op_div>(params, dst);
158
+ }
@@ -0,0 +1,16 @@
1
+ #pragma once
2
+
3
+ #include "common.h"
4
+
5
+ #ifdef __cplusplus
6
+ extern "C" {
7
+ #endif
8
+
9
+ void lm_ggml_compute_forward_add_non_quantized(const struct lm_ggml_compute_params * params, struct lm_ggml_tensor * dst);
10
+ void lm_ggml_compute_forward_sub(const struct lm_ggml_compute_params * params, struct lm_ggml_tensor * dst);
11
+ void lm_ggml_compute_forward_mul(const struct lm_ggml_compute_params * params, struct lm_ggml_tensor * dst);
12
+ void lm_ggml_compute_forward_div(const struct lm_ggml_compute_params * params, struct lm_ggml_tensor * dst);
13
+
14
+ #ifdef __cplusplus
15
+ }
16
+ #endif
@@ -0,0 +1,73 @@
1
+ #pragma once
2
+
3
+ #include "ggml.h"
4
+ #include "traits.h"
5
+ #include "ggml-cpu-impl.h"
6
+ #include "ggml-impl.h"
7
+ #include "simd-mappings.h"
8
+
9
+ #ifdef __cplusplus
10
+
11
+ #include <utility>
12
+
13
+ // convenience functions/macros for use in template calls
14
+ // note: these won't be required after the 'traits' lookup table is used.
15
+ static inline lm_ggml_fp16_t f32_to_f16(float x) {
16
+ return LM_GGML_CPU_FP32_TO_FP16(x);
17
+ }
18
+
19
+ static inline float f16_to_f32(lm_ggml_fp16_t x) {
20
+ return LM_GGML_CPU_FP16_TO_FP32(x);
21
+ }
22
+
23
+ static inline lm_ggml_bf16_t f32_to_bf16(float x) {
24
+ return LM_GGML_FP32_TO_BF16(x);
25
+ }
26
+
27
+ static inline float bf16_to_f32(lm_ggml_bf16_t x) {
28
+ return LM_GGML_BF16_TO_FP32(x);
29
+ }
30
+
31
+ static inline float f32_to_f32(float x) {
32
+ return x;
33
+ }
34
+
35
+ // TODO - merge this into the traits table, after using row-based conversions
36
+ template <class T>
37
+ struct type_conversion_table;
38
+
39
+ template <>
40
+ struct type_conversion_table<lm_ggml_fp16_t> {
41
+ static constexpr float (*to_f32)(lm_ggml_fp16_t) = f16_to_f32;
42
+ static constexpr lm_ggml_fp16_t (*from_f32)(float) = f32_to_f16;
43
+ };
44
+
45
+ template <>
46
+ struct type_conversion_table<float> {
47
+ static constexpr float (*to_f32)(float) = f32_to_f32;
48
+ static constexpr float (*from_f32)(float) = f32_to_f32;
49
+ };
50
+
51
+ template <>
52
+ struct type_conversion_table<lm_ggml_bf16_t> {
53
+ static constexpr float (*to_f32)(lm_ggml_bf16_t) = bf16_to_f32;
54
+ static constexpr lm_ggml_bf16_t (*from_f32)(float) = f32_to_bf16;
55
+ };
56
+
57
+ static std::pair<int64_t, int64_t> get_thread_range(const struct lm_ggml_compute_params * params, const struct lm_ggml_tensor * src0) {
58
+ const int64_t ith = params->ith;
59
+ const int64_t nth = params->nth;
60
+
61
+ const int64_t nr = lm_ggml_nrows(src0);
62
+
63
+ // rows per thread
64
+ const int64_t dr = (nr + nth - 1)/nth;
65
+
66
+ // row range for this thread
67
+ const int64_t ir0 = dr*ith;
68
+ const int64_t ir1 = MIN(ir0 + dr, nr);
69
+
70
+ return {ir0, ir1};
71
+ }
72
+
73
+ #endif