From 6cfd8831fd748cfeb91ba65df0ff542678f77ff0 Mon Sep 17 00:00:00 2001 From: potassiummmm Date: Thu, 17 Oct 2024 21:21:10 +0800 Subject: [PATCH] initial commit --- .gitignore | 46 + .gitmodules | 4 + 3rdparty/llama.cpp | 1 + CMakeLists.txt | 73 + CODE_OF_CONDUCT.md | 9 + LICENSE | 21 + README.md | 228 +++ SECURITY.md | 41 + assets/tl1.png | Bin 0 -> 13323 bytes assets/tl2.png | Bin 0 -> 16787 bytes docs/codegen.md | 49 + include/ggml-bitnet.h | 49 + media/benchmark.png | Bin 0 -> 37388 bytes media/demo.mp4 | Bin 0 -> 1307044 bytes .../bitnet-lut-kernels-tl1.h | 771 ++++++++ .../bitnet-lut-kernels-tl2.h | 1454 ++++++++++++++ .../kernel_config_tl1.ini | 28 + .../kernel_config_tl2.ini | 28 + .../bitnet_b1_58-3B/bitnet-lut-kernels-tl1.h | 627 ++++++ .../bitnet_b1_58-3B/bitnet-lut-kernels-tl2.h | 1167 +++++++++++ .../bitnet_b1_58-3B/kernel_config_tl1.ini | 21 + .../bitnet_b1_58-3B/kernel_config_tl2.ini | 21 + .../bitnet-lut-kernels-tl1.h | 627 ++++++ .../bitnet-lut-kernels-tl2.h | 1167 +++++++++++ .../bitnet_b1_58-large/kernel_config_tl1.ini | 21 + .../bitnet_b1_58-large/kernel_config_tl2.ini | 21 + requirements.txt | 11 + run_inference.py | 53 + setup_env.py | 202 ++ src/CMakeLists.txt | 10 + src/ggml-bitnet-lut.cpp | 163 ++ src/ggml-bitnet-mad.cpp | 361 ++++ utils/codegen_tl1.py | 442 +++++ utils/codegen_tl2.py | 757 ++++++++ utils/convert-hf-to-gguf-bitnet.py | 1161 +++++++++++ utils/convert.py | 1711 +++++++++++++++++ utils/e2e_benchmark.py | 52 + utils/generate-dummy-bitnet-model.py | 1048 ++++++++++ utils/kernel_tuning.py | 0 39 files changed, 12445 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 160000 3rdparty/llama.cpp create mode 100644 CMakeLists.txt create mode 100644 CODE_OF_CONDUCT.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 SECURITY.md create mode 100644 assets/tl1.png create mode 100644 assets/tl2.png create mode 100644 docs/codegen.md create mode 100644 include/ggml-bitnet.h create mode 100644 media/benchmark.png create mode 100644 media/demo.mp4 create mode 100644 preset_kernels/Llama3-8B-1.58-100B-tokens/bitnet-lut-kernels-tl1.h create mode 100644 preset_kernels/Llama3-8B-1.58-100B-tokens/bitnet-lut-kernels-tl2.h create mode 100644 preset_kernels/Llama3-8B-1.58-100B-tokens/kernel_config_tl1.ini create mode 100644 preset_kernels/Llama3-8B-1.58-100B-tokens/kernel_config_tl2.ini create mode 100644 preset_kernels/bitnet_b1_58-3B/bitnet-lut-kernels-tl1.h create mode 100644 preset_kernels/bitnet_b1_58-3B/bitnet-lut-kernels-tl2.h create mode 100644 preset_kernels/bitnet_b1_58-3B/kernel_config_tl1.ini create mode 100644 preset_kernels/bitnet_b1_58-3B/kernel_config_tl2.ini create mode 100644 preset_kernels/bitnet_b1_58-large/bitnet-lut-kernels-tl1.h create mode 100644 preset_kernels/bitnet_b1_58-large/bitnet-lut-kernels-tl2.h create mode 100644 preset_kernels/bitnet_b1_58-large/kernel_config_tl1.ini create mode 100644 preset_kernels/bitnet_b1_58-large/kernel_config_tl2.ini create mode 100644 requirements.txt create mode 100644 run_inference.py create mode 100644 setup_env.py create mode 100644 src/CMakeLists.txt create mode 100644 src/ggml-bitnet-lut.cpp create mode 100644 src/ggml-bitnet-mad.cpp create mode 100644 utils/codegen_tl1.py create mode 100644 utils/codegen_tl2.py create mode 100644 utils/convert-hf-to-gguf-bitnet.py create mode 100644 utils/convert.py create mode 100644 utils/e2e_benchmark.py create mode 100644 utils/generate-dummy-bitnet-model.py create mode 100644 utils/kernel_tuning.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a8a2b3f --- /dev/null +++ b/.gitignore @@ -0,0 +1,46 @@ +# Extensions + +*.a +*.bat +*.bin +*.dll +*.dot +*.etag +*.exe +*.gcda +*.gcno +*.gcov +*.gguf +*.gguf.json +*.lastModified +*.log +*.metallib +*.o +*.so +*.tmp + +# IDE / OS + +.cache/ +.ccls-cache/ +.direnv/ +.DS_Store +.envrc +.idea/ +.swiftpm +.vs/ +.vscode/ +nppBackup + +# Models +models/* + +# Python + +/.venv +__pycache__/ +*/poetry.lock +poetry.toml + +build/ +logs/ \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..2b36e49 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "3rdparty/llama.cpp"] + path = 3rdparty/llama.cpp + url = https://github.com/Eddie-Wang1120/llama.cpp.git + branch = merge-dev diff --git a/3rdparty/llama.cpp b/3rdparty/llama.cpp new file mode 160000 index 0000000..5371710 --- /dev/null +++ b/3rdparty/llama.cpp @@ -0,0 +1 @@ +Subproject commit 5371710215b86ca760bdc51c298ea1f4be0449a6 diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..b7a0c99 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,73 @@ +cmake_minimum_required(VERSION 3.14) # for add_link_options and implicit target directories. +project("bitnet.cpp" C CXX) +include(CheckIncludeFileCXX) + +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +if (NOT XCODE AND NOT MSVC AND NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") +endif() + +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + +# option list +option(BITNET_ARM_TL1 "bitnet.cpp: use tl1 on arm platform" OFF) +option(BITNET_X86_TL2 "bitnet.cpp: use tl2 on x86 platform" OFF) + + +set(CMAKE_CXX_STANDARD_REQUIRED true) +set(CMAKE_C_STANDARD 11) +set(CMAKE_C_STANDARD_REQUIRED true) +set(THREADS_PREFER_PTHREAD_FLAG ON) + +# override ggml options +set(GGML_BITNET_ARM_TL1 ${BITNET_ARM_TL1}) +set(GGML_BITNET_X86_TL2 ${BITNET_X86_TL2}) + +if (GGML_BITNET_ARM_TL1) + add_compile_definitions(GGML_BITNET_ARM_TL1) +endif() +if (GGML_BITNET_X86_TL2) + add_compile_definitions(GGML_BITNET_X86_TL2) +endif() + +find_package(Threads REQUIRED) + +add_subdirectory(src) +add_subdirectory(3rdparty/llama.cpp) + +# install + +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) + +set(LLAMA_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} + CACHE PATH "Location of header files") +set(LLAMA_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} + CACHE PATH "Location of library files") +set(LLAMA_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR} + CACHE PATH "Location of binary files") +set(LLAMA_BUILD_NUMBER ${BUILD_NUMBER}) +set(LLAMA_BUILD_COMMIT ${BUILD_COMMIT}) +set(LLAMA_INSTALL_VERSION 0.0.${BUILD_NUMBER}) + +get_target_property(GGML_DIRECTORY ggml SOURCE_DIR) +get_directory_property(GGML_DIR_DEFINES DIRECTORY ${GGML_DIRECTORY} COMPILE_DEFINITIONS) +get_target_property(GGML_TARGET_DEFINES ggml COMPILE_DEFINITIONS) +set(GGML_TRANSIENT_DEFINES ${GGML_TARGET_DEFINES} ${GGML_DIR_DEFINES}) +get_target_property(GGML_LINK_LIBRARIES ggml LINK_LIBRARIES) + +get_directory_property(LLAMA_TRANSIENT_DEFINES COMPILE_DEFINITIONS) + +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/LlamaConfigVersion.cmake + VERSION ${LLAMA_INSTALL_VERSION} + COMPATIBILITY SameMajorVersion) + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/LlamaConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/LlamaConfigVersion.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Llama) + +set_target_properties(llama PROPERTIES PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/llama.h) +install(TARGETS llama LIBRARY PUBLIC_HEADER) \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..f9ba8cf --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,9 @@ +# Microsoft Open Source Code of Conduct + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). + +Resources: + +- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) +- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9e841e7 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/README.md b/README.md new file mode 100644 index 0000000..88c5d09 --- /dev/null +++ b/README.md @@ -0,0 +1,228 @@ +# bitnet.cpp +[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT) +![version](https://img.shields.io/badge/version-1.0-blue) + +bitnet.cpp is the official inference framework for BitNet models (e.g., BitNet b1.58), optimized for CPU devices. It offers a suite of optimized kernels, that support lossless inference of 1.58-bit models on both x86 and ARM architectures. + +## Demo + +A demo of bitnet.cpp runing a BitNet b1.58 3B model on Apple M2: + +https://github.com/user-attachments/assets/7f46b736-edec-4828-b809-4be780a3e5b1 + +## Timeline + +- 10/17/2024 bitnet.cpp 1.0 released. +- 02/27/2024 [The Era of 1-bit LLMs: All Large Language Models are in 1.58 Bits](https://arxiv.org/abs/2402.17764) +- 10/17/2023 [BitNet: Scaling 1-bit Transformers for Large Language Models](https://arxiv.org/abs/2310.11453) + +## Supported Models + +bitnet.cpp supports a list of 1-bit models available on [Hugging Face](https://huggingface.co/) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ModelParametersCPUKernel
I2_STL1TL2
bitnet_b1_58-large0.7Bx86
ARM
bitnet_b1_58-3B3.3Bx86
ARM
Llama3-8B-1.58-100B-tokens8.0Bx86
ARM
+ + + +## Installation + +### Requirements +- python>=3.9 +- cmake>=3.22 +- clang>=18 + - For Windows users, install [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/). In the installer, toggle on at least the following options(this also automatically installs the required additional tools like CMake): + - Desktop-development with C++ + - C++-CMake Tools for Windows + - Git for Windows + - C++-Clang Compiler for Windows + - MS-Build Support for LLVM-Toolset (clang) + - For Debian/Ubuntu users, you can download with [Automatic installation script](https://apt.llvm.org/) + + ` bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"` +- conda (highly recommend) + +### Build from source + +> [!IMPORTANT] +> If you are using Windows, please remember to always use a Developer Command Prompt / PowerShell for VS2022 for the following commands + +1. Clone the repo +```bash +git clone --recursive https://github.com/microsoft/BitNet.git +cd BitNet +``` +2. Install the dependencies +```bash +# (Recommended) Create a new conda environment +conda create -n bitnet-cpp python=3.9 +conda activate bitnet-cpp + +pip install -r requirements.txt +``` +3. Build the project +```bash +# Download the model from Hugging Face, convert it to quantized gguf format, and build the project +python setup_env.py --hf-repo HF1BitLLM/Llama3-8B-1.58-100B-tokens -q i2_s + +# Or you can manually download the model and run with local path +huggingface-cli download HF1BitLLM/Llama3-8B-1.58-100B-tokens --local-dir models/Llama3-8B-1.58-100B-tokens +python setup_env.py -md models/Llama3-8B-1.58-100B-tokens -q i2_s +``` +
+usage: setup_env.py [-h] [--hf-repo {1bitLLM/bitnet_b1_58-large,1bitLLM/bitnet_b1_58-3B,HF1BitLLM/Llama3-8B-1.58-100B-tokens}] [--model-dir MODEL_DIR] [--log-dir LOG_DIR] [--quant-type {i2_s,tl1}] [--quant-embd]
+                    [--use-pretuned]
+
+Setup the environment for running inference
+
+optional arguments:
+  -h, --help            show this help message and exit
+  --hf-repo {1bitLLM/bitnet_b1_58-large,1bitLLM/bitnet_b1_58-3B,HF1BitLLM/Llama3-8B-1.58-100B-tokens}, -hr {1bitLLM/bitnet_b1_58-large,1bitLLM/bitnet_b1_58-3B,HF1BitLLM/Llama3-8B-1.58-100B-tokens}
+                        Model used for inference
+  --model-dir MODEL_DIR, -md MODEL_DIR
+                        Directory to save/load the model
+  --log-dir LOG_DIR, -ld LOG_DIR
+                        Directory to save the logging info
+  --quant-type {i2_s,tl1}, -q {i2_s,tl1}
+                        Quantization type
+  --quant-embd          Quantize the embeddings to f16
+  --use-pretuned, -p    Use the pretuned kernel parameters
+
+## Usage +### Basic usage +```bash +# Run inference with the quantized model +python run_inference.py -m models/Llama3-8B-1.58-100B-tokens/ggml-model-i2_s.gguf -p "Daniel went back to the the the garden. Mary travelled to the kitchen. Sandra journeyed to the kitchen. Sandra went to the hallway. John went to the bedroom. Mary went back to the garden. Where is Mary?\nAnswer:" -n 6 -temp 0 + +# Output: +# Daniel went back to the the the garden. Mary travelled to the kitchen. Sandra journeyed to the kitchen. Sandra went to the hallway. John went to the bedroom. Mary went back to the garden. Where is Mary? +# Answer: Mary is in the garden. + +``` +
+usage: run_inference.py [-h] [-m MODEL] [-n N_PREDICT] -p PROMPT [-t THREADS] [-c CTX_SIZE] [-temp TEMPERATURE]
+
+Run inference
+
+optional arguments:
+  -h, --help            show this help message and exit
+  -m MODEL, --model MODEL
+                        Path to model file
+  -n N_PREDICT, --n-predict N_PREDICT
+                        Number of tokens to predict when generating text
+  -p PROMPT, --prompt PROMPT
+                        Prompt to generate text from
+  -t THREADS, --threads THREADS
+                        Number of threads to use
+  -c CTX_SIZE, --ctx-size CTX_SIZE
+                        Size of the prompt context
+  -temp TEMPERATURE, --temperature TEMPERATURE
+                        Temperature, a hyperparameter that controls the randomness of the generated text
+
+ +### Benchmark +We provide scripts to run the inference benchmark providing a model. + +``` +usage: e2e_benchmark.py -m MODEL [-n N_TOKEN] [-p N_PROMPT] [-t THREADS] + +Setup the environment for running the inference + +required arguments: + -m MODEL, --model MODEL + Path to the model file. + +optional arguments: + -h, --help + Show this help message and exit. + -n N_TOKEN, --n-token N_TOKEN + Number of generated tokens. + -p N_PROMPT, --n-prompt N_PROMPT + Prompt to generate text from. + -t THREADS, --threads THREADS + Number of threads to use. +``` + +Here's a brief explanation of each argument: + +- `-m`, `--model`: The path to the model file. This is a required argument that must be provided when running the script. +- `-n`, `--n-token`: The number of tokens to generate during the inference. It is an optional argument with a default value of 128. +- `-p`, `--n-prompt`: The number of prompt tokens to use for generating text. This is an optional argument with a default value of 512. +- `-t`, `--threads`: The number of threads to use for running the inference. It is an optional argument with a default value of 2. +- `-h`, `--help`: Show the help message and exit. Use this argument to display usage information. + +For example: + +```sh +python utils/e2e_benchmark.py -m /path/to/model -n 200 -p 256 -t 4 +``` + +This command would run the inference benchmark using the model located at `/path/to/model`, generating 200 tokens from a 256 token prompt, utilizing 4 threads. + +For the model layout that do not supported by any public model, we provide scripts to generate a dummy model with the given model layout, and run the benchmark on your machine: + +```bash +python utils/generate-dummy-bitnet-model.py models/bitnet_b1_58-large --outfile models/dummy-bitnet-125m.tl1.gguf --outtype tl1 --model-size 125M + +# Run benchmark with the generated model, use -m to specify the model path, -p to specify the prompt processed, -n to specify the number of token to generate +python utils/e2e_benchmark.py -m models/dummy-bitnet-125m.tl1.gguf -p 512 -n 128 +``` + +## Acknowledgements + +This project is based on the [llama.cpp](https://github.com/ggerganov/llama.cpp) framework. We would like to thank all the authors for their contributions to the open-source community. We also thank [T-MAC](https://github.com/microsoft/T-MAC/) team for the helpful discussion on the LUT method for low-bit LLM inference. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..b3c89ef --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,41 @@ + + +## Security + +Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet) and [Xamarin](https://github.com/xamarin). + +If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/security.md/definition), please report it to us as described below. + +## Reporting Security Issues + +**Please do not report security vulnerabilities through public GitHub issues.** + +Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/security.md/msrc/create-report). + +If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/security.md/msrc/pgp). + +You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: + + * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) + * Full paths of source file(s) related to the manifestation of the issue + * The location of the affected source code (tag/branch/commit or direct URL) + * Any special configuration required to reproduce the issue + * Step-by-step instructions to reproduce the issue + * Proof-of-concept or exploit code (if possible) + * Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/security.md/msrc/bounty) page for more details about our active programs. + +## Preferred Languages + +We prefer all communications to be in English. + +## Policy + +Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/security.md/cvd). + + diff --git a/assets/tl1.png b/assets/tl1.png new file mode 100644 index 0000000000000000000000000000000000000000..f0b3e1e0c6e9636511ff3e133fa64ce593983c8d GIT binary patch literal 13323 zcmeHuc{r8r*Y-_mplCoP(LiJ@g$$uV*%UJDy=BahGH09TMo%OqL*^2Ry=^v`XOheh z+UBuBrc9ZqcilYc_kQ2+`;Pa0kMGZ~LkHV^-`92B>ssqv=Q`KriK_CIo%C$<2!iay zC|puQ5Lz;V(8O=s0>5$CPgRF+Gz7IP7Z7qS`yhPSYSEL|Z z63lITiROgr;owUGLQS;6_U27xUOUGZ%iU(VIXmaQJtjZTG8{JSCTNg)+?;*g=A`fG z2!-s0g{pq{D3^xs2=lQL7Wh^mmqm*pMf& zYQoQwHa%VvI}k@d8#+WFH#GEs{L$Stb#>;mKRYGuemr-kM><4d#1vA0fBy%gaz?mD zq)@J3ym+zy1d_u0kRLJ7a-RzC{_^qTL$-ql?N^qZ3HuS&wc)~RYn3Bq+;0R01xdOu zd`Kh`Yt#{gdRS9Y>iz=<>g(TL(bUpP(BO*;3uBvNM(}&knT)@E`_`6Ci08U<`?kXL z^fWq;F**C;!GNQ%YUZ}aB9`nKh}W^&ybsEuUfHPfs0%GH%Tol#S z)i>tVijeixOHWS^i;ixd8EqF87dMTfMU*a}56Roxr`JYEysfNMyr!Z;%+79=rbB`s zqQ(qgSa8Xos+9_eeez_xy@NwoJW>?1n~Zpwq?=T+MoQW%2H5@jas7~#Lp40Z`eNU|@NtVQsmWVH)hmzyE$778b^ZsXI5z&c74Er^*S1RE2J(K@cy)Qhso1 zWSs8*u<;0@e^>`@>|p>?A&A>OmQFtr3%>sLJ1Aa#6TzQZa|4;x zB|@|QrXsbqH?bdW6aDiEEHkiRj^O#$?_B<+KF}N@tS_{GlUE$NgsP!03F@`Uo|7-5 znV-@WslgJwOoFQVbUb$=N-Ur6;_i8Ku8eyxgcr^qoH_~a>*KOK-8`LS?Or8)HLFDT z_)GA+2hRJEpPz@53xzOC;|vD%$9Z^I=pWHP+fBBaZZl85Qx|p4r_7LzgG0<4UK)Gp z$`$WDPabaBx^;T8N_gMXQ{^mVA-z0a3>pW!&^ajWrB*N89`ft7Dz%JsWH+)y;NVYr zPUAee4=4?{Zo_4z3I`{9OcU2{Z_T><_B(~~OfNky*aQ=RI`t8-CyP<0cjwW0^zPYx zg#%Hp)&Kdo3rkaV+!+12l6~tJ(ma-3P9)1u!m{mqifE>P{kq+mW8c3^v1o2Ci}s$^ zz_%AyIO^|h+Ij}uO@?|iy1lvClu<%bN{VIMW(`fvI0#h;G%vcJ*#jJXwi3F99-Zt* zb$W$3{P{Wj!@aK`hktf+<2TQZ7i|L95%C`T45OhQr-{Y#1t})Hd-n(`})0ohgO;#VOF2`2_v+Ljk* ziAhN{==}1>bZ9!79x%z==D1;CWu;svyPDTOFp%y#YjsG{?lXD|_YobMEVcs&UU0$E zhs^aC!zA*G(&}W05LlvOVnaQ}5BkAflps{_2FAvhA|oRMV#nMDq%u3tC#9vS8yOjy zSy+6TpBk`sl|c~S-Jii=Q-{48#AIa1N!poV-V7R8tl90`p9xWBhj%^af273H zR8xX_JQrqhW|Z)5XIA#=%A$RL^#NErI%u8DA_+BO)qNYf6uE2H{My>u0u|%9FjxFJ z^80R(0r6a>YQ(uQu!b{N3w9-7h zi`VH(QiJIY@ar*; z*<3VciC}4)D-cs$cih}MAiNDU!Bjv0%CF!EAEiN>=zHmVo^?Q2_e3KINeql|Xnxe% zQ+r$m@Z%tQ5g)9%_Cfn_`9o18^OU%F{LX`7XA28$`+NWZ7;3@Q<93tB1FQPJw6~jc zTt2W+ChYO1FDa;>`n>TJFADm67VkTp*;y?r{` zmafF39B~qUMD4RQKh+PQyBlyRuJH~e<>g+^l{b1$y>x{ACO?X|a(+2oC;c|F+e4ev zbBQAHROHuN&SizwY5mnW$fq`EEf_Zyr5@AiMT28uv2fMZ-rhc;u&|qb3u5o+Xl`I2 zw>r+W`WmO_T*kh|%cMM!)@IsQf9XQNukli*@QcXdzD~}OMLL88uuql&D91E>@;eAn z_k8jv6M(vyH)0^ai)>@E>i>hNznmzs8Byz6E?zmmZ|%i!Gd~q(I~}9ff8Fc3GT;fg zxAr>jEAs;ZvBGY>46r#0&a>X;&E(LFNXk(ZJ4>gdTz{VOM&trMpa41ML4)x7^`-Ri zarp0B0-|G(1P+8IyLTw5`&WMRUv!WErw^g*>ogNNV=ZendoJT@YHNoYRb;8FD`Tre zQ+2Y<)5Fa*>Pnx=eD_V)tuECq^gLj)o1Zk%EpXFnChPKtjkzvw^6N)ag{J-T%P04{ zlby4Ewoopv{!&>r<_P9Wn&7l7d+P5${Ddd!?{xF#>LUpX1=c0@cdc}CcriC{nXPEL za!mM9BD!mvLclXlS+X~Wi^4&1t1s@eo$)aJFlta0;q4PnI{EqeF2CxpOlJa!&~JIr z1}C_Gi&KhbS~~`8X0!>TfIR;eC$f+71U#IeIiVPoa->!@YY`@G1;w;KWDbf z)%R!@_6C8FmSNpZt_c?(R?=TkYjx{}-SE8*NfEwxKtRE_{{idxZ#^WZ2CG1!3&{EF zzjl$mVkwkU?lY~X5I2bGrENHYijIzm^@Pd1ZL^Mkc0^bh`V2uCq7mq9#KgqJT{>DC zNLz!DY_9{`(bbKF5zolT6!g4mpBhQl$Km1$1GR!@d7|Ad+}!dE+=iQyYVUR~bpdMA zuXOa!LM4G^>hGJEy)280SsVya_LKFCkmP9oq#Hh1@4R0@prll+!ua277}%Y;`iw} zo$sFeB!1@fX``rqv#Mah%0AnGSlASmY#n9o42u_59@aqX(Gkfy*)fTUiTB5L0;UO- zu=t9JipD{{MEN)@E|E-bDt@q4^xV18JhS<<=;f>M97_0MVoi1Rw-2^5L9&YJ3A&DP z8BWUlVA(FFiNg(RcP|7(7C>1(wYiy?lXHWDzY2+puI@$bn>R;z#Gq^-wzb{JU!H02 zzvF1)=BBfE?_M@GHZ|bMFtq5IGaBRhG>8{fKFhGa%X8HoqXsFEK+4I<>CvnL_3I>N)qZpf>{<>JQNgG>vx0LRnE; zxH?27x-1OFb7MSzUGe0?K=Nw@(pMWP760?6)i-_xs5KTUR6M>e6~Mn9*T$OU2>^U2 zWi5y*eqWoi0JI?Sm!AB~%-lTvX6cri>T2E~MG1nsxtSSI3A>4}@|G-IZC^ZJU2JMz4J6aRqA=`JbmX)805XvsJHY&YzO_bt22f)s@=V_|{34d*}_&fZcMXm=t*y%PwhK(`7T5sh9b0PN#PoZ+ z(jlu8Iho@=<}bp-!g5BB&Ox=Rd=khIy65-8eJA{%K2;DuR<|VC-=T__^Mu!!HNLwx z^z)~~QC39tFB?HaaEuoyD1rMOg83I`$C`7;3Wy3^sXZ4j=FAtr@thCwtY;9;dwuN6 zvmdYrXpzate)cugdzJH&QVt`34>rb6*I0WrF6}{@T8fGg8U}=8Tl3MGpSfd0)uE@+ z_?Q6)zv#_~)}~WaQ<8VTK6K78Gc&V;h#2k6#lc%s!>tQWU?g3By;n;JoU*@s`SO>R zmiNE~!u3mVlaBeciaTLk25?Rbh?d0UWZ|<-O-;u!IZhLX#dkY9&hvEx-tu8wCM$UM zxkUm=O6{4&>&=I=j`!T<@mJt7)Vr*vS0uAC_swN#qP*rN!pr~Ae0MI;%$kbj$)S9K}yXbn%#!j&o6RrLf7#W!Gi zI@KoBMnlA8A^gHn3&kiPHraD|n68{=&eueXZU25%DB1u5>?XfsFb(?(=j8K$H7JEe zM0`QiFUy=|fev zdZk{;Vx^cyIbXIen19#hKC6oYFx-a90e}K64$R{(>?D&Q1})n@U|uME3}xNL=q)NO zO=@k`TK*L;OMP}osydz)ncM}y5>j<%tSi4Q!!lfEY5XEuf#thsf-I5<70y{lxK!y( zG7YQhLp@_^Trhf*!Jt5unzeN@n1cDqr86f_9tUca7VfU$Eg(jjE2|a$6L@< zPdIgi(m&@Uo;!CAGJJm{4U&02%aEGCFhtA&2br$miN5XPasveb6rQHelmk$K)y1s4 zNc=c5dJPf*-IT#70lYebfWBK@vXqEO3}`vP?CHW!BaT%O^kC@NaCMr?SFVUkNfD!> zIQo-li}vg$s6F_jpd3r+-)VN^%Rux!sT;268Y=^hK!xH4KSK_RMka!bcE z6D>uqJq+(?H$N!8pMVH}(#QY6=8-iNXkp$~pdn!aIVC-ovLrTViG-vK{rF+ipLF@{ z^=rz?X12Bg2~eKUZ^Mzmo@1**bIW~IA>0*HmWz<)l|qDA*uw$+;ng@?ejLFxlrqWY z^#IWTo^kKK(QLP8A;59+{Jb;xH|tZH`G!HeVhyh)Zqi5s^7if9ky~^K@h_XQL@B7b z!Q0+tXG{3``xBvv1w0czI{@ja)(26Mo_I*s%TL_2mGL%|%uuqq^abHin1PqZ1Vni( z+yQT-YGDj+-MZY_*-6&^hK1}65C)|kDk@ap3_L~HPIQtcTZj==d1K)R4Zbq)K0J6I zwsU295ja8|)Ht_+??9Gm%q(2CG<5^YiV~B@I}ZXyB7F$+~NJS^!( zicFGwE%+3n_L#qPOlFr$l?0DI=mvm=jGQv07cX{0{qix2{_nQ79E0t!V?ys}5xL#l zzgMdylSCGiIz(5DNQtnXt}Z9s^P-mdB9(_nTGL<~ zQw5X)(2$3hIOjUU%g#8JICQ8-kH&!8sZ-mjj76^1U^_oDE?&YShpEypNqqCBm>|v% z-YPc%!b2dtYgb}^cu@YsATHDG{0?cf$SQ~pfjbD>`7_sDV?{oTc3iY76#}*=`yq=u z4f5I!%15_yosz`d-1g8+Hs3OQ2|c37+)H01J~@zd`RH!$mzcqRD{N_LDL5{5eEcMZ z9^v)@r2JCdNvd`xLcFdAJMZ0x{9Z9eTEPJov49J#BezUywRf%uE_da=-nNbolHB2* zh4+bxYCu{cTufzZ>YJMfBDzsI$Q4y@r}DtP2>Xjfs-jV=4hh_3Vf5C574`VrxgjNg2)3)SlQ691&MY!I!FJEGH zgmB}pK+FI?TvI2g6r=L$c$Qbu(S>h|Iy0@KowpT zC_Wxu6XvaWx#A&lR0S%inu~OLZWHn-2LoI~i)-)c2b@cCkhoFI2RJZf>`n)I`2)nH zMwrwbb!OAri29b6SI%szYF6nFHCHr{;1pV~zJ0*Yfm#I6Xp8hNptW|TYu_{$3NE3} zh;m6$(LVM}+2^R74b-{+oY6#6vVQX7&s-J#mB|n)L?)V(#tK&pJjP}{RM2|ZDvEI~ z_#8`*gAyJbJq7GeN--80B>k6B!zM9k%>kd^|d+ZmvUUynw2{elkdBN}s$_ zM)W;b7rSvls|jx0-$BmW)uYtEh9rQ=p_%lE`TOs*Vws<~`mAQlZ=0Ff)=s&Mv`~(T zpF3wMBN|fGXM5!tdj+Nv;#{H}iiH3oiByfL1X-HT5oFqkSRJ7C#e~u1)h^dD7WP8* z=4Ac4<$m$Pisd0(Vdb@}SHE|8ERJ>nRSA0;I6OEAH748ekeKkCbv0Ok!^+>@KD<@G&+&NMEKkg-7L0bvti0yZVml-%Uqd6ErnC>*a1mc$LSGA9G>gGylvz zlKpVgAWTgSDfq>0*_Ef&o@tFkvp$GVMLuZ)Rn5tH3*c%^cWe4=UB>cf(dGmwWGD7K z>A0Jhk)EEAkbr@Wu3ET9QlpTqrtYscNmmY^l9e4>IFjh&LodG$=pG&(#Zyj!bw;|K z{r49yQ$$ufV7Zf}qlC>f?}Xl{Dwx(qiF&)2;(CWnpx{FB6XM~FtgI(4d@IUx1A?bF zX?bRgz_y7%UZF5GN&qhKwgRUOuHrmebD#VPuJ`1^*2YZl> zjb6{~bGKr9LGD+6M4$CXWg<=JuHzd&I>N zUitaPoNC9)n0nyB8pYVQI0xBT&8%mzMZ2~MI9YV&P@gn`QfUrUsbBqGs__~K4y$~d z&(%6*&4T!ZtdYm@r<#kAsQ@C6N_zuf5qvuNsM-k38Qt`Vbgg@~CUx5B@w6W@G9+`g zT9xoYCDJ?yuSu}Ui5CiIDQ%sdx+$l7$H!Cl68nBBYaI^JZqL86>7JJz!7tx-w|_ac zy&dH*W#8@+vUo|JudfH#Ex+7O*d~wWn36{fipO8p)?5>}wh2StYEdh6XP)eGoOjW4KFgPjVJ*AK&WeG1u+HtH-|y+(fe~uT}q$P*PHo zVtiu&#X)R#a`j>st&CCE_mNEhNm=>IJy=9FZ)DL4dKJS%LLU<$Ta7=_7QAUvXP+u7 zPmk~l^$#$O=x!gS>bCsotKCJG+kM(G4Y)~aJZ)fA1P?O4Hxpk|=s%z`_*FMm3I>-y z?zx?x(7Kner<*Mms3i2XZIrGQm3(_j-T%rAExA7*oHF*>J#RREDYCN z@q1P=kElje?_-~gCxCBGFt*Yk)48WV z`1AdnmoFVXg613Md<(JR1H^gZvn`ZLDP!UT8@k}o_C45E3y0zc9u(QjxIM)$oW{Og z_az3#j#3nJgnWx+d|xN!E11dgglAV{QgDjT<+mLp$ZLfb3g|jRIeHE&%i(xIy@&iZ zTOp(?qv?y*wy2s#_lCAM8YUt5zLim?hx|RodA)tYH(C5HYvI`tpXbhF892KNPt&LS z4laRizoTE7cU}qKDjVtl?AhcKHH3GM1F7G$|FA5!#_`kKbCM^WZMIIWbXM4!Jngr- zp9o4PF*6ef1m36oTffb9{HokruE7PKz5S{fK#~U!9-tl>!GocHbODxacIQs7re=|R zb|=58G!z)eU)Hy#nMNw4KPtTmUq3r#`t7ZIS#W`Zi#&F&F$L|)yjP*6^3~94#L!bt zjG0~#@A2H#aqx)Fb%*NAmySmjT_06~j-7 z?Vp55LAoB>aC2%a(i+0^3|GUoXG8Z+KhZ?+uAx^yfvcR*`Do@0^0QRv)yppwF11=T zvELZ4Xjr0qH_A=Q8l;h%`0RP5+U>;=R$qx(OIP}R!e;`(>k9&EZc*FX_^MJtM;~U- z^i=e}bTmqx1|?WN57qzypOWC4uk64V)G#tadhG3;ZT%MMrSJX>&YS$<_)E;dr;t_k zocRj1ceF*q9bNK>;-dpZz+XCwndeytJ3EbDn^%isI-u6m!7Px`$7LO=Qt7SSX0#RE zQkgwKhhxe(`I{W1=isEHuBdY|NeT4ZGU$y9K=ee@$uzSLDlVeW_~HGl%%ANxZM#fWe;@I z#%Zcjq4R1`zOap`C;>FXZ<@*u^yzcfkvOIYLuL#ifvu8a8_oV>llqI#Cy;lg2d z#_-Z2AA&D+iF@l5?r!e`3jPkXf|-xpXECpNrb!@L5Gu|avJjux(0LubkYXr^<}yLt z)-78gVK5j5ac`vr!_2&Upg`HokBvM)oVg`bZ15Z}Uk_aQwZbksyx@#j>n##iL*qS> zsPyvXOQ5~n*z0!i6jCYYLF%`DY5B>_(^Hn>69aS_QH_D@W=d*nHy$YGtHQl$K}G$* zUF#&9jaYwMBS9n4Al$-`#RKiK_Yl^={Qa9Z=flM;)f^o&MM9t25#oG$dvAi`Zf0i} zXqnn;j<&aD*3-yd;-N!_$doX}IA-6nzcd3kqrLIy6eB3?G|?f<&CSn~W@cyi5_wTm zAoA5+w&`!*mOh~xi=4>*Xokb>qxb}%t#?)9YP{d2qidB$)e}wEDosO{KD598dK-X6 zXXhvzaYhL1K-%)){FD;H?GINB{Ibf1ii*6YtkCYf!J}6IWWGU%pzcfi$Y!jMr$9p_zY) zFXcksPrK?7S4I=QvdhoCqg0V&Cn3Xufi zooFX1*y&~hw&`{@NhcD0Z__m)$yp^q%_@?}^SZHFdXSGQj8Sn4sQJCA@fU4$tgzD>m{c$X{eu{*lUA_)sZOlq$A0$3~(AiZ{H5&`&3o_eLUS# z+4`gI#Yj=)$<+Zhfrh~kwNdAY#v%!j>e!jqp!*}AYV0;#2MaVDJK?6(V7N(0C+js7 z0Rr0GhAiW7#j$MoK8=^*cNQX0KMMXSp3dzP@gj7}CUXps*Z39!wg#W{{=KRItGcVJ z6oq~+5a$hDxjuWC`9{u5Jk*k~#JLEZ_t}HHppV4AYa1^};@R2RJ+aynptelqf!Kx~ zB;ck9C_y&@y5Oi@2fPzvjE|3x+3zwcPk{n9Jv++}{+lGXozN*^4$>fcLWN2ABs4=q z^gUXocR&jo9~^h@9u27cw?Uj`Ftp$BDsJpOk*{pzfL|SiI%t*DO6&A|e6kn%A!1CM z5SwO5Tt{En7^b5IHRHPIHuBNz3>*5`cQ!H-PfVh1IM1c0A97VwbSo3 z9#7B6VEwp;QS?PY=2=b6&E~5s%K@=4RcNUsSnAWKPe7H4`L45J&~ai;5l|Ymy8$qx zOoFUa!Hvz$$@xnYA?uWC1{5rhTBAA=lu(imBd-Y3tDCf*Tsk^-Ak*>Nr=4gVE%XU{ zCali+um1gHFAv&$=Pr3lT?6zZRjCp9$cP9oEKSF$I-4YD)PN{|9J7#HxF|L7;Kt0> zRELq4H-g$3`|EPj(FR|^;?G9t%}%!%`47$yM2B!K_vx?1IrAY!-Xm)P?niZ!*4qUh z^fw6GJr$>QxbHwuqIPRKNPt22nT!v~xV1>T*Nk zt&u34VhOL|+rLASA}Jw(A<^P@XYRyd+S1KK(y+sw9)}r_9&0O#*%$yQ?5O~S-k_}W zdKM~jfkFmdF~{Y50*KeDvB-fs{OHioQ7jGVi4>Gca)ZEf|1D@DBuN0(%2#V7!zM$g z#vc$Z5$YLm{hdrqdx=OBJM=Y8K0T#^Ld=6L?M?Yd{ah=q@5s`DkNQygPV1)WVt~p&DZ0 z_RqX89DxcNUbwt0r4`*-lM`tF8t zAO9IwZze+XG?pKb#<%QCR~Omf5{ z*W8$TUQn?zd#Fd?xuTm^nZbEGctd81 zKUZI@>Fc0Se7}$1>0R2EX6k?8%`O;T=FfXjKKoNG#BvSx5!Y2)*q5G*8@o&5UJDb^ zvuA&>5kWzLItS)Jv)DhmjaZW^0LNl>u9e^de^G;jS<4JhK_f}=uRr$`ca@ph*r*QL zh2iPEM85rg>mo&p5mj$@QHSk+iVUxYKX=%s{?7Glks-DP@tXX)@w^&%uvhzr+Z#|& zob%QE*Qh{xHk_=-Dz@>CZkEl>Vj(QNL=SeuL9z}dqxl&K4*L6yjo;fC)oF5!~r8}?}d`kZDLbO5Dwt}`P?ur!G8#`<`zgH7((*!(SuLX?Y(3nZnY z0O#KxQ|bSEcVbgpEnrQ+W6(LgOJNZPts9mx%!2)!3 zn-BxRKR14JpqOpt&&AUqK7PNq{B;((Gin>L%c~55yH7|5pK?kLq8p_XG)Tc8LviR) z*mi7TK`R8r%X-5^O~L1O7Cof`yn;_b0Dx~I-BZ6ogH#~(gt`t=UI7~pjXwk>u9hkF zDVj9Er2&t;0{VWt3|?ZbfI;zyVU2A=&;WLW#b1Blm^K*aLAsUJ3TQRjnsx=MR6HFL z$nra^iW`7&1AQzmKHrSDw6?~rzl}-NZ-b_sg*hUX&B5bCuiiRO%J}escMWWjj+lQ4 zqs_pGE@^~G3#^26Y=m=hl5<(2l~s0ILqiNK-ryvD98QvtuWl@i^?!>7q^EXcCsvps zvWqHzhr=t|5aswtT@rXGL7JKV1e@O;nC%a4p1AURPkdR{9{e3BuWWn&kX*!o?)UUp zPoxcy!YDVO$AcGmH#6fv_uzbRG92Q2v~fp5#jUj32F+U}Xwrf0yuok=K^s?308<0i zgiK*$^oBzU7fDc%J^meRpOV+8=ie1Cd4izWb)Y~Xn1OZCB8UdzrTrap>H=_xxTJSn z(D60og9>9c7!kITnLZ&uU$_2tAWZrCvy=VjG3F)4@q2*Az!9LHAbfs;vbt;GVhK=P z{-(BQKN&h_;9W6LmU4nRlQp@3F--zQ0~T7DDgcV&Z4ZyG)_?HJrI?=xwZBQEtS=`3|IxoFNjsa6du|Ic!7SmmKOitZ+R;zOWwS|<}3+t60&yp z3O86NVZG1*$KVm(BXRrDgP3sjQp>@KK=eTQzx$hp|JHdi z7-8)XA^!hE|5HO;sDC&N<;vPwl90lsIGM$f)9AT#IAV+-CKffN_HZsLAa)=cPAAE( zWQkdIyhl4=g^Rg`&}xQ$7aVgGN$>BKgyRIw`kuOV(o;{N5jYLCkQN+bOKwWiHjM)B z^AcfQKcStna_{mKdPqMpXQkp&@mTZH+Hv3><#8VnZQxHCaR25H8ieZ>X8r;0uJzR_)3~B%_ge3_ehp$X=60kn8}OjoXyyIo1kzTLhu4LjRK0 zSiLty5Ls^ACD|KJdQ&}~=Es-aw|^hmQ=;_fGY1#l)Gg8GOgr9#GHTaEaVAx2EtekU z3LlKTVRJlf&KwikS*_O6ksft*PNyWhtyQ^G;lY56Vo=-M8yUr{;!v6wU$J?5oL4Z- zcaAaR%zxdXF$ga#)+HC~a^HSET|Rh)fd?N?JP||JZ?GzT<<`~rO=Wg&eIrx37F~=m z(*Coa2Gj5xDfMEffnO?|L~;bFd_@H>jLc#lVUhmg#igaMBlEQ*^WkzC3Yd2U!ogKH z>8ZYoKIYwC6PE)i5yOUsg}m{JiNk)?-+OyA~UE}B=EYNoZR@#j3zt1DmR0gyu1$_F{D6`oc;CdS7(7m1SUB%Q>C@Fb(jOb zqrf9FmoIT1a9_%e3Bg23Ijg0or=v%%?;M%zE>h3dx*8G^@>mPueS|*yX_Ta+A|Wv` zQAkM0kam~Mmji}m$g$s}aRDi1Wx9ksi!KrWfPe^JxbM!9Z|&_#1_Io;wMml;sS21o ztmMcsIdn$8ho3XKfyXCnVH4A}3-3EPv`JAQf;-Q6Pa>(6Es&J-606JNJrt#Moe+lQgcuaCdg?>!{o9I8&n3$j6s#|N&o}nw@ zzLp2K(h-GKV^3XMTl?PJ%#L$e8Sur|A~IiA%)1I2qF`BN%6~n_!f&Z(|C=TM?;T?2 z?e*Mt2h)I`vhA()VS&F^?eI+bx+N)-j9ne9$}7!jrfiwuu^$P)h)z`X0v?ex4Rs6u5lB|r6H|MJ65DtY)w>% zIPO9a!&b-gc^3E8I(-qx5~>^p9%kCqf`Yd0{fOUO)QsB|!iv$+O8bb&$Q#$L`4?$( z5;>!iVmxk@IL>HjYe($fy}SN40)zZf?q0Hc&z{Ba>MCQ|HLT}+x$YYVHTuvT!QiB0 znwY^yh)kzk#qgM8kFaVsq4gbLd*T!b5-1$Ay)nXdm*>JESwo@e9)> zGl~Su(%+YDsSt$SOe0f|ui7Zc5MIu7duwxidb%y;W@7r6&V z-b6(SvyI!loSK>v_SIowVVPTXJI%w>0?sPF52=(wpJm?FmT%Tx&v67swYaeGJ}IfD z+n@97*|V`#zH}2yT~?ZygJ*q@7@-gPPmYJQ`>@l<5bUPA#XAb3vQYN|mj#DfTwENM zBQY^Ckp`-Kxp4fYvyW0zQyb(Eu~n zVY(Z2x1}Wq7705ddd3TOBDsR;y?Y7-1}ch$-vOT8%+Vt>`YVtAiaN9XvJiE=UO+g~ zYHn^0l#r0X;Plr!+er>i6QiTeqoeO1eSF&(DgJ872|+@uOu7mzrYTgJztq&^n|?cK z>-b29{cU-9Ipu_oyL1eO=jgusckWz#Q&MCW`-==AGGxHxc^LhYRnDrmx(j^*?DqY_#YqfZ5@pr{ZSV%a>d$3z1$q zQY;qcG&z|^SVZIvJi)pLUPSHwy?f2MP131;NBC2Ui#wT>Q{ja(OXr?rOz+%zv~zbk z6Mk?er-PahACP_=j0^n)sR2QvFF_nZyiTDJ``;YO!bFH#g*J_R`xS7(l9mj~dIygT z{X8;{Bfvs8a3F{VgDhhuL978W-AjcKg&$$PxSY2)mk(`GAncmx$%D%k+wPxY5M*#K zdZt!r$m}TuDf*eqW49|yAvZVoR*6IU`f^yLZg z=C7eSkBf_|*kG*MVclWZbm4I!n0I9jB;x9PuYFHdcV|`gke*ER{ z^*4SV85Vfnyj;F~ezV4N!}nrr;Q07B#62PtTrS}>`*v%|YFi^JDoVm-;XQ;3I7-UC zTeINkx$Nlj^VzALQ#JTx6s^iv6ES0lVpbkQ%u?&#=&wKWXP{$Kg?*tI$b5|uDtRnD zKG=;B;1s-kpuA$^v#~g~&G&y@vGJ1z;q^g--}E)JwzRX5TAxR-c`TRoh07sP@_*bWDYQ?Ivly0vgmgD$)b?|5f5wQX3iiflnbg8VkD_r2**%usFN z>j!{_ikEv`7r`6D<?3;h?Vnd-PG6D|6~T>u1GepIw$Iaryk+P_3H!EynKAuKBOGm>vQAg&7qf) zH8JMcq zyFzxY+$PAM_y%oZ% zxzO)Tr$~_A7@$)kxVX9sOG{^bOHxTqO|5g4%6w&@t#{Fo^2-rq~4vl@^bWR z2rpV=F3t31HhC=NPS5A%<&Az%R$n89l^aS^dNE5nOdfs6h>+NcE|nd*CW|B`{;}p* zIrPP7StR1i%cTJjonP*@9Ued(9bFQz{Hc!ID?8{7t?gn}iSE&{u^a%N01$k2+pF?y z<|`!w6FDD(eZf9K24Egwo$`6JS-+4i|Fb8WDM z4+UFiW%D_tW@d`^T~^b1TQ(ByYS(mr`E?bd8cdbLYCVx&_@)Gd+rNK5PCNfiWXS|y zouDtHnR}tTc3WqfVYWHMG3m za2w&4fXO`0!g5ni&b#Qi*A<_t+xuy0-;^AN+J0g5`sP}D1(=)KwQKtUkx}LJ&JMm( zY1F@6A-24U@Ly@E`{0oSvp{K6k zwdZl-$+{dN5s}2HuEG-DgO96juWovrU+MQoi}uZ3yqLP zl0$b9Yz)kWb-x!n7y9~{cWYkO=3v2alarFJyn6L&ug^s|5@!c6{VBU&WM_qEg`%S3 z;QZ?MmX@FbT}#Zt>yTDThK+L=ONP&mMLR+b1d)1vJn-SfP%!QHwzibgQXTL;%P|=@ zr>W^_faBq-)<`8Mgv4_y(yQ@k{h?dxbX{Ft9ew#|r=QgG0_}fjo_vo@7u|9?CtCT(>Itgl3_#e67;mb2}Pub0|U1k>g&PjBZ@T< zBK;$*4Vq0|mnN?R@Q38G;BVz7x4F4Fd^;m%Yat1(RAc3QyK9)GoK(>i8!iE z`}Em8w9E=?rAaC=Z3Pxx3txFN>F+$~dDk-fC}G!?0M^#}`WFCcfm`8bLA>^zAaa`2 z2i#~+*FMz{vKw<~CtHMMW#;AGfM~Z?&F_)je^$G|JX~|n#+Tz(qXWKdZD_3lc@YSQ zF|E*qj~_oeC+spZGNMk{g$<`fI^+X=MkvY2Y&CDe9a7TLzCSy3s-ANH7xr~ zNam=;4h~`xb|G1hsB(zm+iRKIiYx00N?{n&j{&O_6BCPV+E!eX5m8aCpFcmIE}d7# zkxohfe&$^BA|Rk{WS(oX1kOO2F^Cy3p_mtBzajr0RNV73tlma(&l6wYu>wj&TqaPy zky+YJ3rL}M$V^bOw6?UwLY>UTJP%JO;-&3&ohd^N4vkwK9r$Z1DihC6MXL%N{SNsV zgQJsPd7GhA^fTjz!1?p(85tSz>269&N@(yxYv=Xl8ByQspX<4D0Sq$uU%siX9v2T{7paSwncdN7#vr73mH!IsW^Gc+OO7Zi;1>aRYREC*MFKx_)>2FiR*pzB~+P+SX) zLki?8%?ur!7F)Zxv5QORdE=@l``13wdGxa$%7o%BR#m~5jtwm3iV4y}fg=N`%4Xb@VNIN*q%&GG3-;_*LqV4JvcQ*peFfbb=^V?X(1GkiENP z8D*|N)fWW%$l;@<_V+S!FGnbs8L&yytz!j4*l?~|T|qxfZKPipfF)&(jvz073{f&B z^IC>VlYycx$8PdRHf31-JMh!Jbh3ra~Whqv2U8G$te_B{lTS1E0zw z?e?R4KYP`u0qd_MvZO9Xcxi+=dS4D?k{k=k+Yvx(LiGEGt7HphXY}JcJv-e~(%wzU zE(Zque5L?$u1Kbx*X&+Iz*&%ZQXTLkgbpZX6$oJ44RSgFnSfA&dY4D(03>oD35gT~ zfqS%MACwyj_^v`Led}5**dXF}T|l<&_n3<3Ey6;lSthX5z_7Z{NAv|_&M*DAi_&0p zE#Mli)k~u-al-;$T!LZsOw7!|u*@-%GplJ&7ap~49-L`7XYQ0H)6nz$id^W@eDp693MQfzE)!^R4=%Yd<8{t*%A%Z6pGI z@7e4y=qf0pnZ@MVv3t~}LAV~*BlD7pSd}pwp~g8BTP4NDemrj(o1TzR9sTBwAlrQ? zW!c1SK8G5L3JHB!Kcio6zK5Jlo8S&a);b`>0*vI*eJ7>boVRR88o4I*)6Cj4Ix04& ztfsa%nzr*!ojf^tMBlBYd?KU79OvNZSm^B3t93Kqqu2AUh=@pmVOL7Z;xI!F`+T;! zd3EvTSj<*(Pe+I8)>G`Wc^y9^54xgG%aSP(R|A8}jirNWDYs&5EO}n@=Dbu-Qbswq z*c!g66Vh9rLb5lR192sbY zA6EUizL@EmUc=_;hR^JIB`eY)kyBtX(OqPF-_*1PctI$-j<6VOYiqYQH^0@whPE6p z-CGUgo!`>VJ>1UdS54>*258j!{d;_EEw1`bwsXK;-e`-Pt!s~+Pq57YHaGVv?Q!U` z7!L5ljG<@>$mhl=$-;M{rEmK5MG67v%*TZF&9v)pw(8>umKB>zMr95vyE}Z$p_qVe z5E#dGETgvCId4Fw3Tl_FX30w}&CRj5TOY1)U#x=9^31EVHgM;Z{(1lua%798ig+eJS2VHrAxaIA8rp? z3rkBq>yD41p^Wpf@+a_Pcrj*&3uD@rS^V$WC81(M10oP@gazV>0H84C`I-D1*MHPO zKzCaJYyd7VWHm?Tb>|4JZ@64oE%ip-{_MH?fe-~lnnofDp&F^(pA8@!#q_JHZ@H^I zCjqTW&fMis>Iz+Lp+ow&hnrEvV0#abKV~~>@3h#enXoVTFfmoufdlZueJiW>BHNMf z{M!%j41F&<2@l8bq>;eLbG{N$?+dK@ru7i(Vby7t57Kw<-X(SWFVzj@PHl_^jnA*f z7v(oRmxo25WfproJ#7h`{p%{{+ly1OI8wgfp<(*D?>~OL)^lIH33Kz|<4s#(Z91u0 znd?0~ej!yl4=)bX$3hacq`_D8WdcGfjgl)1j>XogvC{`)z)JJB`Mx#qQQFHha%+Sd zjs3{JORZ!KVBWD7E4@VSDqO zh-xT{&avOTl7{56jI*zAC>ihHw-0Ep#P<@_NTnLqnAWJ{R zFx)4!9wOP@S}daAEiU9)-8UM-LxE?fdwisW=cKx$Gr0`MZQ8{r3K)R34?oEy9YsEP z)W`Pz(h2G*bg9#X;0he&-*?y!+w`YTHyj9jhE zX!Ui@H~lsoCNC zvSC9te8_Dw#Ih)CdV2cBw!kj0_7;m&YjJ;i!Od-8*$us5v>ruae*!K$r7f-hOu4fCuXE5B#O6FTquyjI9A%Z_z>VP{7Wry3W z1e9q_Qz9h4nS#R=hM{=^=pnpel$Bx)3eKQ)S7p$T)s>=v-}eqEvYAu8{-sZ?;vVjbi;1uR zIQ;nN5IgbHp-B3Pw8i^q&;<+sDgTk9`A$*V2TSc*2}U&uFY_#HT~uyP3%cw+rzprD zQp%;pK}jba6X4%4uboq=__kUNJW9FdBD_E8=fvIIRT^|RL<+NYdXE9%pXW1L3af`T z)HZA^IxfLIeiSr((Gb$kF}e?BEHFawljCv6t5B?t{$#4FKR?SoGqbw!khAR3wsD#w z6L(=Z$7|!Vm%O0zm`skP_V0lZOKsv|*zuA%aH5j)7|cDskZ)Ws$gJhw4fye>xG+(n z0JxaFX&)WkA%lVEBnukW+=Kq~VA}}s9PioH6BX5tUC;ShxOsWOr3cHvZPS}|P<;VA zotS+l06vw`0`UGGOKq5Ke(MaPWp8N*^H(vH;1@S^=mKYr)Rd4ZbHtBfM&oRB1wWIS?+8N+p1NZz3WN6OdmQdWID)iIynKnc!1YzVT@6xca;DdbXZ5!9F*jfV{ zd`RV|(E>^=E4r0M+*Mm_VLDB5t&q>4{GL$CJ)zSTeHC{WcLqP}3DFnE607=@L}oz7 zTXyTAH(btr%eXKdK!Aj#Bo7P1$aCH?f#FuXe^-9IbQ`>NY7=A zOZS7d>`dwW%M87;l;u9pK0s7iRLVUQ7kdhTB!WWKP&Fgt%X9V!Z4|oNRqYoY1%An8 z_TwI)h!$h%+!au$3xFD};G`*#EF`H*1B!j9FGB0d1?x;7%LMWX9v8Lz4$M0(tJM37 z6~78q3ybuv(SR+5!fqQsjr3bath9(gvjq+D{K)f3MTZ5OKaz){{`pl5&UtRipmDs* zn-Fhy1gdq!I(<;*Ha-+yDB5$&8L}lY2aB^Qv6$*D(}rS-LX*K?$C$e=2T(HxckbM| zW0^tML<_Cu8IgW!{v=s z5&p!96HpDR0x}dYH6K%?f&DHBhz2~25*^qtXqNX_H3F9HY@dNqC74laW3~#d-5gIjO&5&_2@4y+b`1k{5?Zg~fpmj7Wiz4I z)!7L&&)%zI%o>n|@p!z32Cr6HuxtTrRf84*E!-M7P~r;Z@1VH)`c)D3{8cOerRYwV z5D*Xu1iO(LAo`|eD;_ZnU>4`ZNw}?K!3K{w7KiQxVce(8^woh@hW$`(0dPuj`^?|K z2SrgboJo=v$@Dh2x6fai>NfPXlJ&3|7_~fKr zm6@ZXqw)n~iY&p%!!!`*8)6TK2oe=Zn&oqcQJx;I2Uf>%xu&mQSWN8b^3w%WVWV5- zatfiIHQd7Up&Sn`K8`~|6wnXZOkY(9Kijcl8^X3rH zofuT=LRf&(rl;(8UD3x>*f#{95@HSM1lP+qZeW6fNZGN^y%59{pi}4`kv3u7i)h_$ zxo7v0L}pT(rpg_kn0Qigj~6G{tr0#HDhit|>Z_gXyg1;{9$0Ol`@;tBukrB?68I^VRYg1O9 zsY+pI#zrn|7lAB*1BdQGIddcIN)YiN8366zl{XiA;L+U{*@AcPKIv8)z+mvAPU*Mu z714koJr@)(3XFIgY(%0{gclSM2`#Ym0>*~%pgwPmnICNq0i}x_(|;uN_ERFns1-|X zs20b^#;$`c0a*>~9b-cd781zn=2m2T&HZHA0^ki{8z|JgOK)z!9&GUBzqZtdN(Lf< zR-Ri*K&zTJsIRsGD7Sz?C5lbd4A*S{HuEA6OzCQCiMs-^kp0Bm*iJI4EZIpZ3M5Ny z;~q2V?>S_%Mqc1 z)j?Q;;0844aHEcOu?uYedW)x8!8TEbZlr)OVi>M2F$)@|qEqxZxKF z`0;P4ndK=TKguo}4*a3j_OLp6weCi+_qYUujqnhO!i?~5!o%^|OdWROk71{uRQ3>X z9uV~Net@leqq)rVpV(Z6{Ucvm-O>UM15g}x?6Mix17m&rLwqrN zRbq$JOux}n@P~JPJ1V|RaYIuxLeBXi6FxpTLxghn%}$01N$X;?&ji%0ee7!vHY6;p zE+;Lrdo)3Q5Ga2zo89E4s0;4J7YGIelmrzX0EC8t!$CVEd&@44B1y#BeXb}j4A9Km zw_-g75GGKryDqQ^l2I@tdxBlq!b7)yyDpcl)saKvdUapF!k)(EF~sXpX!^d8y315A z|1mW$9sE@kyLjCR^xp>&i~OM%uob{Dh?m|W4bdyoAWqNKm&b*$M}ZL>9@pEmd$-WJ zb8!zJl3m0iSnng_DAetzq_OXU2(1p4Hw^diULP$98bt83Y27t&?TP+02}si=28HPm zAEC;NY_%kliJkl8uLl^DDEbGEL0&_6tHNF9-7|)a`C-b4OhgJ;qsqlPyC*hG9KoQi zFgE_etalyk9kAcvC!f_(RN2ggt5_wT<0HSZu< zl5`u*ya4dlZG4GcZL_liV3Yu!Cv0F-7*@*nua(jw0xSbh0I~zpIYJD)YVux&oxLu{ zrn99E)&V$uwPI0v`lhi0Q~+seZvFz6B#T@yJT~%p8C)nNE^bPj`2pq_R5f+RXTnkP z8sZ%yRl~bets?DQ02q^|(WUIarUxPIZ63mtP!b>T6Ucl!dwU)x|C8_^2M4v~y@+^V z?Y^6OdKveG-W*xXzIBO~gUFcxpoPH~>ff@BxjM)mSE(|Eg@rrITni!Ze;9|02+99( zIU^7Ki4z2flQf~UKs5mphieYpA$yBBrK5E#^806r1(;+>PXSbX=z>t50rUn3^m0@S z`5?amS$9oY8EO+`Z)CgWKaN;xW^R5pvwSTDh^d~wPr`+UZM*2CD(~+?`VWMERb6$6 z3u6qD1AxZUbDXO8B1|f`R5`CE6Lo`KQ zOd+1}=6GGH-bo=Pi`M`d!k!^S;n?ZJNT7xoGo)mQueGW4B}ak9k^6_q=etXW_zhL> z1lPb3n61{fHgq-uuj`q^B3@?XNl3jW>j1lA5WdhYS^%lk_L*>h(4oRE;<1m1k*vvm zApzj1upFQ&O>o`CkxQ`enp@w5C&q%EvL_E2{sGpo5win1BbCDbp1e8}d}y@GI1d1F zKx9akVO^~%JmbElrGphiqbS@{I7f!|bx%QLv8G8a7W@a%cr-s2quC@(fj6Lp`4X0r zN`pOEmh&#(a}VuBDz!`9;=;K3WF*GUjGZXkiBX63B~$^M_wXVH9igvc=T)swxxRVnG|04l=)P}L8V2JS4Op(%y}r$aAo~ zR#pon&cCPau=n5Qf9%-Kyv^vSJh8D{_$M)n?!+%I%s;_=r`|v+=K*420@~43wBZSv z954-yLl+nTtWjfEfB{HC_GOA*v{t?46-?44@lz;|RrdEAT;=-mlv-AZ zsTClK$6~7fknU66eL$v6051tqK#|EfY6q~v%R!}qP9>ymVd3zS_@WRR*bQvxiIxFs z18O8xE|r6=E1M_fU_m*FhBL3ypJ}quX0;mJv+J91dE<)ng9N>EvW(G(Xnj$QNZW^( zFJ9b(y-l>3($owqF$9wSI6y+LNZ3S#0;IFtef_yliO=`eR<4bnnPoEr19sEek2dEa zXu>rrYssc34;T*c0GxppuzcFujTzW@3ul`e7|1|H3B?_IDa`UGnES?E>3uUQRJow` zqzOH4cu|PSo?pm_xA~yqz_HqkX;m}JCBTn5wR0iJS8tgKo&K@O$r~mnN#c=*JND&a zD|~`Ue6HDQk;||j<`bWuZqdPV;z&g7+>p*K4UI$~iUClC%gx8vali&A=#GO{>>K=i zjPTP1IyylB9Xt+wO#phqS`1s4vyiI4saV+SGV$E~DoC;KV81`D#M25MTDBRy`vm44 z)q);e0_DWA;^ZAAnah*lB zNl>G*qJI&MAPBYxzNBQiqYecMe3W{| z`%f3sf3KzG-(SVr2IxIHn$^}(R$;kwr}$E4j|Krb=o<3wx1L7ZGzOdD!@@&4x5~}p zz{b`_Gj#h6mG;sqfxk(>Oax)d)~8F*)(~Pg$N-x*i<{B&N`8Mi-mue-(PLe;pYYoo zylPI)&51A1Hh;b|5=+>J_LWpn9`3Yq29A>)7*`%pB_Kro-y?VpyDJWvAHuE>I1ew9PI zl(Dm@)7j$h9+kdFd#7OWye`svdYs9#71jiiXkm{-1ZJ#nd$SMK76;z_dnh%voV5TZ zNo$J}TsW)J-%rri78~r=hR(f_`y-2gwa-ATY_E}CI$H)BWN0!G^(BKrEdVJH<=EQ- z2eKbYYSvT~%+1-@u59N%6atpTMCs1myYnjr4pX<*!%d>Ip_L%UdH9$sNKNKn-iAZH zu#HxJSX^`D4s8dB`hpY>g0iU%B)(I_!^6&2XJCVQ#zM5m?v?xRpYrR85teU6A!!bm zrGplt++}h6c~q*V4ebLx?bE1Wd;T;Z@^-cxB(!Lc720S5YTJ8tp?qu5RASD$8^I0z zV!r5)MHrq%Se4@m3*)JoCpUn5J;63Yk8cz0Wi@-{Zn_O5AM;&8c z08uy%r$K?p@C^D_{ z?4E7WDapUCBCz#A65KX3;gPANBKYKRU(een}YfW zgc;($FR1wSFs>EV`F#0u8DzL1+<7CH0kV)~*9$Q7;#icyUyTQW3n;=MTA+eC@qKR< zBBkAL!8*O#Y4QUi>MUIl5ZZz6pe_rt=%VflI&r1@fo+=Bkym4&6a>8$RDr0#1>^zH z>|!fo*)3+(E9N*IDd{oYUF7@=NU^InZBVlLR|EExTxE{ z{rihV^;X=ZLxO|f=jYq^K1c+WEQqdB;^RNNn}hBTo>wn-gyGpGPy=!#Bzy15l7az; z@mF692Hw@d^W~AXV-CaAwr(yiw_snJ+V9f2)zLjL8qL@rhPJUbiJ(GXkhkPXnhYw*A-YS zzkc#$ch}2^Lq{Y$IFe03b*X_BCQ2Og*r2`#TJ`;ffZ~*#bT+8@=&62y40~RgR{7{P zho9(*yV@w)Ulj752CdKW$3XlN1Q@r^Z-PAAA>hPk^6;S3#Lj}Lt@`uplexozFv{*2 zXRh!tkBwh!U2oQX+Rq9L=lAo+fp*@Z>H#~w0#!x90Ymi$`7x9mVr_RbDo;be* z__S#KY9oIa=vIaUG07<@ipxEYF+!q+SRoTE8UR@ffS<i5y(0XkNt^ex5;%Hw?YYCM1zU;t3pU}T%KuE2By->MNPN|LzJ0iOK%K=*TwSlMw(*6etsp7Bt15N z4^mt+M-W#nB=Eb}N?~}=#1cyf4YVYkqt_PC_CoJU>7rp&z{x(yBab(KL#+y;QFZCU zs#UG)1TY8T^XDyC$=T(A?>bCH0R>e8G^3zW8^Sa+@-81el@$$|H9!|2c)Mw2G*o&# z8+;KnMoLhkUjKzQ8@^&Z_6YhCdI)hK#X_4@hdJf}q`alNdE>^1hjy_g&uad(P@>}g z+ZDEVzd!@sCX5BD$UKmcZgy2{Mu-ckfG`+Z5#nIm1}ru-G*q6_0BNr&`Z%9-VKW(o z`jY(d61N@i-1!v67OA5AQ@rUMl##SW<;!I=I0Ed(HpIq5E1mry@c<6(MI8~=7k~uv zRsro<0N3%{oS4rjZftCXH&s%!AzvTYtVn@}!Jx-LnNEF|(4AmM{!pfqM1BQ^0_ITAYE1QIqbT#3V!jiIg_kjBj;I8k?A)LR@HN1X>0a z?@|9so&=>o#6}XQ;!8+Rs%W?CJ5cIE7o_R8#A}^dx4l8C-U_`*03M6eIRVmyKdyl} zLtA0M+~IL*umiRJ0Wbn=n(#sx)J_$Qf|TOO_qEysOk)i0_%oDJffTdZ5ySO@_spb( z>~}10;MpU9r&8nNF}G=-#n6D-ufaFTZnpoUd{{mO7P!0e9 literal 0 HcmV?d00001 diff --git a/docs/codegen.md b/docs/codegen.md new file mode 100644 index 0000000..f085309 --- /dev/null +++ b/docs/codegen.md @@ -0,0 +1,49 @@ +Codegen for TL1 and TL2 +------------------------ + +codegen_tl1.py and codegen_tl2.py are using params to generate kernel codes in different devices to achieve fastest performance for TL1 and TL2. + +We cutting weight into multiple compute blocks to best utilize hardware capabilities. + +### Example +bitnet_b1_58-large: + +- Make sure Mamtul kernels shapes \ +For example, bitnet_b1_58-large Matmul kernel shapes are:\ +[1536, 4096]\ +[1536, 1536]\ +[4096, 1536] + +- Make sure each BM, BK, bm for each kernel to meet the requirements below +- Generate codes\ +For example, for bitnet_b1_58-large, we can gencode like: + +```bash +# For TL1 +python utils/codegen_tl1.py --model bitnet_b1_58-large --BM 256,128,256 --BK 128,64,128 --bm 32,64,32 + +# For TL2 +python utils/codegen_tl2.py --model bitnet_b1_58-large --BM 256,128,256 --BK 96,192,96 --bm 32,32,32 +``` + +### TL1: +![TL1](../assets/tl1.png) + +For TL1, we cut weight into M / BM weights, each weight shape is (BM, K). Then we cut weight into K / BK weights, each weight shape is (BM, BK). As for (BM, BK) weight, we cut it the same way into (bm, compute_num / bm) compute blocks, and finish computing in it. + +Thus, we need to make sure +- M % BM == 0 +- K % BK == 0 +- BM % bm == 0 +- bm choose in [32, 64] + +### TL2: +![TL2](../assets/tl2.png) + +For TL2, things got a little more complicated. Due to TL2 needs BK % 6 == 0, we need to split K into threeK and twoK, in which compute in TL2 for (M, threeK), compute in TL1 for (M, two_K). + +Thus, we needs to make sure +- M % BM == 0 +- K % BK % 32 == 0 +- BM % bm == 0 +- bm choose in \[32\] \ No newline at end of file diff --git a/include/ggml-bitnet.h b/include/ggml-bitnet.h new file mode 100644 index 0000000..3f8571c --- /dev/null +++ b/include/ggml-bitnet.h @@ -0,0 +1,49 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __ARM_NEON +#include +typedef float32_t bitnet_float_type; +#else +typedef float bitnet_float_type; +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +struct bitnet_tensor_extra { + int lut_scales_size; + int BK; + int n_tile_num; + uint8_t * qweights; + bitnet_float_type * scales; +}; + +GGML_API void ggml_bitnet_init(void); +GGML_API void ggml_bitnet_free(void); +// src0->type == Q4_0/IQ2_XXS/IQ3_XXS +// bitnet.cpp currently only supports BitNet quantization or GPTQ-like quantization (only scales, without zeros) +// If use i-quantization gguf models, the results will be wrong +// TODO: add customized block types Q2_0/Q3_0 +GGML_API bool ggml_bitnet_can_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, const struct ggml_tensor * dst); +GGML_API size_t ggml_bitnet_mul_mat_get_wsize(const struct ggml_tensor * src0, const struct ggml_tensor * src1, const struct ggml_tensor * dst); +GGML_API void ggml_bitnet_mul_mat_task_init(void * src1, void * qlut, void * lut_scales, void * lut_biases, int n, int k, int m, int bits); +GGML_API void ggml_bitnet_mul_mat_task_compute(void * src0, void * scales, void * qlut, void * lut_scales, void * lut_biases, void * dst, int n, int k, int m, int bits); +GGML_API void ggml_bitnet_transform_tensor(struct ggml_tensor * tensor); +GGML_API int ggml_bitnet_get_type_bits(enum ggml_type type); +GGML_API void ggml_bitnet_set_n_threads(int n_threads); +#if defined(GGML_BITNET_ARM_TL1) +GGML_API void ggml_qgemm_lut(int m, int k, void* A, void* LUT, void* Scales, void* LUT_Scales, void* C); +GGML_API void ggml_preprocessor(int m, int k, void* B, void* LUT_Scales, void* QLUT); +#endif +#if defined(GGML_BITNET_X86_TL2) +GGML_API void ggml_qgemm_lut(int bs, int m, int k, int BK, void* A, void* sign, void* LUT, void* Scales, void* LUT_Scales, void* C); +GGML_API void ggml_preprocessor(int bs, int m, int three_k, int two_k, void* B, void* LUT_Scales, void* Three_QLUT, void* Two_QLUT); +#endif + +#ifdef __cplusplus +} +#endif diff --git a/media/benchmark.png b/media/benchmark.png new file mode 100644 index 0000000000000000000000000000000000000000..615ac249e3a365066543ed27c48afb9940b99769 GIT binary patch literal 37388 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�b)_5n1mV&sR{G}AM{1Amz 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%0A|9(PP9^fShGo|^zbO7W5ZGv_53n>uKrZ(Q_J6p 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

PyI{e;WL4P@MR#Xjw0y1gA-!pPPo)WO&13 zk;(%l123ZlDTq~Ap=9PaInbd?GJ{GOV=;2d&#l$@dgJ>hZ1TQLGrj|7oHa#GV$-SD|m`7x2|FP{eni1twd2L3u=FkQ}i&D$4*a4~0!Pjuiqk zOB9lSx&$_u86y|p_i_&mf*^79JF~8O4kr?uR9?TN!~mk=Z4Y+}3hE#5pFt6b?-e}+ zlOY5LKpH!_ffw$HM|;K8ru-m6d(Cc^utag{T8 zk%vv5^Vxi<(9Q`-mpIzPJ06mf$W}0o#K3M8zyBQJS)K~7q!kxXZf)QQQ%+MTkGpa< z_^5c}cye~`)W^!%<~Db;W}7tRE;h6wQAOTJ&doxJx{Cg0F9l5IbcwWk&n}8aQ{i<^KH^OKfV$@_ zu=$V!g$CL?=-7Y$=;FUdkAjK_ar|)1KT)hYVNp2RmPqtx4#9P@AV$w78p;>$Z{VNq zeT@(@|K+-y%PCV+0^%8?-?#ee@XA~7nCGSI6@BEp=BUAW3aYv#+uLr^E9IFC%H(3- zj>Z@@*>qmzt!4mQa(q~dv}(YSxumGc~aA!HGsXWE;LNhvO0YuBeNOuQC#PY z)4^7KB{4Cx|8uEWQYsfXvR(kkp}8~GZ;)EFQq1FKG@*{UgWNqW1qpfJKbb}=(Salp z$ZpJc|EKiC*0rd|UPu%kaycnMHsn)wB9+=Rh)((7akPc#?qe(Y9S;npP3{KBY;#y@ zjY*tY(wCfjzLzQW!QW1BE=G0#50bi5O-p?5+>EkDLZVlVUS_81aYT9!(dzat2+HqX zxI}Ju6__3fPDjy!A)oj-&m%A7gfui(Z`rt2e;HmXMX|aW$H*=54FjV(GY7S7Ai+ga zHpZMmL0g#I?S_`bL&OyPe zCB1urr|M-wf9Jfk*lf^fCq&uaHv@1~w|oT{P0W7bXKjkOOi+I%YTKQ)=B>#8q z^wbRkFPYsq$o(o^?Ro_?;9mlu6h^qP+F(nmgyCo?!r?o71aF6lt7b>;&dIQ|y_VG# zKE4%WsD1#&$ErjTEEw#OddTj*sYlwNu2kQT=u{6t;ti}8`es`&u`CtsvWmM<`c5F$ z)Ws^r@H`+e{$m#1R=;H#86t*jtv#;<<%=AEp(nF7(*~1js}quLerRqv+)n*ge%j7SV=e5X_M^Gg+cuxpyDAEqZg6V@b=%L%Ukx%3{YEgdsr&gL!$Z@F^w2!xUde&1 zMxuTd1a@~AJ6Y}sZ(iK_E`5yuxTeMV&-;lMDX*YTeSxnYA~{+I&7T`>>!F;W1k>rL7gOup8zq+6{6tkm?fyj9y(PM4}XQK+$O)%OwP z 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®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

nuRBf|nxP{GP{2!?p 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

yQ)@F>$YN?|NFhEtj2=JqRo1f%;ZUb& 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

{134ypj<;Ojy+Svt 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

jEyS-6>TXW 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:C@gp|!Rrhh95yaVRoJ;Y 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 om)g7{Im2k; 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 z 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 v&rgCl)Pt(IOja +inline void lut_ctor(int8_t* qlut, bitnet_float_type* b, bitnet_float_type* lut_scales) {{ +#ifdef __ARM_NEON + int16x8_t vec_lut[16]; + float32_t scales = *lut_scales; + uint8_t tbl_mask[16]; + tbl_mask[0] = 0; + tbl_mask[1] = 2; + tbl_mask[2] = 4; + tbl_mask[3] = 6; + tbl_mask[4] = 8; + tbl_mask[5] = 10; + tbl_mask[6] = 12; + tbl_mask[7] = 14; + tbl_mask[8] = 1; + tbl_mask[9] = 3; + tbl_mask[10] = 5; + tbl_mask[11] = 7; + tbl_mask[12] = 9; + tbl_mask[13] = 11; + tbl_mask[14] = 13; + tbl_mask[15] = 15; + uint8x16_t tbl_mask_q = vld1q_u8(tbl_mask); +#pragma unroll + for (int k = 0; k < act_k / 16; ++k) {{ + float32x4x2_t vec_bs_x0 = vld2q_f32(b + k * 16); + float32x4x2_t vec_bs_x1 = vld2q_f32(b + k * 16 + 8); + float32x4_t vec_f_0 = vmulq_n_f32(vec_bs_x0.val[0], scales); + float32x4_t vec_f_1 = vmulq_n_f32(vec_bs_x0.val[1], scales); + float32x4_t vec_f_2 = vmulq_n_f32(vec_bs_x1.val[0], scales); + float32x4_t vec_f_3 = vmulq_n_f32(vec_bs_x1.val[1], scales); + int32x4_t vec_b_0 = vcvtnq_s32_f32(vec_f_0); + int32x4_t vec_b_1 = vcvtnq_s32_f32(vec_f_1); + int32x4_t vec_b_2 = vcvtnq_s32_f32(vec_f_2); + int32x4_t vec_b_3 = vcvtnq_s32_f32(vec_f_3); + int16x4_t vec_b16_0 = vmovn_s32(vec_b_0); + int16x4_t vec_b16_1 = vmovn_s32(vec_b_1); + int16x4_t vec_b16_2 = vmovn_s32(vec_b_2); + int16x4_t vec_b16_3 = vmovn_s32(vec_b_3); + int16x8_t vec_bs_0 = vcombine_s16(vec_b16_0, vec_b16_2); + int16x8_t vec_bs_1 = vcombine_s16(vec_b16_1, vec_b16_3); + vec_lut[0] = vdupq_n_s16(0); + vec_lut[0] = vec_lut[0] - vec_bs_0; + vec_lut[0] = vec_lut[0] - vec_bs_1; + vec_lut[1] = vdupq_n_s16(0); + vec_lut[1] = vec_lut[1] - vec_bs_0; + vec_lut[2] = vdupq_n_s16(0); + vec_lut[2] = vec_lut[2] - vec_bs_0; + vec_lut[2] = vec_lut[2] + vec_bs_1; + vec_lut[3] = vdupq_n_s16(0); + vec_lut[3] = vec_lut[3] - vec_bs_1; + vec_lut[4] = vdupq_n_s16(0); + vec_lut[5] = vec_bs_1; + vec_lut[6] = vec_bs_0; + vec_lut[6] = vec_lut[6] - vec_bs_1; + vec_lut[7] = vec_bs_0; + vec_lut[8] = vec_bs_0; + vec_lut[8] = vec_lut[8] + vec_bs_1; + Transpose_8_8(&(vec_lut[0]), &(vec_lut[1]), &(vec_lut[2]), &(vec_lut[3]), + &(vec_lut[4]), &(vec_lut[5]), &(vec_lut[6]), &(vec_lut[7])); + Transpose_8_8(&(vec_lut[8]), &(vec_lut[9]), &(vec_lut[10]), &(vec_lut[11]), + &(vec_lut[12]), &(vec_lut[13]), &(vec_lut[14]), &(vec_lut[15])); +#pragma unroll + for (int idx = 0; idx < 8; idx++) {{ + int8x16_t q0_s = vqtbl1q_s8(vreinterpretq_s8_s16(vec_lut[idx]), tbl_mask_q); + int8x8_t q0_low = vget_low_s8(q0_s); + int8x8_t q0_high = vget_high_s8(q0_s); + int8x16_t q1_s = vqtbl1q_s8(vreinterpretq_s8_s16(vec_lut[idx + 8]), tbl_mask_q); + int8x8_t q1_low = vget_low_s8(q1_s); + int8x8_t q1_high = vget_high_s8(q1_s); + vst1_s8(qlut + k * 16 * 8 * 2 + idx * 16 * 2, q0_high); + vst1_s8(qlut + k * 16 * 8 * 2 + idx * 16 * 2 + 8, q1_high); + vst1_s8(qlut + k * 16 * 8 * 2 + idx * 16 * 2 + 16, q0_low); + vst1_s8(qlut + k * 16 * 8 * 2 + idx * 16 * 2 + 24, q1_low); + }} + }} +#endif +}} + +static bool is_type_supported(enum ggml_type type) {{ + if (type == GGML_TYPE_Q4_0 || + type == GGML_TYPE_TL1) {{ + return true; + }} else {{ + return false; + }} +}} +#include + +#define BM14336_4096 256 +#define BBK14336_4096 128 +inline void tbl_impl_14336_4096(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __ARM_NEON + const int KK = BBK14336_4096 / 2; + const uint8x16_t vec_mask = vdupq_n_u8(0x0f); + const int8x16_t vec_zero = vdupq_n_s16(0x0000); + int8x16_t vec_lut[2 * KK]; + int16x8_t vec_c[8]; +#pragma unroll + for (int k = 0; k < 2 * KK; k++) { + vec_lut[k] = vld1q_s8(lut + k * 16); + } + +#pragma unroll + for (int i = 0; i < BM14336_4096; i += 64) { + #pragma unroll + for (int i=0; i<8; i++) { + vec_c[i] = vandq_s16(vec_c[i], vec_zero); + } + +#pragma unroll + for (int k = 0; k < KK / 2; k++) { + + uint8x16_t vec_a_0 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 0 * 16); + uint8x16_t vec_a0_top = vshrq_n_u8(vec_a_0, 4); + uint8x16_t vec_a0_bot = vandq_u8(vec_a_0, vec_mask); + int8x16_t vec_v_0_left_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 0], vec_a0_top); + int8x16_t vec_v_0_left_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 1], vec_a0_top); + int8x16_t vec_v_0_right_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 2], vec_a0_bot); + int8x16_t vec_v_0_right_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 3], vec_a0_bot); + int8x16x2_t vec_v_left_0 = vzipq_s8(vec_v_0_left_tmp1, vec_v_0_left_tmp0); + int8x16x2_t vec_v_right_0 = vzipq_s8(vec_v_0_right_tmp1, vec_v_0_right_tmp0); + vec_c[0] += vec_v_left_0.val[0]; + vec_c[0] += vec_v_right_0.val[0]; + vec_c[1] += vec_v_left_0.val[1]; + vec_c[1] += vec_v_right_0.val[1]; + + uint8x16_t vec_a_1 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 1 * 16); + uint8x16_t vec_a1_top = vshrq_n_u8(vec_a_1, 4); + uint8x16_t vec_a1_bot = vandq_u8(vec_a_1, vec_mask); + int8x16_t vec_v_1_left_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 0], vec_a1_top); + int8x16_t vec_v_1_left_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 1], vec_a1_top); + int8x16_t vec_v_1_right_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 2], vec_a1_bot); + int8x16_t vec_v_1_right_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 3], vec_a1_bot); + int8x16x2_t vec_v_left_1 = vzipq_s8(vec_v_1_left_tmp1, vec_v_1_left_tmp0); + int8x16x2_t vec_v_right_1 = vzipq_s8(vec_v_1_right_tmp1, vec_v_1_right_tmp0); + vec_c[2] += vec_v_left_1.val[0]; + vec_c[2] += vec_v_right_1.val[0]; + vec_c[3] += vec_v_left_1.val[1]; + vec_c[3] += vec_v_right_1.val[1]; + + uint8x16_t vec_a_2 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 2 * 16); + uint8x16_t vec_a2_top = vshrq_n_u8(vec_a_2, 4); + uint8x16_t vec_a2_bot = vandq_u8(vec_a_2, vec_mask); + int8x16_t vec_v_2_left_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 0], vec_a2_top); + int8x16_t vec_v_2_left_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 1], vec_a2_top); + int8x16_t vec_v_2_right_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 2], vec_a2_bot); + int8x16_t vec_v_2_right_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 3], vec_a2_bot); + int8x16x2_t vec_v_left_2 = vzipq_s8(vec_v_2_left_tmp1, vec_v_2_left_tmp0); + int8x16x2_t vec_v_right_2 = vzipq_s8(vec_v_2_right_tmp1, vec_v_2_right_tmp0); + vec_c[4] += vec_v_left_2.val[0]; + vec_c[4] += vec_v_right_2.val[0]; + vec_c[5] += vec_v_left_2.val[1]; + vec_c[5] += vec_v_right_2.val[1]; + + uint8x16_t vec_a_3 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 3 * 16); + uint8x16_t vec_a3_top = vshrq_n_u8(vec_a_3, 4); + uint8x16_t vec_a3_bot = vandq_u8(vec_a_3, vec_mask); + int8x16_t vec_v_3_left_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 0], vec_a3_top); + int8x16_t vec_v_3_left_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 1], vec_a3_top); + int8x16_t vec_v_3_right_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 2], vec_a3_bot); + int8x16_t vec_v_3_right_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 3], vec_a3_bot); + int8x16x2_t vec_v_left_3 = vzipq_s8(vec_v_3_left_tmp1, vec_v_3_left_tmp0); + int8x16x2_t vec_v_right_3 = vzipq_s8(vec_v_3_right_tmp1, vec_v_3_right_tmp0); + vec_c[6] += vec_v_left_3.val[0]; + vec_c[6] += vec_v_right_3.val[0]; + vec_c[7] += vec_v_left_3.val[1]; + vec_c[7] += vec_v_right_3.val[1]; + + } + + int32x4_t vec_v_bot_low_low_0 = vmovl_s16(vget_low_s16(vec_c[0])); + int32x4_t vec_v_bot_low_high_0 = vmovl_high_s16(vec_c[0]); + vst1q_s32(c + i + 0, vld1q_s32(c + i + 0) + vec_v_bot_low_low_0); + vst1q_s32(c + i + 4, vld1q_s32(c + i + 4) + vec_v_bot_low_high_0); + int32x4_t vec_v_bot_low_low_1 = vmovl_s16(vget_low_s16(vec_c[1])); + int32x4_t vec_v_bot_low_high_1 = vmovl_high_s16(vec_c[1]); + vst1q_s32(c + i + 8, vld1q_s32(c + i + 8) + vec_v_bot_low_low_1); + vst1q_s32(c + i + 12, vld1q_s32(c + i + 12) + vec_v_bot_low_high_1); + int32x4_t vec_v_bot_low_low_2 = vmovl_s16(vget_low_s16(vec_c[2])); + int32x4_t vec_v_bot_low_high_2 = vmovl_high_s16(vec_c[2]); + vst1q_s32(c + i + 16, vld1q_s32(c + i + 16) + vec_v_bot_low_low_2); + vst1q_s32(c + i + 20, vld1q_s32(c + i + 20) + vec_v_bot_low_high_2); + int32x4_t vec_v_bot_low_low_3 = vmovl_s16(vget_low_s16(vec_c[3])); + int32x4_t vec_v_bot_low_high_3 = vmovl_high_s16(vec_c[3]); + vst1q_s32(c + i + 24, vld1q_s32(c + i + 24) + vec_v_bot_low_low_3); + vst1q_s32(c + i + 28, vld1q_s32(c + i + 28) + vec_v_bot_low_high_3); + int32x4_t vec_v_bot_low_low_4 = vmovl_s16(vget_low_s16(vec_c[4])); + int32x4_t vec_v_bot_low_high_4 = vmovl_high_s16(vec_c[4]); + vst1q_s32(c + i + 32, vld1q_s32(c + i + 32) + vec_v_bot_low_low_4); + vst1q_s32(c + i + 36, vld1q_s32(c + i + 36) + vec_v_bot_low_high_4); + int32x4_t vec_v_bot_low_low_5 = vmovl_s16(vget_low_s16(vec_c[5])); + int32x4_t vec_v_bot_low_high_5 = vmovl_high_s16(vec_c[5]); + vst1q_s32(c + i + 40, vld1q_s32(c + i + 40) + vec_v_bot_low_low_5); + vst1q_s32(c + i + 44, vld1q_s32(c + i + 44) + vec_v_bot_low_high_5); + int32x4_t vec_v_bot_low_low_6 = vmovl_s16(vget_low_s16(vec_c[6])); + int32x4_t vec_v_bot_low_high_6 = vmovl_high_s16(vec_c[6]); + vst1q_s32(c + i + 48, vld1q_s32(c + i + 48) + vec_v_bot_low_low_6); + vst1q_s32(c + i + 52, vld1q_s32(c + i + 52) + vec_v_bot_low_high_6); + int32x4_t vec_v_bot_low_low_7 = vmovl_s16(vget_low_s16(vec_c[7])); + int32x4_t vec_v_bot_low_high_7 = vmovl_high_s16(vec_c[7]); + vst1q_s32(c + i + 56, vld1q_s32(c + i + 56) + vec_v_bot_low_low_7); + vst1q_s32(c + i + 60, vld1q_s32(c + i + 60) + vec_v_bot_low_high_7); + + } +#endif +} + +int32_t qgemm_lut_14336_4096(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BM14336_4096]; + memset(&(CBits[0]), 0, BM14336_4096 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 4096 / BBK14336_4096; ++k_outer) { + tbl_impl_14336_4096((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK14336_4096 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK14336_4096 / 2 / 2 * BM14336_4096)]))); + } +#pragma unroll + for (int i = 0; i < BM14336_4096; i++) { + ((bitnet_float_type*)C)[i] = (((int32_t*)CBits)[i]) / ((bitnet_float_type*)LUT_Scales)[0] * ((bitnet_float_type*)Scales)[0]; + } + return 0; +}; +#include + +#define BM4096_14336 256 +#define BBK4096_14336 128 +inline void tbl_impl_4096_14336(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __ARM_NEON + const int KK = BBK4096_14336 / 2; + const uint8x16_t vec_mask = vdupq_n_u8(0x0f); + const int8x16_t vec_zero = vdupq_n_s16(0x0000); + int8x16_t vec_lut[2 * KK]; + int16x8_t vec_c[4]; +#pragma unroll + for (int k = 0; k < 2 * KK; k++) { + vec_lut[k] = vld1q_s8(lut + k * 16); + } + +#pragma unroll + for (int i = 0; i < BM4096_14336; i += 32) { + #pragma unroll + for (int i=0; i<4; i++) { + vec_c[i] = vandq_s16(vec_c[i], vec_zero); + } + +#pragma unroll + for (int k = 0; k < KK / 4; k++) { + + uint8x16_t vec_a_0 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 0 * 16); + uint8x16_t vec_a0_top = vshrq_n_u8(vec_a_0, 4); + uint8x16_t vec_a0_bot = vandq_u8(vec_a_0, vec_mask); + int8x16_t vec_v_0_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 0], vec_a0_top); + int8x16_t vec_v_0_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 1], vec_a0_top); + int8x16_t vec_v_0_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 2], vec_a0_bot); + int8x16_t vec_v_0_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 3], vec_a0_bot); + int8x16x2_t vec_v_left_0 = vzipq_s8(vec_v_0_left_tmp1, vec_v_0_left_tmp0); + int8x16x2_t vec_v_right_0 = vzipq_s8(vec_v_0_right_tmp1, vec_v_0_right_tmp0); + vec_c[0] += vec_v_left_0.val[0]; + vec_c[0] += vec_v_right_0.val[0]; + vec_c[1] += vec_v_left_0.val[1]; + vec_c[1] += vec_v_right_0.val[1]; + + uint8x16_t vec_a_1 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 1 * 16); + uint8x16_t vec_a1_top = vshrq_n_u8(vec_a_1, 4); + uint8x16_t vec_a1_bot = vandq_u8(vec_a_1, vec_mask); + int8x16_t vec_v_1_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 4], vec_a1_top); + int8x16_t vec_v_1_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 5], vec_a1_top); + int8x16_t vec_v_1_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 6], vec_a1_bot); + int8x16_t vec_v_1_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 7], vec_a1_bot); + int8x16x2_t vec_v_left_1 = vzipq_s8(vec_v_1_left_tmp1, vec_v_1_left_tmp0); + int8x16x2_t vec_v_right_1 = vzipq_s8(vec_v_1_right_tmp1, vec_v_1_right_tmp0); + vec_c[0] += vec_v_left_1.val[0]; + vec_c[0] += vec_v_right_1.val[0]; + vec_c[1] += vec_v_left_1.val[1]; + vec_c[1] += vec_v_right_1.val[1]; + + uint8x16_t vec_a_2 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 2 * 16); + uint8x16_t vec_a2_top = vshrq_n_u8(vec_a_2, 4); + uint8x16_t vec_a2_bot = vandq_u8(vec_a_2, vec_mask); + int8x16_t vec_v_2_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 0], vec_a2_top); + int8x16_t vec_v_2_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 1], vec_a2_top); + int8x16_t vec_v_2_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 2], vec_a2_bot); + int8x16_t vec_v_2_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 3], vec_a2_bot); + int8x16x2_t vec_v_left_2 = vzipq_s8(vec_v_2_left_tmp1, vec_v_2_left_tmp0); + int8x16x2_t vec_v_right_2 = vzipq_s8(vec_v_2_right_tmp1, vec_v_2_right_tmp0); + vec_c[2] += vec_v_left_2.val[0]; + vec_c[2] += vec_v_right_2.val[0]; + vec_c[3] += vec_v_left_2.val[1]; + vec_c[3] += vec_v_right_2.val[1]; + + uint8x16_t vec_a_3 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 3 * 16); + uint8x16_t vec_a3_top = vshrq_n_u8(vec_a_3, 4); + uint8x16_t vec_a3_bot = vandq_u8(vec_a_3, vec_mask); + int8x16_t vec_v_3_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 4], vec_a3_top); + int8x16_t vec_v_3_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 5], vec_a3_top); + int8x16_t vec_v_3_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 6], vec_a3_bot); + int8x16_t vec_v_3_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 7], vec_a3_bot); + int8x16x2_t vec_v_left_3 = vzipq_s8(vec_v_3_left_tmp1, vec_v_3_left_tmp0); + int8x16x2_t vec_v_right_3 = vzipq_s8(vec_v_3_right_tmp1, vec_v_3_right_tmp0); + vec_c[2] += vec_v_left_3.val[0]; + vec_c[2] += vec_v_right_3.val[0]; + vec_c[3] += vec_v_left_3.val[1]; + vec_c[3] += vec_v_right_3.val[1]; + + } + + int32x4_t vec_v_bot_low_low_0 = vmovl_s16(vget_low_s16(vec_c[0])); + int32x4_t vec_v_bot_low_high_0 = vmovl_high_s16(vec_c[0]); + vst1q_s32(c + i + 0, vld1q_s32(c + i + 0) + vec_v_bot_low_low_0); + vst1q_s32(c + i + 4, vld1q_s32(c + i + 4) + vec_v_bot_low_high_0); + int32x4_t vec_v_bot_low_low_1 = vmovl_s16(vget_low_s16(vec_c[1])); + int32x4_t vec_v_bot_low_high_1 = vmovl_high_s16(vec_c[1]); + vst1q_s32(c + i + 8, vld1q_s32(c + i + 8) + vec_v_bot_low_low_1); + vst1q_s32(c + i + 12, vld1q_s32(c + i + 12) + vec_v_bot_low_high_1); + int32x4_t vec_v_bot_low_low_2 = vmovl_s16(vget_low_s16(vec_c[2])); + int32x4_t vec_v_bot_low_high_2 = vmovl_high_s16(vec_c[2]); + vst1q_s32(c + i + 16, vld1q_s32(c + i + 16) + vec_v_bot_low_low_2); + vst1q_s32(c + i + 20, vld1q_s32(c + i + 20) + vec_v_bot_low_high_2); + int32x4_t vec_v_bot_low_low_3 = vmovl_s16(vget_low_s16(vec_c[3])); + int32x4_t vec_v_bot_low_high_3 = vmovl_high_s16(vec_c[3]); + vst1q_s32(c + i + 24, vld1q_s32(c + i + 24) + vec_v_bot_low_low_3); + vst1q_s32(c + i + 28, vld1q_s32(c + i + 28) + vec_v_bot_low_high_3); + + } +#endif +} + +int32_t qgemm_lut_4096_14336(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BM4096_14336]; + memset(&(CBits[0]), 0, BM4096_14336 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 14336 / BBK4096_14336; ++k_outer) { + tbl_impl_4096_14336((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK4096_14336 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK4096_14336 / 2 / 2 * BM4096_14336)]))); + } +#pragma unroll + for (int i = 0; i < BM4096_14336; i++) { + ((bitnet_float_type*)C)[i] = (((int32_t*)CBits)[i]) / ((bitnet_float_type*)LUT_Scales)[0] * ((bitnet_float_type*)Scales)[0]; + } + return 0; +}; +#include + +#define BM1024_4096 128 +#define BBK1024_4096 64 +inline void tbl_impl_1024_4096(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __ARM_NEON + const int KK = BBK1024_4096 / 2; + const uint8x16_t vec_mask = vdupq_n_u8(0x0f); + const int8x16_t vec_zero = vdupq_n_s16(0x0000); + int8x16_t vec_lut[2 * KK]; + int16x8_t vec_c[8]; +#pragma unroll + for (int k = 0; k < 2 * KK; k++) { + vec_lut[k] = vld1q_s8(lut + k * 16); + } + +#pragma unroll + for (int i = 0; i < BM1024_4096; i += 64) { + #pragma unroll + for (int i=0; i<8; i++) { + vec_c[i] = vandq_s16(vec_c[i], vec_zero); + } + +#pragma unroll + for (int k = 0; k < KK / 2; k++) { + + uint8x16_t vec_a_0 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 0 * 16); + uint8x16_t vec_a0_top = vshrq_n_u8(vec_a_0, 4); + uint8x16_t vec_a0_bot = vandq_u8(vec_a_0, vec_mask); + int8x16_t vec_v_0_left_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 0], vec_a0_top); + int8x16_t vec_v_0_left_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 1], vec_a0_top); + int8x16_t vec_v_0_right_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 2], vec_a0_bot); + int8x16_t vec_v_0_right_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 3], vec_a0_bot); + int8x16x2_t vec_v_left_0 = vzipq_s8(vec_v_0_left_tmp1, vec_v_0_left_tmp0); + int8x16x2_t vec_v_right_0 = vzipq_s8(vec_v_0_right_tmp1, vec_v_0_right_tmp0); + vec_c[0] += vec_v_left_0.val[0]; + vec_c[0] += vec_v_right_0.val[0]; + vec_c[1] += vec_v_left_0.val[1]; + vec_c[1] += vec_v_right_0.val[1]; + + uint8x16_t vec_a_1 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 1 * 16); + uint8x16_t vec_a1_top = vshrq_n_u8(vec_a_1, 4); + uint8x16_t vec_a1_bot = vandq_u8(vec_a_1, vec_mask); + int8x16_t vec_v_1_left_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 0], vec_a1_top); + int8x16_t vec_v_1_left_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 1], vec_a1_top); + int8x16_t vec_v_1_right_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 2], vec_a1_bot); + int8x16_t vec_v_1_right_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 3], vec_a1_bot); + int8x16x2_t vec_v_left_1 = vzipq_s8(vec_v_1_left_tmp1, vec_v_1_left_tmp0); + int8x16x2_t vec_v_right_1 = vzipq_s8(vec_v_1_right_tmp1, vec_v_1_right_tmp0); + vec_c[2] += vec_v_left_1.val[0]; + vec_c[2] += vec_v_right_1.val[0]; + vec_c[3] += vec_v_left_1.val[1]; + vec_c[3] += vec_v_right_1.val[1]; + + uint8x16_t vec_a_2 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 2 * 16); + uint8x16_t vec_a2_top = vshrq_n_u8(vec_a_2, 4); + uint8x16_t vec_a2_bot = vandq_u8(vec_a_2, vec_mask); + int8x16_t vec_v_2_left_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 0], vec_a2_top); + int8x16_t vec_v_2_left_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 1], vec_a2_top); + int8x16_t vec_v_2_right_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 2], vec_a2_bot); + int8x16_t vec_v_2_right_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 3], vec_a2_bot); + int8x16x2_t vec_v_left_2 = vzipq_s8(vec_v_2_left_tmp1, vec_v_2_left_tmp0); + int8x16x2_t vec_v_right_2 = vzipq_s8(vec_v_2_right_tmp1, vec_v_2_right_tmp0); + vec_c[4] += vec_v_left_2.val[0]; + vec_c[4] += vec_v_right_2.val[0]; + vec_c[5] += vec_v_left_2.val[1]; + vec_c[5] += vec_v_right_2.val[1]; + + uint8x16_t vec_a_3 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 3 * 16); + uint8x16_t vec_a3_top = vshrq_n_u8(vec_a_3, 4); + uint8x16_t vec_a3_bot = vandq_u8(vec_a_3, vec_mask); + int8x16_t vec_v_3_left_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 0], vec_a3_top); + int8x16_t vec_v_3_left_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 1], vec_a3_top); + int8x16_t vec_v_3_right_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 2], vec_a3_bot); + int8x16_t vec_v_3_right_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 3], vec_a3_bot); + int8x16x2_t vec_v_left_3 = vzipq_s8(vec_v_3_left_tmp1, vec_v_3_left_tmp0); + int8x16x2_t vec_v_right_3 = vzipq_s8(vec_v_3_right_tmp1, vec_v_3_right_tmp0); + vec_c[6] += vec_v_left_3.val[0]; + vec_c[6] += vec_v_right_3.val[0]; + vec_c[7] += vec_v_left_3.val[1]; + vec_c[7] += vec_v_right_3.val[1]; + + } + + int32x4_t vec_v_bot_low_low_0 = vmovl_s16(vget_low_s16(vec_c[0])); + int32x4_t vec_v_bot_low_high_0 = vmovl_high_s16(vec_c[0]); + vst1q_s32(c + i + 0, vld1q_s32(c + i + 0) + vec_v_bot_low_low_0); + vst1q_s32(c + i + 4, vld1q_s32(c + i + 4) + vec_v_bot_low_high_0); + int32x4_t vec_v_bot_low_low_1 = vmovl_s16(vget_low_s16(vec_c[1])); + int32x4_t vec_v_bot_low_high_1 = vmovl_high_s16(vec_c[1]); + vst1q_s32(c + i + 8, vld1q_s32(c + i + 8) + vec_v_bot_low_low_1); + vst1q_s32(c + i + 12, vld1q_s32(c + i + 12) + vec_v_bot_low_high_1); + int32x4_t vec_v_bot_low_low_2 = vmovl_s16(vget_low_s16(vec_c[2])); + int32x4_t vec_v_bot_low_high_2 = vmovl_high_s16(vec_c[2]); + vst1q_s32(c + i + 16, vld1q_s32(c + i + 16) + vec_v_bot_low_low_2); + vst1q_s32(c + i + 20, vld1q_s32(c + i + 20) + vec_v_bot_low_high_2); + int32x4_t vec_v_bot_low_low_3 = vmovl_s16(vget_low_s16(vec_c[3])); + int32x4_t vec_v_bot_low_high_3 = vmovl_high_s16(vec_c[3]); + vst1q_s32(c + i + 24, vld1q_s32(c + i + 24) + vec_v_bot_low_low_3); + vst1q_s32(c + i + 28, vld1q_s32(c + i + 28) + vec_v_bot_low_high_3); + int32x4_t vec_v_bot_low_low_4 = vmovl_s16(vget_low_s16(vec_c[4])); + int32x4_t vec_v_bot_low_high_4 = vmovl_high_s16(vec_c[4]); + vst1q_s32(c + i + 32, vld1q_s32(c + i + 32) + vec_v_bot_low_low_4); + vst1q_s32(c + i + 36, vld1q_s32(c + i + 36) + vec_v_bot_low_high_4); + int32x4_t vec_v_bot_low_low_5 = vmovl_s16(vget_low_s16(vec_c[5])); + int32x4_t vec_v_bot_low_high_5 = vmovl_high_s16(vec_c[5]); + vst1q_s32(c + i + 40, vld1q_s32(c + i + 40) + vec_v_bot_low_low_5); + vst1q_s32(c + i + 44, vld1q_s32(c + i + 44) + vec_v_bot_low_high_5); + int32x4_t vec_v_bot_low_low_6 = vmovl_s16(vget_low_s16(vec_c[6])); + int32x4_t vec_v_bot_low_high_6 = vmovl_high_s16(vec_c[6]); + vst1q_s32(c + i + 48, vld1q_s32(c + i + 48) + vec_v_bot_low_low_6); + vst1q_s32(c + i + 52, vld1q_s32(c + i + 52) + vec_v_bot_low_high_6); + int32x4_t vec_v_bot_low_low_7 = vmovl_s16(vget_low_s16(vec_c[7])); + int32x4_t vec_v_bot_low_high_7 = vmovl_high_s16(vec_c[7]); + vst1q_s32(c + i + 56, vld1q_s32(c + i + 56) + vec_v_bot_low_low_7); + vst1q_s32(c + i + 60, vld1q_s32(c + i + 60) + vec_v_bot_low_high_7); + + } +#endif +} + +int32_t qgemm_lut_1024_4096(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BM1024_4096]; + memset(&(CBits[0]), 0, BM1024_4096 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 4096 / BBK1024_4096; ++k_outer) { + tbl_impl_1024_4096((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK1024_4096 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK1024_4096 / 2 / 2 * BM1024_4096)]))); + } +#pragma unroll + for (int i = 0; i < BM1024_4096; i++) { + ((bitnet_float_type*)C)[i] = (((int32_t*)CBits)[i]) / ((bitnet_float_type*)LUT_Scales)[0] * ((bitnet_float_type*)Scales)[0]; + } + return 0; +}; +#include + +#define BM4096_4096 128 +#define BBK4096_4096 64 +inline void tbl_impl_4096_4096(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __ARM_NEON + const int KK = BBK4096_4096 / 2; + const uint8x16_t vec_mask = vdupq_n_u8(0x0f); + const int8x16_t vec_zero = vdupq_n_s16(0x0000); + int8x16_t vec_lut[2 * KK]; + int16x8_t vec_c[4]; +#pragma unroll + for (int k = 0; k < 2 * KK; k++) { + vec_lut[k] = vld1q_s8(lut + k * 16); + } + +#pragma unroll + for (int i = 0; i < BM4096_4096; i += 32) { + #pragma unroll + for (int i=0; i<4; i++) { + vec_c[i] = vandq_s16(vec_c[i], vec_zero); + } + +#pragma unroll + for (int k = 0; k < KK / 4; k++) { + + uint8x16_t vec_a_0 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 0 * 16); + uint8x16_t vec_a0_top = vshrq_n_u8(vec_a_0, 4); + uint8x16_t vec_a0_bot = vandq_u8(vec_a_0, vec_mask); + int8x16_t vec_v_0_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 0], vec_a0_top); + int8x16_t vec_v_0_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 1], vec_a0_top); + int8x16_t vec_v_0_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 2], vec_a0_bot); + int8x16_t vec_v_0_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 3], vec_a0_bot); + int8x16x2_t vec_v_left_0 = vzipq_s8(vec_v_0_left_tmp1, vec_v_0_left_tmp0); + int8x16x2_t vec_v_right_0 = vzipq_s8(vec_v_0_right_tmp1, vec_v_0_right_tmp0); + vec_c[0] += vec_v_left_0.val[0]; + vec_c[0] += vec_v_right_0.val[0]; + vec_c[1] += vec_v_left_0.val[1]; + vec_c[1] += vec_v_right_0.val[1]; + + uint8x16_t vec_a_1 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 1 * 16); + uint8x16_t vec_a1_top = vshrq_n_u8(vec_a_1, 4); + uint8x16_t vec_a1_bot = vandq_u8(vec_a_1, vec_mask); + int8x16_t vec_v_1_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 4], vec_a1_top); + int8x16_t vec_v_1_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 5], vec_a1_top); + int8x16_t vec_v_1_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 6], vec_a1_bot); + int8x16_t vec_v_1_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 7], vec_a1_bot); + int8x16x2_t vec_v_left_1 = vzipq_s8(vec_v_1_left_tmp1, vec_v_1_left_tmp0); + int8x16x2_t vec_v_right_1 = vzipq_s8(vec_v_1_right_tmp1, vec_v_1_right_tmp0); + vec_c[0] += vec_v_left_1.val[0]; + vec_c[0] += vec_v_right_1.val[0]; + vec_c[1] += vec_v_left_1.val[1]; + vec_c[1] += vec_v_right_1.val[1]; + + uint8x16_t vec_a_2 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 2 * 16); + uint8x16_t vec_a2_top = vshrq_n_u8(vec_a_2, 4); + uint8x16_t vec_a2_bot = vandq_u8(vec_a_2, vec_mask); + int8x16_t vec_v_2_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 0], vec_a2_top); + int8x16_t vec_v_2_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 1], vec_a2_top); + int8x16_t vec_v_2_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 2], vec_a2_bot); + int8x16_t vec_v_2_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 3], vec_a2_bot); + int8x16x2_t vec_v_left_2 = vzipq_s8(vec_v_2_left_tmp1, vec_v_2_left_tmp0); + int8x16x2_t vec_v_right_2 = vzipq_s8(vec_v_2_right_tmp1, vec_v_2_right_tmp0); + vec_c[2] += vec_v_left_2.val[0]; + vec_c[2] += vec_v_right_2.val[0]; + vec_c[3] += vec_v_left_2.val[1]; + vec_c[3] += vec_v_right_2.val[1]; + + uint8x16_t vec_a_3 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 3 * 16); + uint8x16_t vec_a3_top = vshrq_n_u8(vec_a_3, 4); + uint8x16_t vec_a3_bot = vandq_u8(vec_a_3, vec_mask); + int8x16_t vec_v_3_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 4], vec_a3_top); + int8x16_t vec_v_3_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 5], vec_a3_top); + int8x16_t vec_v_3_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 6], vec_a3_bot); + int8x16_t vec_v_3_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 7], vec_a3_bot); + int8x16x2_t vec_v_left_3 = vzipq_s8(vec_v_3_left_tmp1, vec_v_3_left_tmp0); + int8x16x2_t vec_v_right_3 = vzipq_s8(vec_v_3_right_tmp1, vec_v_3_right_tmp0); + vec_c[2] += vec_v_left_3.val[0]; + vec_c[2] += vec_v_right_3.val[0]; + vec_c[3] += vec_v_left_3.val[1]; + vec_c[3] += vec_v_right_3.val[1]; + + } + + int32x4_t vec_v_bot_low_low_0 = vmovl_s16(vget_low_s16(vec_c[0])); + int32x4_t vec_v_bot_low_high_0 = vmovl_high_s16(vec_c[0]); + vst1q_s32(c + i + 0, vld1q_s32(c + i + 0) + vec_v_bot_low_low_0); + vst1q_s32(c + i + 4, vld1q_s32(c + i + 4) + vec_v_bot_low_high_0); + int32x4_t vec_v_bot_low_low_1 = vmovl_s16(vget_low_s16(vec_c[1])); + int32x4_t vec_v_bot_low_high_1 = vmovl_high_s16(vec_c[1]); + vst1q_s32(c + i + 8, vld1q_s32(c + i + 8) + vec_v_bot_low_low_1); + vst1q_s32(c + i + 12, vld1q_s32(c + i + 12) + vec_v_bot_low_high_1); + int32x4_t vec_v_bot_low_low_2 = vmovl_s16(vget_low_s16(vec_c[2])); + int32x4_t vec_v_bot_low_high_2 = vmovl_high_s16(vec_c[2]); + vst1q_s32(c + i + 16, vld1q_s32(c + i + 16) + vec_v_bot_low_low_2); + vst1q_s32(c + i + 20, vld1q_s32(c + i + 20) + vec_v_bot_low_high_2); + int32x4_t vec_v_bot_low_low_3 = vmovl_s16(vget_low_s16(vec_c[3])); + int32x4_t vec_v_bot_low_high_3 = vmovl_high_s16(vec_c[3]); + vst1q_s32(c + i + 24, vld1q_s32(c + i + 24) + vec_v_bot_low_low_3); + vst1q_s32(c + i + 28, vld1q_s32(c + i + 28) + vec_v_bot_low_high_3); + + } +#endif +} + +int32_t qgemm_lut_4096_4096(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BM4096_4096]; + memset(&(CBits[0]), 0, BM4096_4096 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 4096 / BBK4096_4096; ++k_outer) { + tbl_impl_4096_4096((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK4096_4096 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK4096_4096 / 2 / 2 * BM4096_4096)]))); + } +#pragma unroll + for (int i = 0; i < BM4096_4096; i++) { + ((bitnet_float_type*)C)[i] = (((int32_t*)CBits)[i]) / ((bitnet_float_type*)LUT_Scales)[0] * ((bitnet_float_type*)Scales)[0]; + } + return 0; +}; + +template +void preprocessor_k(void* B, void* LUT_Scales, void* QLUT) {{ + partial_max_reset((&(((bitnet_float_type*)LUT_Scales)[0]))); + per_tensor_quant(K, (&(((bitnet_float_type*)LUT_Scales)[0])), (&(((bitnet_float_type*)B)[0]))); + + lut_ctor((&(((int8_t*)QLUT)[0])), (&(((bitnet_float_type*)B)[0])), (&(((bitnet_float_type*)LUT_Scales)[0]))); +}} +void ggml_preprocessor(int m, int k, void* B, void* LUT_Scales, void* QLUT) { + if (m == 14336 && k == 4096) { + preprocessor_k<4096>(B, LUT_Scales, QLUT); + } + else if (m == 4096 && k == 14336) { + preprocessor_k<14336>(B, LUT_Scales, QLUT); + } + else if (m == 1024 && k == 4096) { + preprocessor_k<4096>(B, LUT_Scales, QLUT); + } + else if (m == 4096 && k == 4096) { + preprocessor_k<4096>(B, LUT_Scales, QLUT); + } +} +void ggml_qgemm_lut(int m, int k, void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + if (m == 14336 && k == 4096) { + qgemm_lut_14336_4096(A, LUT, Scales, LUT_Scales, C); + } + else if (m == 4096 && k == 14336) { + qgemm_lut_4096_14336(A, LUT, Scales, LUT_Scales, C); + } + else if (m == 1024 && k == 4096) { + qgemm_lut_1024_4096(A, LUT, Scales, LUT_Scales, C); + } + else if (m == 4096 && k == 4096) { + qgemm_lut_4096_4096(A, LUT, Scales, LUT_Scales, C); + } +} + +void ggml_bitnet_transform_tensor(struct ggml_tensor * tensor) { + if (!(is_type_supported(tensor->type) && tensor->backend == GGML_BACKEND_TYPE_CPU && tensor->extra == nullptr)) { + return; + } + + int k = tensor->ne[0]; + int m = tensor->ne[1]; + const int lut_scales_size = 1; + const int scales_size = 1; + int bk = 0; + int bm = 0; + + if (m == 14336 && k == 4096) { + bm = BM14336_4096; + bk = BBK14336_4096; + } +else if (m == 4096 && k == 14336) { + bm = BM4096_14336; + bk = BBK4096_14336; + } +else if (m == 1024 && k == 4096) { + bm = BM1024_4096; + bk = BBK1024_4096; + } +else if (m == 4096 && k == 4096) { + bm = BM4096_4096; + bk = BBK4096_4096; + } + + const int n_tile_num = m / bm; + const int BK = bk; + uint8_t * qweights; + bitnet_float_type * scales; + + scales = (bitnet_float_type *) aligned_malloc(sizeof(bitnet_float_type)); + qweights = (uint8_t *) tensor->data; + float * i2_scales = (float * )(qweights + k * m / 4); + scales[0] = (bitnet_float_type) i2_scales[0]; + + tensor->extra = bitnet_tensor_extras + bitnet_tensor_extras_index; + bitnet_tensor_extras[bitnet_tensor_extras_index++] = { + /* .lut_scales_size = */ lut_scales_size, + /* .scales_size = */ scales_size, + /* .n_tile_num = */ n_tile_num, + /* .qweights = */ qweights, + /* .scales = */ scales + }; +} +#endif \ No newline at end of file diff --git a/preset_kernels/Llama3-8B-1.58-100B-tokens/bitnet-lut-kernels-tl2.h b/preset_kernels/Llama3-8B-1.58-100B-tokens/bitnet-lut-kernels-tl2.h new file mode 100644 index 0000000..88dc9e2 --- /dev/null +++ b/preset_kernels/Llama3-8B-1.58-100B-tokens/bitnet-lut-kernels-tl2.h @@ -0,0 +1,1454 @@ +#if defined(GGML_BITNET_X86_TL2) +#include "ggml-bitnet.h" +#define GGML_BITNET_MAX_NODES 8192 +static bool initialized = false; +static bitnet_tensor_extra * bitnet_tensor_extras = nullptr; +static size_t bitnet_tensor_extras_index = 0; +static void * aligned_malloc(size_t size) { +#if defined(_WIN32) + return _aligned_malloc(size, 64); +#else + void * ptr = nullptr; + posix_memalign(&ptr, 64, size); + return ptr; +#endif +} + +static void aligned_free(void * ptr) { +#if defined(_WIN32) + _aligned_free(ptr); +#else + free(ptr); +#endif +} +#define BK2 32 +#if defined __AVX2__ +inline void _mm256_merge_epi32(const __m256i v0, const __m256i v1, __m256i *vl, __m256i *vh) +{ + __m256i va = _mm256_permute4x64_epi64(v0, _MM_SHUFFLE(3, 1, 2, 0)); + __m256i vb = _mm256_permute4x64_epi64(v1, _MM_SHUFFLE(3, 1, 2, 0)); + *vl = _mm256_unpacklo_epi32(va, vb); + *vh = _mm256_unpackhi_epi32(va, vb); +} +inline void _mm256_merge_epi64(const __m256i v0, const __m256i v1, __m256i *vl, __m256i *vh) +{ + __m256i va = _mm256_permute4x64_epi64(v0, _MM_SHUFFLE(3, 1, 2, 0)); + __m256i vb = _mm256_permute4x64_epi64(v1, _MM_SHUFFLE(3, 1, 2, 0)); + *vl = _mm256_unpacklo_epi64(va, vb); + *vh = _mm256_unpackhi_epi64(va, vb); +} +inline void _mm256_merge_si128(const __m256i v0, const __m256i v1, __m256i *vl, __m256i *vh) +{ + *vl = _mm256_permute2x128_si256(v0, v1, _MM_SHUFFLE(0, 2, 0, 0)); + *vh = _mm256_permute2x128_si256(v0, v1, _MM_SHUFFLE(0, 3, 0, 1)); +} +inline void Transpose_8_8( + __m256i *v0, + __m256i *v1, + __m256i *v2, + __m256i *v3, + __m256i *v4, + __m256i *v5, + __m256i *v6, + __m256i *v7) +{ + __m256i w0, w1, w2, w3, w4, w5, w6, w7; + __m256i x0, x1, x2, x3, x4, x5, x6, x7; + _mm256_merge_epi32(*v0, *v1, &w0, &w1); + _mm256_merge_epi32(*v2, *v3, &w2, &w3); + _mm256_merge_epi32(*v4, *v5, &w4, &w5); + _mm256_merge_epi32(*v6, *v7, &w6, &w7); + _mm256_merge_epi64(w0, w2, &x0, &x1); + _mm256_merge_epi64(w1, w3, &x2, &x3); + _mm256_merge_epi64(w4, w6, &x4, &x5); + _mm256_merge_epi64(w5, w7, &x6, &x7); + _mm256_merge_si128(x0, x4, v0, v1); + _mm256_merge_si128(x1, x5, v2, v3); + _mm256_merge_si128(x2, x6, v4, v5); + _mm256_merge_si128(x3, x7, v6, v7); +} +#endif +inline int32_t per_tensor_quant(int k, void* lut_scales_, void* b_) { + bitnet_float_type* lut_scales = (bitnet_float_type*)lut_scales_; + bitnet_float_type* b = (bitnet_float_type*)b_; +#if defined __AVX2__ + __m256 max_vec = _mm256_set1_ps(0.f); + const __m256 vec_sign = _mm256_set1_ps(-0.0f); + for (int i = 0; i < k / 8; i++) { + __m256 vec_b = _mm256_loadu_ps(b + i * 8); + __m256 vec_babs = _mm256_andnot_ps(vec_sign, vec_b); + max_vec = _mm256_max_ps(vec_babs, max_vec); + } + __m128 max1 = _mm_max_ps(_mm256_extractf128_ps(max_vec, 1), _mm256_castps256_ps128(max_vec)); + max1 = _mm_max_ps(max1, _mm_movehl_ps(max1, max1)); + max1 = _mm_max_ss(max1, _mm_movehdup_ps(max1)); + float scales = 127 / _mm_cvtss_f32(max1); + *lut_scales = scales; +#endif + return 0; +} +inline int32_t partial_max_reset(int32_t bs, void* lut_scales_) { + bitnet_float_type* lut_scales = (bitnet_float_type*)lut_scales_; + #pragma unroll + for (int i=0; i< bs; i++) { + lut_scales[i] = 0.0; + } + return 0; +} +template +inline int32_t three_lut_ctor(int8_t* qlut, bitnet_float_type* b, bitnet_float_type* lut_scales) { +#if defined __AVX2__ + __m256 vec_lut[16]; + const __m256i vec_bi = _mm256_set_epi32(84, 72, 60, 48, 36, 24, 12, 0); + float scales = *lut_scales; + __m256i shuffle_mask = _mm256_set_epi8( + 0x0f, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x03, 0x01, + 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00, + 0x0f, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x03, 0x01, + 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00 + ); +#pragma unroll + for (int k = 0; k < act_k / 24; ++k) { + __m256 vec_b0 = _mm256_i32gather_ps(b + k * 24 + 0, vec_bi, 1); + __m256 vec_b1 = _mm256_i32gather_ps(b + k * 24 + 1, vec_bi, 1); + __m256 vec_b2 = _mm256_i32gather_ps(b + k * 24 + 2, vec_bi, 1); + + __m256i vec_b0i = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b0, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC)); + __m256i vec_b1i = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b1, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC)); + __m256i vec_b2i = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b2, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC)); + + vec_lut[15] = _mm256_setzero_si256(); + vec_lut[14] = _mm256_setzero_si256(); + vec_lut[13] = vec_b0i; + vec_lut[13] = _mm256_add_epi32(vec_lut[13], vec_b1i); + vec_lut[13] = _mm256_add_epi32(vec_lut[13], vec_b2i); + vec_lut[12] = vec_b0i; + vec_lut[12] = _mm256_add_epi32(vec_lut[12], vec_b1i); + vec_lut[11] = vec_b0i; + vec_lut[11] = _mm256_add_epi32(vec_lut[11], vec_b1i); + vec_lut[11] = _mm256_sub_epi32(vec_lut[11], vec_b2i); + vec_lut[10] = vec_b0i; + vec_lut[10] = _mm256_add_epi32(vec_lut[10], vec_b2i); + vec_lut[9] = vec_b0i; + vec_lut[8] = vec_b0i; + vec_lut[8] = _mm256_sub_epi32(vec_lut[8], vec_b2i); + vec_lut[7] = vec_b0i; + vec_lut[7] = _mm256_sub_epi32(vec_lut[7], vec_b1i); + vec_lut[7] = _mm256_add_epi32(vec_lut[7], vec_b2i); + vec_lut[6] = vec_b0i; + vec_lut[6] = _mm256_sub_epi32(vec_lut[6], vec_b1i); + vec_lut[5] = vec_b0i; + vec_lut[5] = _mm256_sub_epi32(vec_lut[5], vec_b1i); + vec_lut[5] = _mm256_sub_epi32(vec_lut[5], vec_b2i); + vec_lut[4] = vec_b1i; + vec_lut[4] = _mm256_add_epi32(vec_lut[4], vec_b2i); + vec_lut[3] = vec_b1i; + vec_lut[2] = vec_b1i; + vec_lut[2] = _mm256_sub_epi32(vec_lut[2], vec_b2i); + vec_lut[1] = vec_b2i; + vec_lut[0] = _mm256_setzero_si256(); + __m256i ix[16]; + +#pragma unroll + for (int g = 0; g < 16; ++g) { + ix[g] = vec_lut[g]; + } + + Transpose_8_8(&(ix[0]), &(ix[1]), &(ix[2]), &(ix[3]), &(ix[4]), &(ix[5]),&(ix[6]), &(ix[7])); + Transpose_8_8(&(ix[8]), &(ix[9]), &(ix[10]), &(ix[11]), &(ix[12]), &(ix[13]),&(ix[14]), &(ix[15])); + +#pragma unroll + for (int g = 0; g < 8; ++g) { + ix[g] = _mm256_packs_epi32(ix[g], ix[g + 8]); + ix[g] = _mm256_permute4x64_epi64(ix[g], _MM_SHUFFLE(3, 1, 2, 0)); + ix[g] = _mm256_shuffle_epi8(ix[g], shuffle_mask); + ix[g] = _mm256_permute4x64_epi64(ix[g], _MM_SHUFFLE(3, 1, 2, 0)); + } + int8_t* qlut_i8 = reinterpret_cast(qlut); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 0 * 32 + 0), ix[0]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 1 * 32 + 0), ix[1]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 2 * 32 + 0), ix[2]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 3 * 32 + 0), ix[3]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 4 * 32 + 0), ix[4]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 5 * 32 + 0), ix[5]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 6 * 32 + 0), ix[6]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 7 * 32 + 0), ix[7]); + + } + + *lut_scales = scales; +#endif + return 0; +} + +template +inline int32_t two_lut_ctor(int8_t* qlut, bitnet_float_type* b, bitnet_float_type* lut_scales) { +#if defined __AVX2__ + __m256 vec_lut[16]; + const __m256i vec_bi = _mm256_set_epi32(56, 48, 40, 32, 24, 16, 8, 0); + float scales = *lut_scales; + __m256i shuffle_mask = _mm256_set_epi8( + 0x0f, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x03, 0x01, + 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00, + 0x0f, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x03, 0x01, + 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00 + ); +#pragma unroll + for (int k = 0; k < act_k / 16; ++k) { + __m256 vec_b0f = _mm256_i32gather_ps(b + k * 16 + 0, vec_bi, 1); + __m256 vec_b1f = _mm256_i32gather_ps(b + k * 16 + 1, vec_bi, 1); + + __m256i vec_b0 = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b0f, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC)); + __m256i vec_b1 = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b1f, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC)); + vec_lut[15] = _mm256_setzero_si256(); + vec_lut[14] = _mm256_setzero_si256(); + vec_lut[13] = _mm256_setzero_si256(); + vec_lut[12] = _mm256_setzero_si256(); + vec_lut[11] = _mm256_setzero_si256(); + vec_lut[10] = _mm256_setzero_si256(); + vec_lut[9] = _mm256_setzero_si256(); + vec_lut[8] = vec_b0; + vec_lut[8] = _mm256_add_epi32(vec_lut[8], vec_b1); + vec_lut[7] = vec_b0; + vec_lut[6] = vec_b0; + vec_lut[6] = _mm256_sub_epi32(vec_lut[6], vec_b1); + vec_lut[5] = vec_b1; + vec_lut[4] = _mm256_setzero_si256(); + vec_lut[3] = _mm256_setzero_si256(); + vec_lut[3] = _mm256_sub_epi32(vec_lut[3], vec_b1); + vec_lut[2] = _mm256_setzero_si256(); + vec_lut[2] = _mm256_sub_epi32(vec_lut[2], vec_b0); + vec_lut[2] = _mm256_add_epi32(vec_lut[2], vec_b1); + vec_lut[1] = _mm256_setzero_si256(); + vec_lut[1] = _mm256_sub_epi32(vec_lut[1], vec_b0); + vec_lut[0] = _mm256_setzero_si256(); + vec_lut[0] = _mm256_sub_epi32(vec_lut[0], vec_b0); + vec_lut[0] = _mm256_sub_epi32(vec_lut[0], vec_b1); + + __m256i ix[16]; +#pragma unroll + for (int g = 0; g < 16; ++g) { + ix[g] = vec_lut[g]; + } + + Transpose_8_8(&(ix[0]), &(ix[1]), &(ix[2]), &(ix[3]), &(ix[4]), &(ix[5]),&(ix[6]), &(ix[7])); + Transpose_8_8(&(ix[8]), &(ix[9]), &(ix[10]), &(ix[11]), &(ix[12]), &(ix[13]),&(ix[14]), &(ix[15])); + +#pragma unroll + for (int g = 0; g < 8; ++g) { + ix[g] = _mm256_packs_epi32(ix[g], ix[g + 8]); + ix[g] = _mm256_permute4x64_epi64(ix[g], _MM_SHUFFLE(3, 1, 2, 0)); + ix[g] = _mm256_shuffle_epi8(ix[g], shuffle_mask); + ix[g] = _mm256_permute4x64_epi64(ix[g], _MM_SHUFFLE(3, 1, 2, 0)); + } + + int8_t* qlut_i8 = reinterpret_cast(qlut); + + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 0 * 32 + 0), ix[0]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 1 * 32 + 0), ix[1]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 2 * 32 + 0), ix[2]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 3 * 32 + 0), ix[3]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 4 * 32 + 0), ix[4]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 5 * 32 + 0), ix[5]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 6 * 32 + 0), ix[6]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 7 * 32 + 0), ix[7]); + + } + *lut_scales = scales; +#endif + return 0; +} +static bool is_type_supported(enum ggml_type type) { + if (type == GGML_TYPE_Q4_0 || + type == GGML_TYPE_TL2) { + return true; + } else { + return false; + } +} +#include + +#define BM14336_4096 256 +#define BBK14336_4096 96 +template +inline void three_tbl_impl_14336_4096(int32_t* c, int8_t* lut, uint8_t* a, uint8_t* sign) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const __m256i vec_sign_mask = _mm256_set1_epi16(0x8000); + const __m256i vec_zero = _mm256_set1_epi8(0x00); + const __m256i vec_one = _mm256_set1_epi8(0xff); + const int KK = BBK14336_4096 / 3; +#pragma unroll + for (int i = 0; i < BM14336_4096; i += 32) { + __m256i vec_as[KK / 2]; + __m256i vec_signs[KK / 8]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } + #pragma unroll + for (int as = 0; as < KK / 8; as++) { + vec_signs[as] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(sign + i * KK / 8 + as * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + __m256i vec_sign = vec_signs[k]; + __m256i vec_a_0 = vec_as[k * 4 + 0]; + __m128i vec_k1_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0)), 15); + __m256i vec_sign_left_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 1)), 15); + __m256i vec_v_top_0 = _mm256_and_si256(_mm256_srli_epi16(vec_a_0, 4), vec_mask); + __m256i vec_v_top_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_0, vec_k1_0), vec_v_top_0); + __m256i vec_v_top_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_0, vec_k2_0), vec_v_top_0); + __m256i vec_sign_right_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 2)), 15); + __m256i vec_sign_right_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 3)), 15); + __m256i vec_v_bot_0 = _mm256_and_si256(vec_a_0, vec_mask); + __m256i vec_v_bot_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_0, vec_k3_0), vec_v_bot_0); + __m256i vec_v_bot_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_0, vec_k4_0), vec_v_bot_0); + __m256i vec_v_top_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_lo_0), vec_sign_left_lo_0); + __m256i vec_v_top_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_hi_0), vec_sign_left_hi_0); + __m256i vec_v_bot_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_lo_0), vec_sign_right_lo_0); + __m256i vec_v_bot_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_hi_0), vec_sign_right_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_0); + __m256i vec_a_1 = vec_as[k * 4 + 1]; + __m128i vec_k1_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1)), 15); + __m256i vec_sign_left_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 1)), 15); + __m256i vec_v_top_1 = _mm256_and_si256(_mm256_srli_epi16(vec_a_1, 4), vec_mask); + __m256i vec_v_top_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_1, vec_k1_1), vec_v_top_1); + __m256i vec_v_top_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_1, vec_k2_1), vec_v_top_1); + __m256i vec_sign_right_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 2)), 15); + __m256i vec_sign_right_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 3)), 15); + __m256i vec_v_bot_1 = _mm256_and_si256(vec_a_1, vec_mask); + __m256i vec_v_bot_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_1, vec_k3_1), vec_v_bot_1); + __m256i vec_v_bot_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_1, vec_k4_1), vec_v_bot_1); + __m256i vec_v_top_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_lo_1), vec_sign_left_lo_1); + __m256i vec_v_top_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_hi_1), vec_sign_left_hi_1); + __m256i vec_v_bot_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_lo_1), vec_sign_right_lo_1); + __m256i vec_v_bot_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_hi_1), vec_sign_right_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_1); + __m256i vec_a_2 = vec_as[k * 4 + 2]; + __m128i vec_k1_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2)), 15); + __m256i vec_sign_left_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 1)), 15); + __m256i vec_v_top_2 = _mm256_and_si256(_mm256_srli_epi16(vec_a_2, 4), vec_mask); + __m256i vec_v_top_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_2, vec_k1_2), vec_v_top_2); + __m256i vec_v_top_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_2, vec_k2_2), vec_v_top_2); + __m256i vec_sign_right_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 2)), 15); + __m256i vec_sign_right_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 3)), 15); + __m256i vec_v_bot_2 = _mm256_and_si256(vec_a_2, vec_mask); + __m256i vec_v_bot_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_2, vec_k3_2), vec_v_bot_2); + __m256i vec_v_bot_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_2, vec_k4_2), vec_v_bot_2); + __m256i vec_v_top_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_lo_2), vec_sign_left_lo_2); + __m256i vec_v_top_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_hi_2), vec_sign_left_hi_2); + __m256i vec_v_bot_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_lo_2), vec_sign_right_lo_2); + __m256i vec_v_bot_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_hi_2), vec_sign_right_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_2); + __m256i vec_a_3 = vec_as[k * 4 + 3]; + __m128i vec_k1_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3)), 15); + __m256i vec_sign_left_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 1)), 15); + __m256i vec_v_top_3 = _mm256_and_si256(_mm256_srli_epi16(vec_a_3, 4), vec_mask); + __m256i vec_v_top_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_3, vec_k1_3), vec_v_top_3); + __m256i vec_v_top_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_3, vec_k2_3), vec_v_top_3); + __m256i vec_sign_right_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 2)), 15); + __m256i vec_sign_right_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 3)), 15); + __m256i vec_v_bot_3 = _mm256_and_si256(vec_a_3, vec_mask); + __m256i vec_v_bot_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_3, vec_k3_3), vec_v_bot_3); + __m256i vec_v_bot_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_3, vec_k4_3), vec_v_bot_3); + __m256i vec_v_top_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_lo_3), vec_sign_left_lo_3); + __m256i vec_v_top_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_hi_3), vec_sign_left_hi_3); + __m256i vec_v_bot_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_lo_3), vec_sign_right_lo_3); + __m256i vec_v_bot_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_hi_3), vec_sign_right_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_3); + } + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM14336_4096 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM14336_4096 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM14336_4096 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM14336_4096 * bs)); + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM14336_4096 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM14336_4096 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM14336_4096 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM14336_4096 * bs), vec_gc3); + } + } +#endif +} + +template +inline int32_t two_tbl_impl14336_4096(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const int KK = BK2 / 2; +#pragma unroll + for (int i = 0; i < BM14336_4096; i += 32) { + __m256i vec_as[KK / 2]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + #pragma unroll + for (int j = 0; j < 4; j++) { + __m256i vec_a = vec_as[k * 4 + j]; + + __m128i vec_k1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 0 + K2 / 2 * 32 * bs)); + __m128i vec_k2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 16 + K2 / 2 * 32 * bs)); + __m128i vec_k3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 32 + K2 / 2 * 32 * bs)); + __m128i vec_k4 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 48 + K2 / 2 * 32 * bs)); + + __m256i vec_v_top = _mm256_and_si256(_mm256_srli_epi16(vec_a, 4), vec_mask); + __m256i vec_v_top_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1, vec_k1), vec_v_top); + __m256i vec_v_top_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2, vec_k2), vec_v_top); + + __m256i vec_v_bot = _mm256_and_si256(vec_a, vec_mask); + __m256i vec_v_bot_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3, vec_k3), vec_v_bot); + __m256i vec_v_bot_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4, vec_k4), vec_v_bot); + + __m256i vec_v_top_lo = _mm256_unpackhi_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_top_hi = _mm256_unpacklo_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_bot_lo = _mm256_unpackhi_epi8(vec_v_bot_fir, vec_v_bot_sec); + __m256i vec_v_bot_hi = _mm256_unpacklo_epi8(vec_v_bot_fir, vec_v_bot_sec); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo); + } + } + + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM14336_4096 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM14336_4096 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM14336_4096 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM14336_4096 * bs)); + + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM14336_4096 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM14336_4096 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM14336_4096 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM14336_4096 * bs), vec_gc3); + } + } +#endif + return 0; +} + +template +int32_t three_qgemm_lut_14336_4096(void* A, void* sign, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM14336_4096]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM14336_4096 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 4032 / BBK14336_4096; ++k_outer) { + three_tbl_impl_14336_4096((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK14336_4096 / 3 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK14336_4096 / 3 / 2 * BM14336_4096)])), (&(((uint8_t*)sign)[(k_outer * BBK14336_4096 / 3 / 8 * BM14336_4096)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM14336_4096; i++) { + ((int32_t*)C)[i] = (int32_t)(((int32_t*)CBits)[i + bs * BM14336_4096]); + } + } + return 0; +} + +template +int32_t two_qgemm_lut_14336_4096(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM14336_4096]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM14336_4096 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 64 / 32; ++k_outer) { + two_tbl_impl14336_4096((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BK2 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BK2 / 2 / 2 * BM14336_4096)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM14336_4096; i++) { + ((int32_t*)C)[i] += (int32_t)(((int32_t*)CBits)[i + bs * BM14336_4096]); + ((float*)C)[i] = (float)(((int32_t*)C)[i]) / ((float*)LUT_Scales)[bs] * ((float*)Scales)[0]; + } + } + return 0; +} + +#include + +#define BM4096_14336 128 +#define BBK4096_14336 96 +template +inline void three_tbl_impl_4096_14336(int32_t* c, int8_t* lut, uint8_t* a, uint8_t* sign) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const __m256i vec_sign_mask = _mm256_set1_epi16(0x8000); + const __m256i vec_zero = _mm256_set1_epi8(0x00); + const __m256i vec_one = _mm256_set1_epi8(0xff); + const int KK = BBK4096_14336 / 3; +#pragma unroll + for (int i = 0; i < BM4096_14336; i += 32) { + __m256i vec_as[KK / 2]; + __m256i vec_signs[KK / 8]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } + #pragma unroll + for (int as = 0; as < KK / 8; as++) { + vec_signs[as] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(sign + i * KK / 8 + as * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + __m256i vec_sign = vec_signs[k]; + __m256i vec_a_0 = vec_as[k * 4 + 0]; + __m128i vec_k1_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0)), 15); + __m256i vec_sign_left_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 1)), 15); + __m256i vec_v_top_0 = _mm256_and_si256(_mm256_srli_epi16(vec_a_0, 4), vec_mask); + __m256i vec_v_top_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_0, vec_k1_0), vec_v_top_0); + __m256i vec_v_top_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_0, vec_k2_0), vec_v_top_0); + __m256i vec_sign_right_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 2)), 15); + __m256i vec_sign_right_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 3)), 15); + __m256i vec_v_bot_0 = _mm256_and_si256(vec_a_0, vec_mask); + __m256i vec_v_bot_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_0, vec_k3_0), vec_v_bot_0); + __m256i vec_v_bot_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_0, vec_k4_0), vec_v_bot_0); + __m256i vec_v_top_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_lo_0), vec_sign_left_lo_0); + __m256i vec_v_top_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_hi_0), vec_sign_left_hi_0); + __m256i vec_v_bot_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_lo_0), vec_sign_right_lo_0); + __m256i vec_v_bot_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_hi_0), vec_sign_right_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_0); + __m256i vec_a_1 = vec_as[k * 4 + 1]; + __m128i vec_k1_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1)), 15); + __m256i vec_sign_left_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 1)), 15); + __m256i vec_v_top_1 = _mm256_and_si256(_mm256_srli_epi16(vec_a_1, 4), vec_mask); + __m256i vec_v_top_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_1, vec_k1_1), vec_v_top_1); + __m256i vec_v_top_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_1, vec_k2_1), vec_v_top_1); + __m256i vec_sign_right_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 2)), 15); + __m256i vec_sign_right_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 3)), 15); + __m256i vec_v_bot_1 = _mm256_and_si256(vec_a_1, vec_mask); + __m256i vec_v_bot_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_1, vec_k3_1), vec_v_bot_1); + __m256i vec_v_bot_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_1, vec_k4_1), vec_v_bot_1); + __m256i vec_v_top_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_lo_1), vec_sign_left_lo_1); + __m256i vec_v_top_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_hi_1), vec_sign_left_hi_1); + __m256i vec_v_bot_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_lo_1), vec_sign_right_lo_1); + __m256i vec_v_bot_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_hi_1), vec_sign_right_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_1); + __m256i vec_a_2 = vec_as[k * 4 + 2]; + __m128i vec_k1_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2)), 15); + __m256i vec_sign_left_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 1)), 15); + __m256i vec_v_top_2 = _mm256_and_si256(_mm256_srli_epi16(vec_a_2, 4), vec_mask); + __m256i vec_v_top_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_2, vec_k1_2), vec_v_top_2); + __m256i vec_v_top_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_2, vec_k2_2), vec_v_top_2); + __m256i vec_sign_right_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 2)), 15); + __m256i vec_sign_right_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 3)), 15); + __m256i vec_v_bot_2 = _mm256_and_si256(vec_a_2, vec_mask); + __m256i vec_v_bot_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_2, vec_k3_2), vec_v_bot_2); + __m256i vec_v_bot_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_2, vec_k4_2), vec_v_bot_2); + __m256i vec_v_top_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_lo_2), vec_sign_left_lo_2); + __m256i vec_v_top_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_hi_2), vec_sign_left_hi_2); + __m256i vec_v_bot_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_lo_2), vec_sign_right_lo_2); + __m256i vec_v_bot_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_hi_2), vec_sign_right_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_2); + __m256i vec_a_3 = vec_as[k * 4 + 3]; + __m128i vec_k1_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3)), 15); + __m256i vec_sign_left_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 1)), 15); + __m256i vec_v_top_3 = _mm256_and_si256(_mm256_srli_epi16(vec_a_3, 4), vec_mask); + __m256i vec_v_top_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_3, vec_k1_3), vec_v_top_3); + __m256i vec_v_top_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_3, vec_k2_3), vec_v_top_3); + __m256i vec_sign_right_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 2)), 15); + __m256i vec_sign_right_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 3)), 15); + __m256i vec_v_bot_3 = _mm256_and_si256(vec_a_3, vec_mask); + __m256i vec_v_bot_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_3, vec_k3_3), vec_v_bot_3); + __m256i vec_v_bot_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_3, vec_k4_3), vec_v_bot_3); + __m256i vec_v_top_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_lo_3), vec_sign_left_lo_3); + __m256i vec_v_top_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_hi_3), vec_sign_left_hi_3); + __m256i vec_v_bot_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_lo_3), vec_sign_right_lo_3); + __m256i vec_v_bot_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_hi_3), vec_sign_right_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_3); + } + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM4096_14336 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM4096_14336 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM4096_14336 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM4096_14336 * bs)); + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM4096_14336 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM4096_14336 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM4096_14336 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM4096_14336 * bs), vec_gc3); + } + } +#endif +} + +template +inline int32_t two_tbl_impl4096_14336(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const int KK = BK2 / 2; +#pragma unroll + for (int i = 0; i < BM4096_14336; i += 32) { + __m256i vec_as[KK / 2]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + #pragma unroll + for (int j = 0; j < 4; j++) { + __m256i vec_a = vec_as[k * 4 + j]; + + __m128i vec_k1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 0 + K2 / 2 * 32 * bs)); + __m128i vec_k2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 16 + K2 / 2 * 32 * bs)); + __m128i vec_k3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 32 + K2 / 2 * 32 * bs)); + __m128i vec_k4 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 48 + K2 / 2 * 32 * bs)); + + __m256i vec_v_top = _mm256_and_si256(_mm256_srli_epi16(vec_a, 4), vec_mask); + __m256i vec_v_top_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1, vec_k1), vec_v_top); + __m256i vec_v_top_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2, vec_k2), vec_v_top); + + __m256i vec_v_bot = _mm256_and_si256(vec_a, vec_mask); + __m256i vec_v_bot_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3, vec_k3), vec_v_bot); + __m256i vec_v_bot_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4, vec_k4), vec_v_bot); + + __m256i vec_v_top_lo = _mm256_unpackhi_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_top_hi = _mm256_unpacklo_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_bot_lo = _mm256_unpackhi_epi8(vec_v_bot_fir, vec_v_bot_sec); + __m256i vec_v_bot_hi = _mm256_unpacklo_epi8(vec_v_bot_fir, vec_v_bot_sec); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo); + } + } + + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM4096_14336 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM4096_14336 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM4096_14336 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM4096_14336 * bs)); + + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM4096_14336 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM4096_14336 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM4096_14336 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM4096_14336 * bs), vec_gc3); + } + } +#endif + return 0; +} + +template +int32_t three_qgemm_lut_4096_14336(void* A, void* sign, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM4096_14336]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM4096_14336 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 14304 / BBK4096_14336; ++k_outer) { + three_tbl_impl_4096_14336((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK4096_14336 / 3 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK4096_14336 / 3 / 2 * BM4096_14336)])), (&(((uint8_t*)sign)[(k_outer * BBK4096_14336 / 3 / 8 * BM4096_14336)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM4096_14336; i++) { + ((int32_t*)C)[i] = (int32_t)(((int32_t*)CBits)[i + bs * BM4096_14336]); + } + } + return 0; +} + +template +int32_t two_qgemm_lut_4096_14336(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM4096_14336]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM4096_14336 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 32 / 32; ++k_outer) { + two_tbl_impl4096_14336((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BK2 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BK2 / 2 / 2 * BM4096_14336)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM4096_14336; i++) { + ((int32_t*)C)[i] += (int32_t)(((int32_t*)CBits)[i + bs * BM4096_14336]); + ((float*)C)[i] = (float)(((int32_t*)C)[i]) / ((float*)LUT_Scales)[bs] * ((float*)Scales)[0]; + } + } + return 0; +} + +#include + +#define BM1024_4096 256 +#define BBK1024_4096 96 +template +inline void three_tbl_impl_1024_4096(int32_t* c, int8_t* lut, uint8_t* a, uint8_t* sign) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const __m256i vec_sign_mask = _mm256_set1_epi16(0x8000); + const __m256i vec_zero = _mm256_set1_epi8(0x00); + const __m256i vec_one = _mm256_set1_epi8(0xff); + const int KK = BBK1024_4096 / 3; +#pragma unroll + for (int i = 0; i < BM1024_4096; i += 32) { + __m256i vec_as[KK / 2]; + __m256i vec_signs[KK / 8]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } + #pragma unroll + for (int as = 0; as < KK / 8; as++) { + vec_signs[as] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(sign + i * KK / 8 + as * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + __m256i vec_sign = vec_signs[k]; + __m256i vec_a_0 = vec_as[k * 4 + 0]; + __m128i vec_k1_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0)), 15); + __m256i vec_sign_left_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 1)), 15); + __m256i vec_v_top_0 = _mm256_and_si256(_mm256_srli_epi16(vec_a_0, 4), vec_mask); + __m256i vec_v_top_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_0, vec_k1_0), vec_v_top_0); + __m256i vec_v_top_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_0, vec_k2_0), vec_v_top_0); + __m256i vec_sign_right_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 2)), 15); + __m256i vec_sign_right_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 3)), 15); + __m256i vec_v_bot_0 = _mm256_and_si256(vec_a_0, vec_mask); + __m256i vec_v_bot_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_0, vec_k3_0), vec_v_bot_0); + __m256i vec_v_bot_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_0, vec_k4_0), vec_v_bot_0); + __m256i vec_v_top_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_lo_0), vec_sign_left_lo_0); + __m256i vec_v_top_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_hi_0), vec_sign_left_hi_0); + __m256i vec_v_bot_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_lo_0), vec_sign_right_lo_0); + __m256i vec_v_bot_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_hi_0), vec_sign_right_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_0); + __m256i vec_a_1 = vec_as[k * 4 + 1]; + __m128i vec_k1_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1)), 15); + __m256i vec_sign_left_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 1)), 15); + __m256i vec_v_top_1 = _mm256_and_si256(_mm256_srli_epi16(vec_a_1, 4), vec_mask); + __m256i vec_v_top_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_1, vec_k1_1), vec_v_top_1); + __m256i vec_v_top_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_1, vec_k2_1), vec_v_top_1); + __m256i vec_sign_right_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 2)), 15); + __m256i vec_sign_right_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 3)), 15); + __m256i vec_v_bot_1 = _mm256_and_si256(vec_a_1, vec_mask); + __m256i vec_v_bot_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_1, vec_k3_1), vec_v_bot_1); + __m256i vec_v_bot_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_1, vec_k4_1), vec_v_bot_1); + __m256i vec_v_top_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_lo_1), vec_sign_left_lo_1); + __m256i vec_v_top_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_hi_1), vec_sign_left_hi_1); + __m256i vec_v_bot_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_lo_1), vec_sign_right_lo_1); + __m256i vec_v_bot_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_hi_1), vec_sign_right_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_1); + __m256i vec_a_2 = vec_as[k * 4 + 2]; + __m128i vec_k1_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2)), 15); + __m256i vec_sign_left_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 1)), 15); + __m256i vec_v_top_2 = _mm256_and_si256(_mm256_srli_epi16(vec_a_2, 4), vec_mask); + __m256i vec_v_top_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_2, vec_k1_2), vec_v_top_2); + __m256i vec_v_top_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_2, vec_k2_2), vec_v_top_2); + __m256i vec_sign_right_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 2)), 15); + __m256i vec_sign_right_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 3)), 15); + __m256i vec_v_bot_2 = _mm256_and_si256(vec_a_2, vec_mask); + __m256i vec_v_bot_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_2, vec_k3_2), vec_v_bot_2); + __m256i vec_v_bot_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_2, vec_k4_2), vec_v_bot_2); + __m256i vec_v_top_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_lo_2), vec_sign_left_lo_2); + __m256i vec_v_top_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_hi_2), vec_sign_left_hi_2); + __m256i vec_v_bot_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_lo_2), vec_sign_right_lo_2); + __m256i vec_v_bot_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_hi_2), vec_sign_right_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_2); + __m256i vec_a_3 = vec_as[k * 4 + 3]; + __m128i vec_k1_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3)), 15); + __m256i vec_sign_left_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 1)), 15); + __m256i vec_v_top_3 = _mm256_and_si256(_mm256_srli_epi16(vec_a_3, 4), vec_mask); + __m256i vec_v_top_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_3, vec_k1_3), vec_v_top_3); + __m256i vec_v_top_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_3, vec_k2_3), vec_v_top_3); + __m256i vec_sign_right_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 2)), 15); + __m256i vec_sign_right_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 3)), 15); + __m256i vec_v_bot_3 = _mm256_and_si256(vec_a_3, vec_mask); + __m256i vec_v_bot_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_3, vec_k3_3), vec_v_bot_3); + __m256i vec_v_bot_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_3, vec_k4_3), vec_v_bot_3); + __m256i vec_v_top_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_lo_3), vec_sign_left_lo_3); + __m256i vec_v_top_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_hi_3), vec_sign_left_hi_3); + __m256i vec_v_bot_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_lo_3), vec_sign_right_lo_3); + __m256i vec_v_bot_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_hi_3), vec_sign_right_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_3); + } + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM1024_4096 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM1024_4096 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM1024_4096 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM1024_4096 * bs)); + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM1024_4096 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM1024_4096 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM1024_4096 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM1024_4096 * bs), vec_gc3); + } + } +#endif +} + +template +inline int32_t two_tbl_impl1024_4096(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const int KK = BK2 / 2; +#pragma unroll + for (int i = 0; i < BM1024_4096; i += 32) { + __m256i vec_as[KK / 2]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + #pragma unroll + for (int j = 0; j < 4; j++) { + __m256i vec_a = vec_as[k * 4 + j]; + + __m128i vec_k1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 0 + K2 / 2 * 32 * bs)); + __m128i vec_k2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 16 + K2 / 2 * 32 * bs)); + __m128i vec_k3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 32 + K2 / 2 * 32 * bs)); + __m128i vec_k4 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 48 + K2 / 2 * 32 * bs)); + + __m256i vec_v_top = _mm256_and_si256(_mm256_srli_epi16(vec_a, 4), vec_mask); + __m256i vec_v_top_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1, vec_k1), vec_v_top); + __m256i vec_v_top_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2, vec_k2), vec_v_top); + + __m256i vec_v_bot = _mm256_and_si256(vec_a, vec_mask); + __m256i vec_v_bot_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3, vec_k3), vec_v_bot); + __m256i vec_v_bot_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4, vec_k4), vec_v_bot); + + __m256i vec_v_top_lo = _mm256_unpackhi_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_top_hi = _mm256_unpacklo_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_bot_lo = _mm256_unpackhi_epi8(vec_v_bot_fir, vec_v_bot_sec); + __m256i vec_v_bot_hi = _mm256_unpacklo_epi8(vec_v_bot_fir, vec_v_bot_sec); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo); + } + } + + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM1024_4096 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM1024_4096 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM1024_4096 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM1024_4096 * bs)); + + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM1024_4096 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM1024_4096 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM1024_4096 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM1024_4096 * bs), vec_gc3); + } + } +#endif + return 0; +} + +template +int32_t three_qgemm_lut_1024_4096(void* A, void* sign, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM1024_4096]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM1024_4096 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 4032 / BBK1024_4096; ++k_outer) { + three_tbl_impl_1024_4096((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK1024_4096 / 3 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK1024_4096 / 3 / 2 * BM1024_4096)])), (&(((uint8_t*)sign)[(k_outer * BBK1024_4096 / 3 / 8 * BM1024_4096)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM1024_4096; i++) { + ((int32_t*)C)[i] = (int32_t)(((int32_t*)CBits)[i + bs * BM1024_4096]); + } + } + return 0; +} + +template +int32_t two_qgemm_lut_1024_4096(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM1024_4096]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM1024_4096 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 64 / 32; ++k_outer) { + two_tbl_impl1024_4096((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BK2 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BK2 / 2 / 2 * BM1024_4096)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM1024_4096; i++) { + ((int32_t*)C)[i] += (int32_t)(((int32_t*)CBits)[i + bs * BM1024_4096]); + ((float*)C)[i] = (float)(((int32_t*)C)[i]) / ((float*)LUT_Scales)[bs] * ((float*)Scales)[0]; + } + } + return 0; +} + +#include + +#define BM4096_4096 128 +#define BBK4096_4096 96 +template +inline void three_tbl_impl_4096_4096(int32_t* c, int8_t* lut, uint8_t* a, uint8_t* sign) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const __m256i vec_sign_mask = _mm256_set1_epi16(0x8000); + const __m256i vec_zero = _mm256_set1_epi8(0x00); + const __m256i vec_one = _mm256_set1_epi8(0xff); + const int KK = BBK4096_4096 / 3; +#pragma unroll + for (int i = 0; i < BM4096_4096; i += 32) { + __m256i vec_as[KK / 2]; + __m256i vec_signs[KK / 8]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } + #pragma unroll + for (int as = 0; as < KK / 8; as++) { + vec_signs[as] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(sign + i * KK / 8 + as * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + __m256i vec_sign = vec_signs[k]; + __m256i vec_a_0 = vec_as[k * 4 + 0]; + __m128i vec_k1_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0)), 15); + __m256i vec_sign_left_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 1)), 15); + __m256i vec_v_top_0 = _mm256_and_si256(_mm256_srli_epi16(vec_a_0, 4), vec_mask); + __m256i vec_v_top_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_0, vec_k1_0), vec_v_top_0); + __m256i vec_v_top_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_0, vec_k2_0), vec_v_top_0); + __m256i vec_sign_right_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 2)), 15); + __m256i vec_sign_right_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 3)), 15); + __m256i vec_v_bot_0 = _mm256_and_si256(vec_a_0, vec_mask); + __m256i vec_v_bot_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_0, vec_k3_0), vec_v_bot_0); + __m256i vec_v_bot_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_0, vec_k4_0), vec_v_bot_0); + __m256i vec_v_top_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_lo_0), vec_sign_left_lo_0); + __m256i vec_v_top_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_hi_0), vec_sign_left_hi_0); + __m256i vec_v_bot_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_lo_0), vec_sign_right_lo_0); + __m256i vec_v_bot_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_hi_0), vec_sign_right_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_0); + __m256i vec_a_1 = vec_as[k * 4 + 1]; + __m128i vec_k1_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1)), 15); + __m256i vec_sign_left_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 1)), 15); + __m256i vec_v_top_1 = _mm256_and_si256(_mm256_srli_epi16(vec_a_1, 4), vec_mask); + __m256i vec_v_top_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_1, vec_k1_1), vec_v_top_1); + __m256i vec_v_top_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_1, vec_k2_1), vec_v_top_1); + __m256i vec_sign_right_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 2)), 15); + __m256i vec_sign_right_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 3)), 15); + __m256i vec_v_bot_1 = _mm256_and_si256(vec_a_1, vec_mask); + __m256i vec_v_bot_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_1, vec_k3_1), vec_v_bot_1); + __m256i vec_v_bot_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_1, vec_k4_1), vec_v_bot_1); + __m256i vec_v_top_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_lo_1), vec_sign_left_lo_1); + __m256i vec_v_top_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_hi_1), vec_sign_left_hi_1); + __m256i vec_v_bot_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_lo_1), vec_sign_right_lo_1); + __m256i vec_v_bot_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_hi_1), vec_sign_right_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_1); + __m256i vec_a_2 = vec_as[k * 4 + 2]; + __m128i vec_k1_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2)), 15); + __m256i vec_sign_left_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 1)), 15); + __m256i vec_v_top_2 = _mm256_and_si256(_mm256_srli_epi16(vec_a_2, 4), vec_mask); + __m256i vec_v_top_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_2, vec_k1_2), vec_v_top_2); + __m256i vec_v_top_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_2, vec_k2_2), vec_v_top_2); + __m256i vec_sign_right_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 2)), 15); + __m256i vec_sign_right_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 3)), 15); + __m256i vec_v_bot_2 = _mm256_and_si256(vec_a_2, vec_mask); + __m256i vec_v_bot_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_2, vec_k3_2), vec_v_bot_2); + __m256i vec_v_bot_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_2, vec_k4_2), vec_v_bot_2); + __m256i vec_v_top_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_lo_2), vec_sign_left_lo_2); + __m256i vec_v_top_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_hi_2), vec_sign_left_hi_2); + __m256i vec_v_bot_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_lo_2), vec_sign_right_lo_2); + __m256i vec_v_bot_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_hi_2), vec_sign_right_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_2); + __m256i vec_a_3 = vec_as[k * 4 + 3]; + __m128i vec_k1_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3)), 15); + __m256i vec_sign_left_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 1)), 15); + __m256i vec_v_top_3 = _mm256_and_si256(_mm256_srli_epi16(vec_a_3, 4), vec_mask); + __m256i vec_v_top_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_3, vec_k1_3), vec_v_top_3); + __m256i vec_v_top_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_3, vec_k2_3), vec_v_top_3); + __m256i vec_sign_right_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 2)), 15); + __m256i vec_sign_right_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 3)), 15); + __m256i vec_v_bot_3 = _mm256_and_si256(vec_a_3, vec_mask); + __m256i vec_v_bot_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_3, vec_k3_3), vec_v_bot_3); + __m256i vec_v_bot_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_3, vec_k4_3), vec_v_bot_3); + __m256i vec_v_top_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_lo_3), vec_sign_left_lo_3); + __m256i vec_v_top_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_hi_3), vec_sign_left_hi_3); + __m256i vec_v_bot_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_lo_3), vec_sign_right_lo_3); + __m256i vec_v_bot_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_hi_3), vec_sign_right_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_3); + } + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM4096_4096 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM4096_4096 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM4096_4096 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM4096_4096 * bs)); + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM4096_4096 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM4096_4096 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM4096_4096 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM4096_4096 * bs), vec_gc3); + } + } +#endif +} + +template +inline int32_t two_tbl_impl4096_4096(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const int KK = BK2 / 2; +#pragma unroll + for (int i = 0; i < BM4096_4096; i += 32) { + __m256i vec_as[KK / 2]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + #pragma unroll + for (int j = 0; j < 4; j++) { + __m256i vec_a = vec_as[k * 4 + j]; + + __m128i vec_k1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 0 + K2 / 2 * 32 * bs)); + __m128i vec_k2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 16 + K2 / 2 * 32 * bs)); + __m128i vec_k3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 32 + K2 / 2 * 32 * bs)); + __m128i vec_k4 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 48 + K2 / 2 * 32 * bs)); + + __m256i vec_v_top = _mm256_and_si256(_mm256_srli_epi16(vec_a, 4), vec_mask); + __m256i vec_v_top_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1, vec_k1), vec_v_top); + __m256i vec_v_top_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2, vec_k2), vec_v_top); + + __m256i vec_v_bot = _mm256_and_si256(vec_a, vec_mask); + __m256i vec_v_bot_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3, vec_k3), vec_v_bot); + __m256i vec_v_bot_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4, vec_k4), vec_v_bot); + + __m256i vec_v_top_lo = _mm256_unpackhi_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_top_hi = _mm256_unpacklo_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_bot_lo = _mm256_unpackhi_epi8(vec_v_bot_fir, vec_v_bot_sec); + __m256i vec_v_bot_hi = _mm256_unpacklo_epi8(vec_v_bot_fir, vec_v_bot_sec); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo); + } + } + + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM4096_4096 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM4096_4096 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM4096_4096 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM4096_4096 * bs)); + + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM4096_4096 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM4096_4096 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM4096_4096 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM4096_4096 * bs), vec_gc3); + } + } +#endif + return 0; +} + +template +int32_t three_qgemm_lut_4096_4096(void* A, void* sign, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM4096_4096]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM4096_4096 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 4032 / BBK4096_4096; ++k_outer) { + three_tbl_impl_4096_4096((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK4096_4096 / 3 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK4096_4096 / 3 / 2 * BM4096_4096)])), (&(((uint8_t*)sign)[(k_outer * BBK4096_4096 / 3 / 8 * BM4096_4096)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM4096_4096; i++) { + ((int32_t*)C)[i] = (int32_t)(((int32_t*)CBits)[i + bs * BM4096_4096]); + } + } + return 0; +} + +template +int32_t two_qgemm_lut_4096_4096(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM4096_4096]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM4096_4096 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 64 / 32; ++k_outer) { + two_tbl_impl4096_4096((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BK2 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BK2 / 2 / 2 * BM4096_4096)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM4096_4096; i++) { + ((int32_t*)C)[i] += (int32_t)(((int32_t*)CBits)[i + bs * BM4096_4096]); + ((float*)C)[i] = (float)(((int32_t*)C)[i]) / ((float*)LUT_Scales)[bs] * ((float*)Scales)[0]; + } + } + return 0; +} + +void ggml_preprocessor(int bs, int m, int three_k, int two_k, void* B, void* LUT_Scales, void* Three_QLUT, void* Two_QLUT) { + partial_max_reset(bs, (&(((float*)LUT_Scales)[0]))); + if (m == 14336 && two_k == 64 && three_k == 4032) { + for (int32_t b = 0; b < bs; b++) { + per_tensor_quant(two_k + three_k, (&(((float*)LUT_Scales)[b])), (&(((float*)B)[b * (two_k + three_k)]))); + three_lut_ctor<4032>((&(((int8_t*)Three_QLUT)[b * three_k / 3 * 32])), (&(((float*)B)[b * (three_k + two_k)])), (&(((float*)LUT_Scales)[b]))); + two_lut_ctor<64>((&(((int8_t*)Two_QLUT)[b * two_k / 2 * 32])), (&(((float*)B)[b * (three_k + two_k) + 4032])), (&(((float*)LUT_Scales)[b]))); + } + } + else if (m == 4096 && two_k == 32 && three_k == 14304) { + for (int32_t b = 0; b < bs; b++) { + per_tensor_quant(two_k + three_k, (&(((float*)LUT_Scales)[b])), (&(((float*)B)[b * (two_k + three_k)]))); + three_lut_ctor<14304>((&(((int8_t*)Three_QLUT)[b * three_k / 3 * 32])), (&(((float*)B)[b * (three_k + two_k)])), (&(((float*)LUT_Scales)[b]))); + two_lut_ctor<32>((&(((int8_t*)Two_QLUT)[b * two_k / 2 * 32])), (&(((float*)B)[b * (three_k + two_k) + 14304])), (&(((float*)LUT_Scales)[b]))); + } + } + else if (m == 1024 && two_k == 64 && three_k == 4032) { + for (int32_t b = 0; b < bs; b++) { + per_tensor_quant(two_k + three_k, (&(((float*)LUT_Scales)[b])), (&(((float*)B)[b * (two_k + three_k)]))); + three_lut_ctor<4032>((&(((int8_t*)Three_QLUT)[b * three_k / 3 * 32])), (&(((float*)B)[b * (three_k + two_k)])), (&(((float*)LUT_Scales)[b]))); + two_lut_ctor<64>((&(((int8_t*)Two_QLUT)[b * two_k / 2 * 32])), (&(((float*)B)[b * (three_k + two_k) + 4032])), (&(((float*)LUT_Scales)[b]))); + } + } + else if (m == 4096 && two_k == 64 && three_k == 4032) { + for (int32_t b = 0; b < bs; b++) { + per_tensor_quant(two_k + three_k, (&(((float*)LUT_Scales)[b])), (&(((float*)B)[b * (two_k + three_k)]))); + three_lut_ctor<4032>((&(((int8_t*)Three_QLUT)[b * three_k / 3 * 32])), (&(((float*)B)[b * (three_k + two_k)])), (&(((float*)LUT_Scales)[b]))); + two_lut_ctor<64>((&(((int8_t*)Two_QLUT)[b * two_k / 2 * 32])), (&(((float*)B)[b * (three_k + two_k) + 4032])), (&(((float*)LUT_Scales)[b]))); + } + } +} +void ggml_qgemm_lut(int bs, int m, int k, int BK, void* A, void* sign, void* LUT, void* Scales, void* LUT_Scales, void* C) { + if (m == 14336 && k == 4096) { + if (BK == 64) { + if (bs == 1) { + two_qgemm_lut_14336_4096<1>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 8) { + two_qgemm_lut_14336_4096<8>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 32) { + two_qgemm_lut_14336_4096<32>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 128) { + two_qgemm_lut_14336_4096<128>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 256) { + two_qgemm_lut_14336_4096<256>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 512) { + two_qgemm_lut_14336_4096<512>(A, LUT, Scales, LUT_Scales, C); + } + } + else if (BK == 4032) { + if (bs == 1) { + three_qgemm_lut_14336_4096<1>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 8) { + three_qgemm_lut_14336_4096<8>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 32) { + three_qgemm_lut_14336_4096<32>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 128) { + three_qgemm_lut_14336_4096<128>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 256) { + three_qgemm_lut_14336_4096<256>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 512) { + three_qgemm_lut_14336_4096<512>(A, sign, LUT, Scales, LUT_Scales, C); + } + } + } + else if (m == 4096 && k == 14336) { + if (BK == 32) { + if (bs == 1) { + two_qgemm_lut_4096_14336<1>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 8) { + two_qgemm_lut_4096_14336<8>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 32) { + two_qgemm_lut_4096_14336<32>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 128) { + two_qgemm_lut_4096_14336<128>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 256) { + two_qgemm_lut_4096_14336<256>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 512) { + two_qgemm_lut_4096_14336<512>(A, LUT, Scales, LUT_Scales, C); + } + } + else if (BK == 14304) { + if (bs == 1) { + three_qgemm_lut_4096_14336<1>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 8) { + three_qgemm_lut_4096_14336<8>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 32) { + three_qgemm_lut_4096_14336<32>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 128) { + three_qgemm_lut_4096_14336<128>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 256) { + three_qgemm_lut_4096_14336<256>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 512) { + three_qgemm_lut_4096_14336<512>(A, sign, LUT, Scales, LUT_Scales, C); + } + } + } + else if (m == 1024 && k == 4096) { + if (BK == 64) { + if (bs == 1) { + two_qgemm_lut_1024_4096<1>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 8) { + two_qgemm_lut_1024_4096<8>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 32) { + two_qgemm_lut_1024_4096<32>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 128) { + two_qgemm_lut_1024_4096<128>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 256) { + two_qgemm_lut_1024_4096<256>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 512) { + two_qgemm_lut_1024_4096<512>(A, LUT, Scales, LUT_Scales, C); + } + } + else if (BK == 4032) { + if (bs == 1) { + three_qgemm_lut_1024_4096<1>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 8) { + three_qgemm_lut_1024_4096<8>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 32) { + three_qgemm_lut_1024_4096<32>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 128) { + three_qgemm_lut_1024_4096<128>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 256) { + three_qgemm_lut_1024_4096<256>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 512) { + three_qgemm_lut_1024_4096<512>(A, sign, LUT, Scales, LUT_Scales, C); + } + } + } + else if (m == 4096 && k == 4096) { + if (BK == 64) { + if (bs == 1) { + two_qgemm_lut_4096_4096<1>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 8) { + two_qgemm_lut_4096_4096<8>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 32) { + two_qgemm_lut_4096_4096<32>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 128) { + two_qgemm_lut_4096_4096<128>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 256) { + two_qgemm_lut_4096_4096<256>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 512) { + two_qgemm_lut_4096_4096<512>(A, LUT, Scales, LUT_Scales, C); + } + } + else if (BK == 4032) { + if (bs == 1) { + three_qgemm_lut_4096_4096<1>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 8) { + three_qgemm_lut_4096_4096<8>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 32) { + three_qgemm_lut_4096_4096<32>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 128) { + three_qgemm_lut_4096_4096<128>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 256) { + three_qgemm_lut_4096_4096<256>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 512) { + three_qgemm_lut_4096_4096<512>(A, sign, LUT, Scales, LUT_Scales, C); + } + } + } +} + +void ggml_bitnet_transform_tensor(struct ggml_tensor * tensor) { + if (!(is_type_supported(tensor->type) && tensor->backend == GGML_BACKEND_TYPE_CPU && tensor->extra == nullptr)) { + return; + } + + int k = tensor->ne[0]; + int m = tensor->ne[1]; + const int lut_scales_size = 1; + int bk = 0; + int bm = 0; + + if (m == 14336 && k == 4096) { + bm = BM14336_4096; + bk = BBK14336_4096; + } +else if (m == 4096 && k == 14336) { + bm = BM4096_14336; + bk = BBK4096_14336; + } +else if (m == 1024 && k == 4096) { + bm = BM1024_4096; + bk = BBK1024_4096; + } +else if (m == 4096 && k == 4096) { + bm = BM4096_4096; + bk = BBK4096_4096; + } + + const int n_tile_num = m / bm; + const int BK = bk; + uint8_t * qweights; + bitnet_float_type * scales; + + scales = (bitnet_float_type *) aligned_malloc(sizeof(bitnet_float_type)); + qweights = (uint8_t *) tensor->data; + float * i2_scales = (float * )(qweights + k * m / 4); + scales[0] = (bitnet_float_type) i2_scales[0]; + + tensor->extra = bitnet_tensor_extras + bitnet_tensor_extras_index; + bitnet_tensor_extras[bitnet_tensor_extras_index++] = { + /* .lut_scales_size = */ lut_scales_size, + /* .BK = */ BK, + /* .n_tile_num = */ n_tile_num, + /* .qweights = */ qweights, + /* .scales = */ scales + }; +} +#endif \ No newline at end of file diff --git a/preset_kernels/Llama3-8B-1.58-100B-tokens/kernel_config_tl1.ini b/preset_kernels/Llama3-8B-1.58-100B-tokens/kernel_config_tl1.ini new file mode 100644 index 0000000..b27f477 --- /dev/null +++ b/preset_kernels/Llama3-8B-1.58-100B-tokens/kernel_config_tl1.ini @@ -0,0 +1,28 @@ +[Kernels_0] +m = 14336 +k = 4096 +bm = 256 +bk = 128 +bmm = 64 + +[Kernels_1] +m = 4096 +k = 14336 +bm = 256 +bk = 128 +bmm = 32 + +[Kernels_2] +m = 1024 +k = 4096 +bm = 128 +bk = 64 +bmm = 64 + +[Kernels_3] +m = 4096 +k = 4096 +bm = 128 +bk = 64 +bmm = 32 + diff --git a/preset_kernels/Llama3-8B-1.58-100B-tokens/kernel_config_tl2.ini b/preset_kernels/Llama3-8B-1.58-100B-tokens/kernel_config_tl2.ini new file mode 100644 index 0000000..a767353 --- /dev/null +++ b/preset_kernels/Llama3-8B-1.58-100B-tokens/kernel_config_tl2.ini @@ -0,0 +1,28 @@ +[Kernels_0] +m = 14336 +k = 4096 +bm = 256 +bk = 96 +bmm = 32 + +[Kernels_1] +m = 4096 +k = 14336 +bm = 128 +bk = 96 +bmm = 32 + +[Kernels_2] +m = 1024 +k = 4096 +bm = 256 +bk = 96 +bmm = 32 + +[Kernels_3] +m = 4096 +k = 4096 +bm = 128 +bk = 96 +bmm = 32 + diff --git a/preset_kernels/bitnet_b1_58-3B/bitnet-lut-kernels-tl1.h b/preset_kernels/bitnet_b1_58-3B/bitnet-lut-kernels-tl1.h new file mode 100644 index 0000000..3f3f551 --- /dev/null +++ b/preset_kernels/bitnet_b1_58-3B/bitnet-lut-kernels-tl1.h @@ -0,0 +1,627 @@ +#if defined(GGML_BITNET_ARM_TL1) +#include "ggml-bitnet.h" +#define GGML_BITNET_MAX_NODES 8192 +static bool initialized = false; +static bitnet_tensor_extra * bitnet_tensor_extras = nullptr; +static size_t bitnet_tensor_extras_index = 0; +static void * aligned_malloc(size_t size) {{ +#if defined(_WIN32) + return _aligned_malloc(size, 64); +#else + void * ptr = nullptr; + posix_memalign(&ptr, 64, size); + return ptr; +#endif +}} +static void aligned_free(void * ptr) {{ +#if defined(_WIN32) + _aligned_free(ptr); +#else + free(ptr); +#endif +}} + +void per_tensor_quant(int k, void* lut_scales_, void* b_) {{ + bitnet_float_type* lut_scales = (bitnet_float_type*)lut_scales_; + bitnet_float_type* b = (bitnet_float_type*)b_; +#ifdef __ARM_NEON + float32x4_t temp_max = vdupq_n_f32(0); + for (int i=0; i < k / 4; i++) {{ + float32x4_t vec_bs = vld1q_f32(b + 4 * i); + float32x4_t abssum = vabsq_f32(vec_bs); + temp_max = vmaxq_f32(abssum, temp_max); + }} + float32_t scales = 127 / vmaxvq_f32(temp_max); + *lut_scales = scales; +#elif defined __AVX2__ + __m256 max_vec = _mm256_set1_ps(0.f); + const __m256 vec_sign = _mm256_set1_ps(-0.0f); + // #pragma unroll + for (int i = 0; i < k / 8; i++) {{ + __m256 vec_b = _mm256_loadu_ps(b + i * 8); + __m256 vec_babs = _mm256_andnot_ps(vec_sign, vec_b); + max_vec = _mm256_max_ps(vec_babs, max_vec); + }} + __m128 max1 = _mm_max_ps(_mm256_extractf128_ps(max_vec, 1), _mm256_castps256_ps128(max_vec)); + max1 = _mm_max_ps(max1, _mm_movehl_ps(max1, max1)); + max1 = _mm_max_ss(max1, _mm_movehdup_ps(max1)); + float scales = 127 / _mm_cvtss_f32(max1); + *lut_scales = scales; +#endif +}} + +void partial_max_reset(void* lut_scales_) {{ + bitnet_float_type* lut_scales = (bitnet_float_type*)lut_scales_; + *lut_scales = 0.0; +}} + +#ifdef __ARM_NEON +inline void Transpose_8_8( + int16x8_t *v0, + int16x8_t *v1, + int16x8_t *v2, + int16x8_t *v3, + int16x8_t *v4, + int16x8_t *v5, + int16x8_t *v6, + int16x8_t *v7) +{{ + int16x8x2_t q04 = vzipq_s16(*v0, *v4); + int16x8x2_t q15 = vzipq_s16(*v1, *v5); + int16x8x2_t q26 = vzipq_s16(*v2, *v6); + int16x8x2_t q37 = vzipq_s16(*v3, *v7); + + int16x8x2_t q0246_0 = vzipq_s16(q04.val[0], q26.val[0]); + int16x8x2_t q0246_1 = vzipq_s16(q04.val[1], q26.val[1]); + int16x8x2_t q1357_0 = vzipq_s16(q15.val[0], q37.val[0]); + int16x8x2_t q1357_1 = vzipq_s16(q15.val[1], q37.val[1]); + + int16x8x2_t q_fin_0 = vzipq_s16(q0246_0.val[0], q1357_0.val[0]); + int16x8x2_t q_fin_1 = vzipq_s16(q0246_0.val[1], q1357_0.val[1]); + int16x8x2_t q_fin_2 = vzipq_s16(q0246_1.val[0], q1357_1.val[0]); + int16x8x2_t q_fin_3 = vzipq_s16(q0246_1.val[1], q1357_1.val[1]); + + *v0 = q_fin_0.val[0]; + *v1 = q_fin_0.val[1]; + *v2 = q_fin_1.val[0]; + *v3 = q_fin_1.val[1]; + *v4 = q_fin_2.val[0]; + *v5 = q_fin_2.val[1]; + *v6 = q_fin_3.val[0]; + *v7 = q_fin_3.val[1]; +}} +#endif + +template +inline void lut_ctor(int8_t* qlut, bitnet_float_type* b, bitnet_float_type* lut_scales) {{ +#ifdef __ARM_NEON + int16x8_t vec_lut[16]; + float32_t scales = *lut_scales; + uint8_t tbl_mask[16]; + tbl_mask[0] = 0; + tbl_mask[1] = 2; + tbl_mask[2] = 4; + tbl_mask[3] = 6; + tbl_mask[4] = 8; + tbl_mask[5] = 10; + tbl_mask[6] = 12; + tbl_mask[7] = 14; + tbl_mask[8] = 1; + tbl_mask[9] = 3; + tbl_mask[10] = 5; + tbl_mask[11] = 7; + tbl_mask[12] = 9; + tbl_mask[13] = 11; + tbl_mask[14] = 13; + tbl_mask[15] = 15; + uint8x16_t tbl_mask_q = vld1q_u8(tbl_mask); +#pragma unroll + for (int k = 0; k < act_k / 16; ++k) {{ + float32x4x2_t vec_bs_x0 = vld2q_f32(b + k * 16); + float32x4x2_t vec_bs_x1 = vld2q_f32(b + k * 16 + 8); + float32x4_t vec_f_0 = vmulq_n_f32(vec_bs_x0.val[0], scales); + float32x4_t vec_f_1 = vmulq_n_f32(vec_bs_x0.val[1], scales); + float32x4_t vec_f_2 = vmulq_n_f32(vec_bs_x1.val[0], scales); + float32x4_t vec_f_3 = vmulq_n_f32(vec_bs_x1.val[1], scales); + int32x4_t vec_b_0 = vcvtnq_s32_f32(vec_f_0); + int32x4_t vec_b_1 = vcvtnq_s32_f32(vec_f_1); + int32x4_t vec_b_2 = vcvtnq_s32_f32(vec_f_2); + int32x4_t vec_b_3 = vcvtnq_s32_f32(vec_f_3); + int16x4_t vec_b16_0 = vmovn_s32(vec_b_0); + int16x4_t vec_b16_1 = vmovn_s32(vec_b_1); + int16x4_t vec_b16_2 = vmovn_s32(vec_b_2); + int16x4_t vec_b16_3 = vmovn_s32(vec_b_3); + int16x8_t vec_bs_0 = vcombine_s16(vec_b16_0, vec_b16_2); + int16x8_t vec_bs_1 = vcombine_s16(vec_b16_1, vec_b16_3); + vec_lut[0] = vdupq_n_s16(0); + vec_lut[0] = vec_lut[0] - vec_bs_0; + vec_lut[0] = vec_lut[0] - vec_bs_1; + vec_lut[1] = vdupq_n_s16(0); + vec_lut[1] = vec_lut[1] - vec_bs_0; + vec_lut[2] = vdupq_n_s16(0); + vec_lut[2] = vec_lut[2] - vec_bs_0; + vec_lut[2] = vec_lut[2] + vec_bs_1; + vec_lut[3] = vdupq_n_s16(0); + vec_lut[3] = vec_lut[3] - vec_bs_1; + vec_lut[4] = vdupq_n_s16(0); + vec_lut[5] = vec_bs_1; + vec_lut[6] = vec_bs_0; + vec_lut[6] = vec_lut[6] - vec_bs_1; + vec_lut[7] = vec_bs_0; + vec_lut[8] = vec_bs_0; + vec_lut[8] = vec_lut[8] + vec_bs_1; + Transpose_8_8(&(vec_lut[0]), &(vec_lut[1]), &(vec_lut[2]), &(vec_lut[3]), + &(vec_lut[4]), &(vec_lut[5]), &(vec_lut[6]), &(vec_lut[7])); + Transpose_8_8(&(vec_lut[8]), &(vec_lut[9]), &(vec_lut[10]), &(vec_lut[11]), + &(vec_lut[12]), &(vec_lut[13]), &(vec_lut[14]), &(vec_lut[15])); +#pragma unroll + for (int idx = 0; idx < 8; idx++) {{ + int8x16_t q0_s = vqtbl1q_s8(vreinterpretq_s8_s16(vec_lut[idx]), tbl_mask_q); + int8x8_t q0_low = vget_low_s8(q0_s); + int8x8_t q0_high = vget_high_s8(q0_s); + int8x16_t q1_s = vqtbl1q_s8(vreinterpretq_s8_s16(vec_lut[idx + 8]), tbl_mask_q); + int8x8_t q1_low = vget_low_s8(q1_s); + int8x8_t q1_high = vget_high_s8(q1_s); + vst1_s8(qlut + k * 16 * 8 * 2 + idx * 16 * 2, q0_high); + vst1_s8(qlut + k * 16 * 8 * 2 + idx * 16 * 2 + 8, q1_high); + vst1_s8(qlut + k * 16 * 8 * 2 + idx * 16 * 2 + 16, q0_low); + vst1_s8(qlut + k * 16 * 8 * 2 + idx * 16 * 2 + 24, q1_low); + }} + }} +#endif +}} + +static bool is_type_supported(enum ggml_type type) {{ + if (type == GGML_TYPE_Q4_0 || + type == GGML_TYPE_TL1) {{ + return true; + }} else {{ + return false; + }} +}} +#include + +#define BM3200_8640 160 +#define BBK3200_8640 64 +inline void tbl_impl_3200_8640(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __ARM_NEON + const int KK = BBK3200_8640 / 2; + const uint8x16_t vec_mask = vdupq_n_u8(0x0f); + const int8x16_t vec_zero = vdupq_n_s16(0x0000); + int8x16_t vec_lut[2 * KK]; + int16x8_t vec_c[4]; +#pragma unroll + for (int k = 0; k < 2 * KK; k++) { + vec_lut[k] = vld1q_s8(lut + k * 16); + } + +#pragma unroll + for (int i = 0; i < BM3200_8640; i += 32) { + #pragma unroll + for (int i=0; i<4; i++) { + vec_c[i] = vandq_s16(vec_c[i], vec_zero); + } + +#pragma unroll + for (int k = 0; k < KK / 4; k++) { + + uint8x16_t vec_a_0 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 0 * 16); + uint8x16_t vec_a0_top = vshrq_n_u8(vec_a_0, 4); + uint8x16_t vec_a0_bot = vandq_u8(vec_a_0, vec_mask); + int8x16_t vec_v_0_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 0], vec_a0_top); + int8x16_t vec_v_0_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 1], vec_a0_top); + int8x16_t vec_v_0_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 2], vec_a0_bot); + int8x16_t vec_v_0_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 3], vec_a0_bot); + int8x16x2_t vec_v_left_0 = vzipq_s8(vec_v_0_left_tmp1, vec_v_0_left_tmp0); + int8x16x2_t vec_v_right_0 = vzipq_s8(vec_v_0_right_tmp1, vec_v_0_right_tmp0); + vec_c[0] += vec_v_left_0.val[0]; + vec_c[0] += vec_v_right_0.val[0]; + vec_c[1] += vec_v_left_0.val[1]; + vec_c[1] += vec_v_right_0.val[1]; + + uint8x16_t vec_a_1 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 1 * 16); + uint8x16_t vec_a1_top = vshrq_n_u8(vec_a_1, 4); + uint8x16_t vec_a1_bot = vandq_u8(vec_a_1, vec_mask); + int8x16_t vec_v_1_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 4], vec_a1_top); + int8x16_t vec_v_1_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 5], vec_a1_top); + int8x16_t vec_v_1_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 6], vec_a1_bot); + int8x16_t vec_v_1_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 7], vec_a1_bot); + int8x16x2_t vec_v_left_1 = vzipq_s8(vec_v_1_left_tmp1, vec_v_1_left_tmp0); + int8x16x2_t vec_v_right_1 = vzipq_s8(vec_v_1_right_tmp1, vec_v_1_right_tmp0); + vec_c[0] += vec_v_left_1.val[0]; + vec_c[0] += vec_v_right_1.val[0]; + vec_c[1] += vec_v_left_1.val[1]; + vec_c[1] += vec_v_right_1.val[1]; + + uint8x16_t vec_a_2 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 2 * 16); + uint8x16_t vec_a2_top = vshrq_n_u8(vec_a_2, 4); + uint8x16_t vec_a2_bot = vandq_u8(vec_a_2, vec_mask); + int8x16_t vec_v_2_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 0], vec_a2_top); + int8x16_t vec_v_2_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 1], vec_a2_top); + int8x16_t vec_v_2_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 2], vec_a2_bot); + int8x16_t vec_v_2_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 3], vec_a2_bot); + int8x16x2_t vec_v_left_2 = vzipq_s8(vec_v_2_left_tmp1, vec_v_2_left_tmp0); + int8x16x2_t vec_v_right_2 = vzipq_s8(vec_v_2_right_tmp1, vec_v_2_right_tmp0); + vec_c[2] += vec_v_left_2.val[0]; + vec_c[2] += vec_v_right_2.val[0]; + vec_c[3] += vec_v_left_2.val[1]; + vec_c[3] += vec_v_right_2.val[1]; + + uint8x16_t vec_a_3 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 3 * 16); + uint8x16_t vec_a3_top = vshrq_n_u8(vec_a_3, 4); + uint8x16_t vec_a3_bot = vandq_u8(vec_a_3, vec_mask); + int8x16_t vec_v_3_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 4], vec_a3_top); + int8x16_t vec_v_3_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 5], vec_a3_top); + int8x16_t vec_v_3_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 6], vec_a3_bot); + int8x16_t vec_v_3_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 7], vec_a3_bot); + int8x16x2_t vec_v_left_3 = vzipq_s8(vec_v_3_left_tmp1, vec_v_3_left_tmp0); + int8x16x2_t vec_v_right_3 = vzipq_s8(vec_v_3_right_tmp1, vec_v_3_right_tmp0); + vec_c[2] += vec_v_left_3.val[0]; + vec_c[2] += vec_v_right_3.val[0]; + vec_c[3] += vec_v_left_3.val[1]; + vec_c[3] += vec_v_right_3.val[1]; + + } + + int32x4_t vec_v_bot_low_low_0 = vmovl_s16(vget_low_s16(vec_c[0])); + int32x4_t vec_v_bot_low_high_0 = vmovl_high_s16(vec_c[0]); + vst1q_s32(c + i + 0, vld1q_s32(c + i + 0) + vec_v_bot_low_low_0); + vst1q_s32(c + i + 4, vld1q_s32(c + i + 4) + vec_v_bot_low_high_0); + int32x4_t vec_v_bot_low_low_1 = vmovl_s16(vget_low_s16(vec_c[1])); + int32x4_t vec_v_bot_low_high_1 = vmovl_high_s16(vec_c[1]); + vst1q_s32(c + i + 8, vld1q_s32(c + i + 8) + vec_v_bot_low_low_1); + vst1q_s32(c + i + 12, vld1q_s32(c + i + 12) + vec_v_bot_low_high_1); + int32x4_t vec_v_bot_low_low_2 = vmovl_s16(vget_low_s16(vec_c[2])); + int32x4_t vec_v_bot_low_high_2 = vmovl_high_s16(vec_c[2]); + vst1q_s32(c + i + 16, vld1q_s32(c + i + 16) + vec_v_bot_low_low_2); + vst1q_s32(c + i + 20, vld1q_s32(c + i + 20) + vec_v_bot_low_high_2); + int32x4_t vec_v_bot_low_low_3 = vmovl_s16(vget_low_s16(vec_c[3])); + int32x4_t vec_v_bot_low_high_3 = vmovl_high_s16(vec_c[3]); + vst1q_s32(c + i + 24, vld1q_s32(c + i + 24) + vec_v_bot_low_low_3); + vst1q_s32(c + i + 28, vld1q_s32(c + i + 28) + vec_v_bot_low_high_3); + + } +#endif +} + +int32_t qgemm_lut_3200_8640(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BM3200_8640]; + memset(&(CBits[0]), 0, BM3200_8640 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 8640 / BBK3200_8640; ++k_outer) { + tbl_impl_3200_8640((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK3200_8640 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK3200_8640 / 2 / 2 * BM3200_8640)]))); + } +#pragma unroll + for (int i = 0; i < BM3200_8640; i++) { + ((bitnet_float_type*)C)[i] = (((int32_t*)CBits)[i]) / ((bitnet_float_type*)LUT_Scales)[0] * ((bitnet_float_type*)Scales)[0]; + } + return 0; +}; +#include + +#define BM3200_3200 320 +#define BBK3200_3200 128 +inline void tbl_impl_3200_3200(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __ARM_NEON + const int KK = BBK3200_3200 / 2; + const uint8x16_t vec_mask = vdupq_n_u8(0x0f); + const int8x16_t vec_zero = vdupq_n_s16(0x0000); + int8x16_t vec_lut[2 * KK]; + int16x8_t vec_c[8]; +#pragma unroll + for (int k = 0; k < 2 * KK; k++) { + vec_lut[k] = vld1q_s8(lut + k * 16); + } + +#pragma unroll + for (int i = 0; i < BM3200_3200; i += 64) { + #pragma unroll + for (int i=0; i<8; i++) { + vec_c[i] = vandq_s16(vec_c[i], vec_zero); + } + +#pragma unroll + for (int k = 0; k < KK / 2; k++) { + + uint8x16_t vec_a_0 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 0 * 16); + uint8x16_t vec_a0_top = vshrq_n_u8(vec_a_0, 4); + uint8x16_t vec_a0_bot = vandq_u8(vec_a_0, vec_mask); + int8x16_t vec_v_0_left_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 0], vec_a0_top); + int8x16_t vec_v_0_left_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 1], vec_a0_top); + int8x16_t vec_v_0_right_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 2], vec_a0_bot); + int8x16_t vec_v_0_right_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 3], vec_a0_bot); + int8x16x2_t vec_v_left_0 = vzipq_s8(vec_v_0_left_tmp1, vec_v_0_left_tmp0); + int8x16x2_t vec_v_right_0 = vzipq_s8(vec_v_0_right_tmp1, vec_v_0_right_tmp0); + vec_c[0] += vec_v_left_0.val[0]; + vec_c[0] += vec_v_right_0.val[0]; + vec_c[1] += vec_v_left_0.val[1]; + vec_c[1] += vec_v_right_0.val[1]; + + uint8x16_t vec_a_1 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 1 * 16); + uint8x16_t vec_a1_top = vshrq_n_u8(vec_a_1, 4); + uint8x16_t vec_a1_bot = vandq_u8(vec_a_1, vec_mask); + int8x16_t vec_v_1_left_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 0], vec_a1_top); + int8x16_t vec_v_1_left_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 1], vec_a1_top); + int8x16_t vec_v_1_right_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 2], vec_a1_bot); + int8x16_t vec_v_1_right_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 3], vec_a1_bot); + int8x16x2_t vec_v_left_1 = vzipq_s8(vec_v_1_left_tmp1, vec_v_1_left_tmp0); + int8x16x2_t vec_v_right_1 = vzipq_s8(vec_v_1_right_tmp1, vec_v_1_right_tmp0); + vec_c[2] += vec_v_left_1.val[0]; + vec_c[2] += vec_v_right_1.val[0]; + vec_c[3] += vec_v_left_1.val[1]; + vec_c[3] += vec_v_right_1.val[1]; + + uint8x16_t vec_a_2 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 2 * 16); + uint8x16_t vec_a2_top = vshrq_n_u8(vec_a_2, 4); + uint8x16_t vec_a2_bot = vandq_u8(vec_a_2, vec_mask); + int8x16_t vec_v_2_left_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 0], vec_a2_top); + int8x16_t vec_v_2_left_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 1], vec_a2_top); + int8x16_t vec_v_2_right_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 2], vec_a2_bot); + int8x16_t vec_v_2_right_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 3], vec_a2_bot); + int8x16x2_t vec_v_left_2 = vzipq_s8(vec_v_2_left_tmp1, vec_v_2_left_tmp0); + int8x16x2_t vec_v_right_2 = vzipq_s8(vec_v_2_right_tmp1, vec_v_2_right_tmp0); + vec_c[4] += vec_v_left_2.val[0]; + vec_c[4] += vec_v_right_2.val[0]; + vec_c[5] += vec_v_left_2.val[1]; + vec_c[5] += vec_v_right_2.val[1]; + + uint8x16_t vec_a_3 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 3 * 16); + uint8x16_t vec_a3_top = vshrq_n_u8(vec_a_3, 4); + uint8x16_t vec_a3_bot = vandq_u8(vec_a_3, vec_mask); + int8x16_t vec_v_3_left_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 0], vec_a3_top); + int8x16_t vec_v_3_left_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 1], vec_a3_top); + int8x16_t vec_v_3_right_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 2], vec_a3_bot); + int8x16_t vec_v_3_right_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 3], vec_a3_bot); + int8x16x2_t vec_v_left_3 = vzipq_s8(vec_v_3_left_tmp1, vec_v_3_left_tmp0); + int8x16x2_t vec_v_right_3 = vzipq_s8(vec_v_3_right_tmp1, vec_v_3_right_tmp0); + vec_c[6] += vec_v_left_3.val[0]; + vec_c[6] += vec_v_right_3.val[0]; + vec_c[7] += vec_v_left_3.val[1]; + vec_c[7] += vec_v_right_3.val[1]; + + } + + int32x4_t vec_v_bot_low_low_0 = vmovl_s16(vget_low_s16(vec_c[0])); + int32x4_t vec_v_bot_low_high_0 = vmovl_high_s16(vec_c[0]); + vst1q_s32(c + i + 0, vld1q_s32(c + i + 0) + vec_v_bot_low_low_0); + vst1q_s32(c + i + 4, vld1q_s32(c + i + 4) + vec_v_bot_low_high_0); + int32x4_t vec_v_bot_low_low_1 = vmovl_s16(vget_low_s16(vec_c[1])); + int32x4_t vec_v_bot_low_high_1 = vmovl_high_s16(vec_c[1]); + vst1q_s32(c + i + 8, vld1q_s32(c + i + 8) + vec_v_bot_low_low_1); + vst1q_s32(c + i + 12, vld1q_s32(c + i + 12) + vec_v_bot_low_high_1); + int32x4_t vec_v_bot_low_low_2 = vmovl_s16(vget_low_s16(vec_c[2])); + int32x4_t vec_v_bot_low_high_2 = vmovl_high_s16(vec_c[2]); + vst1q_s32(c + i + 16, vld1q_s32(c + i + 16) + vec_v_bot_low_low_2); + vst1q_s32(c + i + 20, vld1q_s32(c + i + 20) + vec_v_bot_low_high_2); + int32x4_t vec_v_bot_low_low_3 = vmovl_s16(vget_low_s16(vec_c[3])); + int32x4_t vec_v_bot_low_high_3 = vmovl_high_s16(vec_c[3]); + vst1q_s32(c + i + 24, vld1q_s32(c + i + 24) + vec_v_bot_low_low_3); + vst1q_s32(c + i + 28, vld1q_s32(c + i + 28) + vec_v_bot_low_high_3); + int32x4_t vec_v_bot_low_low_4 = vmovl_s16(vget_low_s16(vec_c[4])); + int32x4_t vec_v_bot_low_high_4 = vmovl_high_s16(vec_c[4]); + vst1q_s32(c + i + 32, vld1q_s32(c + i + 32) + vec_v_bot_low_low_4); + vst1q_s32(c + i + 36, vld1q_s32(c + i + 36) + vec_v_bot_low_high_4); + int32x4_t vec_v_bot_low_low_5 = vmovl_s16(vget_low_s16(vec_c[5])); + int32x4_t vec_v_bot_low_high_5 = vmovl_high_s16(vec_c[5]); + vst1q_s32(c + i + 40, vld1q_s32(c + i + 40) + vec_v_bot_low_low_5); + vst1q_s32(c + i + 44, vld1q_s32(c + i + 44) + vec_v_bot_low_high_5); + int32x4_t vec_v_bot_low_low_6 = vmovl_s16(vget_low_s16(vec_c[6])); + int32x4_t vec_v_bot_low_high_6 = vmovl_high_s16(vec_c[6]); + vst1q_s32(c + i + 48, vld1q_s32(c + i + 48) + vec_v_bot_low_low_6); + vst1q_s32(c + i + 52, vld1q_s32(c + i + 52) + vec_v_bot_low_high_6); + int32x4_t vec_v_bot_low_low_7 = vmovl_s16(vget_low_s16(vec_c[7])); + int32x4_t vec_v_bot_low_high_7 = vmovl_high_s16(vec_c[7]); + vst1q_s32(c + i + 56, vld1q_s32(c + i + 56) + vec_v_bot_low_low_7); + vst1q_s32(c + i + 60, vld1q_s32(c + i + 60) + vec_v_bot_low_high_7); + + } +#endif +} + +int32_t qgemm_lut_3200_3200(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BM3200_3200]; + memset(&(CBits[0]), 0, BM3200_3200 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 3200 / BBK3200_3200; ++k_outer) { + tbl_impl_3200_3200((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK3200_3200 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK3200_3200 / 2 / 2 * BM3200_3200)]))); + } +#pragma unroll + for (int i = 0; i < BM3200_3200; i++) { + ((bitnet_float_type*)C)[i] = (((int32_t*)CBits)[i]) / ((bitnet_float_type*)LUT_Scales)[0] * ((bitnet_float_type*)Scales)[0]; + } + return 0; +}; +#include + +#define BM8640_3200 320 +#define BBK8640_3200 64 +inline void tbl_impl_8640_3200(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __ARM_NEON + const int KK = BBK8640_3200 / 2; + const uint8x16_t vec_mask = vdupq_n_u8(0x0f); + const int8x16_t vec_zero = vdupq_n_s16(0x0000); + int8x16_t vec_lut[2 * KK]; + int16x8_t vec_c[4]; +#pragma unroll + for (int k = 0; k < 2 * KK; k++) { + vec_lut[k] = vld1q_s8(lut + k * 16); + } + +#pragma unroll + for (int i = 0; i < BM8640_3200; i += 32) { + #pragma unroll + for (int i=0; i<4; i++) { + vec_c[i] = vandq_s16(vec_c[i], vec_zero); + } + +#pragma unroll + for (int k = 0; k < KK / 4; k++) { + + uint8x16_t vec_a_0 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 0 * 16); + uint8x16_t vec_a0_top = vshrq_n_u8(vec_a_0, 4); + uint8x16_t vec_a0_bot = vandq_u8(vec_a_0, vec_mask); + int8x16_t vec_v_0_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 0], vec_a0_top); + int8x16_t vec_v_0_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 1], vec_a0_top); + int8x16_t vec_v_0_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 2], vec_a0_bot); + int8x16_t vec_v_0_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 3], vec_a0_bot); + int8x16x2_t vec_v_left_0 = vzipq_s8(vec_v_0_left_tmp1, vec_v_0_left_tmp0); + int8x16x2_t vec_v_right_0 = vzipq_s8(vec_v_0_right_tmp1, vec_v_0_right_tmp0); + vec_c[0] += vec_v_left_0.val[0]; + vec_c[0] += vec_v_right_0.val[0]; + vec_c[1] += vec_v_left_0.val[1]; + vec_c[1] += vec_v_right_0.val[1]; + + uint8x16_t vec_a_1 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 1 * 16); + uint8x16_t vec_a1_top = vshrq_n_u8(vec_a_1, 4); + uint8x16_t vec_a1_bot = vandq_u8(vec_a_1, vec_mask); + int8x16_t vec_v_1_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 4], vec_a1_top); + int8x16_t vec_v_1_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 5], vec_a1_top); + int8x16_t vec_v_1_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 6], vec_a1_bot); + int8x16_t vec_v_1_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 7], vec_a1_bot); + int8x16x2_t vec_v_left_1 = vzipq_s8(vec_v_1_left_tmp1, vec_v_1_left_tmp0); + int8x16x2_t vec_v_right_1 = vzipq_s8(vec_v_1_right_tmp1, vec_v_1_right_tmp0); + vec_c[0] += vec_v_left_1.val[0]; + vec_c[0] += vec_v_right_1.val[0]; + vec_c[1] += vec_v_left_1.val[1]; + vec_c[1] += vec_v_right_1.val[1]; + + uint8x16_t vec_a_2 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 2 * 16); + uint8x16_t vec_a2_top = vshrq_n_u8(vec_a_2, 4); + uint8x16_t vec_a2_bot = vandq_u8(vec_a_2, vec_mask); + int8x16_t vec_v_2_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 0], vec_a2_top); + int8x16_t vec_v_2_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 1], vec_a2_top); + int8x16_t vec_v_2_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 2], vec_a2_bot); + int8x16_t vec_v_2_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 3], vec_a2_bot); + int8x16x2_t vec_v_left_2 = vzipq_s8(vec_v_2_left_tmp1, vec_v_2_left_tmp0); + int8x16x2_t vec_v_right_2 = vzipq_s8(vec_v_2_right_tmp1, vec_v_2_right_tmp0); + vec_c[2] += vec_v_left_2.val[0]; + vec_c[2] += vec_v_right_2.val[0]; + vec_c[3] += vec_v_left_2.val[1]; + vec_c[3] += vec_v_right_2.val[1]; + + uint8x16_t vec_a_3 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 3 * 16); + uint8x16_t vec_a3_top = vshrq_n_u8(vec_a_3, 4); + uint8x16_t vec_a3_bot = vandq_u8(vec_a_3, vec_mask); + int8x16_t vec_v_3_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 4], vec_a3_top); + int8x16_t vec_v_3_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 5], vec_a3_top); + int8x16_t vec_v_3_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 6], vec_a3_bot); + int8x16_t vec_v_3_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 7], vec_a3_bot); + int8x16x2_t vec_v_left_3 = vzipq_s8(vec_v_3_left_tmp1, vec_v_3_left_tmp0); + int8x16x2_t vec_v_right_3 = vzipq_s8(vec_v_3_right_tmp1, vec_v_3_right_tmp0); + vec_c[2] += vec_v_left_3.val[0]; + vec_c[2] += vec_v_right_3.val[0]; + vec_c[3] += vec_v_left_3.val[1]; + vec_c[3] += vec_v_right_3.val[1]; + + } + + int32x4_t vec_v_bot_low_low_0 = vmovl_s16(vget_low_s16(vec_c[0])); + int32x4_t vec_v_bot_low_high_0 = vmovl_high_s16(vec_c[0]); + vst1q_s32(c + i + 0, vld1q_s32(c + i + 0) + vec_v_bot_low_low_0); + vst1q_s32(c + i + 4, vld1q_s32(c + i + 4) + vec_v_bot_low_high_0); + int32x4_t vec_v_bot_low_low_1 = vmovl_s16(vget_low_s16(vec_c[1])); + int32x4_t vec_v_bot_low_high_1 = vmovl_high_s16(vec_c[1]); + vst1q_s32(c + i + 8, vld1q_s32(c + i + 8) + vec_v_bot_low_low_1); + vst1q_s32(c + i + 12, vld1q_s32(c + i + 12) + vec_v_bot_low_high_1); + int32x4_t vec_v_bot_low_low_2 = vmovl_s16(vget_low_s16(vec_c[2])); + int32x4_t vec_v_bot_low_high_2 = vmovl_high_s16(vec_c[2]); + vst1q_s32(c + i + 16, vld1q_s32(c + i + 16) + vec_v_bot_low_low_2); + vst1q_s32(c + i + 20, vld1q_s32(c + i + 20) + vec_v_bot_low_high_2); + int32x4_t vec_v_bot_low_low_3 = vmovl_s16(vget_low_s16(vec_c[3])); + int32x4_t vec_v_bot_low_high_3 = vmovl_high_s16(vec_c[3]); + vst1q_s32(c + i + 24, vld1q_s32(c + i + 24) + vec_v_bot_low_low_3); + vst1q_s32(c + i + 28, vld1q_s32(c + i + 28) + vec_v_bot_low_high_3); + + } +#endif +} + +int32_t qgemm_lut_8640_3200(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BM8640_3200]; + memset(&(CBits[0]), 0, BM8640_3200 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 3200 / BBK8640_3200; ++k_outer) { + tbl_impl_8640_3200((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK8640_3200 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK8640_3200 / 2 / 2 * BM8640_3200)]))); + } +#pragma unroll + for (int i = 0; i < BM8640_3200; i++) { + ((bitnet_float_type*)C)[i] = (((int32_t*)CBits)[i]) / ((bitnet_float_type*)LUT_Scales)[0] * ((bitnet_float_type*)Scales)[0]; + } + return 0; +}; + +template +void preprocessor_k(void* B, void* LUT_Scales, void* QLUT) {{ + partial_max_reset((&(((bitnet_float_type*)LUT_Scales)[0]))); + per_tensor_quant(K, (&(((bitnet_float_type*)LUT_Scales)[0])), (&(((bitnet_float_type*)B)[0]))); + + lut_ctor((&(((int8_t*)QLUT)[0])), (&(((bitnet_float_type*)B)[0])), (&(((bitnet_float_type*)LUT_Scales)[0]))); +}} +void ggml_preprocessor(int m, int k, void* B, void* LUT_Scales, void* QLUT) { + if (m == 3200 && k == 8640) { + preprocessor_k<8640>(B, LUT_Scales, QLUT); + } + else if (m == 3200 && k == 3200) { + preprocessor_k<3200>(B, LUT_Scales, QLUT); + } + else if (m == 8640 && k == 3200) { + preprocessor_k<3200>(B, LUT_Scales, QLUT); + } +} +void ggml_qgemm_lut(int m, int k, void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + if (m == 3200 && k == 8640) { + qgemm_lut_3200_8640(A, LUT, Scales, LUT_Scales, C); + } + else if (m == 3200 && k == 3200) { + qgemm_lut_3200_3200(A, LUT, Scales, LUT_Scales, C); + } + else if (m == 8640 && k == 3200) { + qgemm_lut_8640_3200(A, LUT, Scales, LUT_Scales, C); + } +} + +void ggml_bitnet_transform_tensor(struct ggml_tensor * tensor) { + if (!(is_type_supported(tensor->type) && tensor->backend == GGML_BACKEND_TYPE_CPU && tensor->extra == nullptr)) { + return; + } + + int k = tensor->ne[0]; + int m = tensor->ne[1]; + const int lut_scales_size = 1; + const int scales_size = 1; + int bk = 0; + int bm = 0; + + if (m == 3200 && k == 8640) { + bm = BM3200_8640; + bk = BBK3200_8640; + } +else if (m == 3200 && k == 3200) { + bm = BM3200_3200; + bk = BBK3200_3200; + } +else if (m == 8640 && k == 3200) { + bm = BM8640_3200; + bk = BBK8640_3200; + } + + const int n_tile_num = m / bm; + const int BK = bk; + uint8_t * qweights; + bitnet_float_type * scales; + + scales = (bitnet_float_type *) aligned_malloc(sizeof(bitnet_float_type)); + qweights = (uint8_t *) tensor->data; + float * i2_scales = (float * )(qweights + k * m / 4); + scales[0] = (bitnet_float_type) i2_scales[0]; + + tensor->extra = bitnet_tensor_extras + bitnet_tensor_extras_index; + bitnet_tensor_extras[bitnet_tensor_extras_index++] = { + /* .lut_scales_size = */ lut_scales_size, + /* .scales_size = */ scales_size, + /* .n_tile_num = */ n_tile_num, + /* .qweights = */ qweights, + /* .scales = */ scales + }; +} +#endif \ No newline at end of file diff --git a/preset_kernels/bitnet_b1_58-3B/bitnet-lut-kernels-tl2.h b/preset_kernels/bitnet_b1_58-3B/bitnet-lut-kernels-tl2.h new file mode 100644 index 0000000..678b0f3 --- /dev/null +++ b/preset_kernels/bitnet_b1_58-3B/bitnet-lut-kernels-tl2.h @@ -0,0 +1,1167 @@ +#if defined(GGML_BITNET_X86_TL2) +#include "ggml-bitnet.h" +#define GGML_BITNET_MAX_NODES 8192 +static bool initialized = false; +static bitnet_tensor_extra * bitnet_tensor_extras = nullptr; +static size_t bitnet_tensor_extras_index = 0; +static void * aligned_malloc(size_t size) { +#if defined(_WIN32) + return _aligned_malloc(size, 64); +#else + void * ptr = nullptr; + posix_memalign(&ptr, 64, size); + return ptr; +#endif +} + +static void aligned_free(void * ptr) { +#if defined(_WIN32) + _aligned_free(ptr); +#else + free(ptr); +#endif +} +#define BK2 32 +#if defined __AVX2__ +inline void _mm256_merge_epi32(const __m256i v0, const __m256i v1, __m256i *vl, __m256i *vh) +{ + __m256i va = _mm256_permute4x64_epi64(v0, _MM_SHUFFLE(3, 1, 2, 0)); + __m256i vb = _mm256_permute4x64_epi64(v1, _MM_SHUFFLE(3, 1, 2, 0)); + *vl = _mm256_unpacklo_epi32(va, vb); + *vh = _mm256_unpackhi_epi32(va, vb); +} +inline void _mm256_merge_epi64(const __m256i v0, const __m256i v1, __m256i *vl, __m256i *vh) +{ + __m256i va = _mm256_permute4x64_epi64(v0, _MM_SHUFFLE(3, 1, 2, 0)); + __m256i vb = _mm256_permute4x64_epi64(v1, _MM_SHUFFLE(3, 1, 2, 0)); + *vl = _mm256_unpacklo_epi64(va, vb); + *vh = _mm256_unpackhi_epi64(va, vb); +} +inline void _mm256_merge_si128(const __m256i v0, const __m256i v1, __m256i *vl, __m256i *vh) +{ + *vl = _mm256_permute2x128_si256(v0, v1, _MM_SHUFFLE(0, 2, 0, 0)); + *vh = _mm256_permute2x128_si256(v0, v1, _MM_SHUFFLE(0, 3, 0, 1)); +} +inline void Transpose_8_8( + __m256i *v0, + __m256i *v1, + __m256i *v2, + __m256i *v3, + __m256i *v4, + __m256i *v5, + __m256i *v6, + __m256i *v7) +{ + __m256i w0, w1, w2, w3, w4, w5, w6, w7; + __m256i x0, x1, x2, x3, x4, x5, x6, x7; + _mm256_merge_epi32(*v0, *v1, &w0, &w1); + _mm256_merge_epi32(*v2, *v3, &w2, &w3); + _mm256_merge_epi32(*v4, *v5, &w4, &w5); + _mm256_merge_epi32(*v6, *v7, &w6, &w7); + _mm256_merge_epi64(w0, w2, &x0, &x1); + _mm256_merge_epi64(w1, w3, &x2, &x3); + _mm256_merge_epi64(w4, w6, &x4, &x5); + _mm256_merge_epi64(w5, w7, &x6, &x7); + _mm256_merge_si128(x0, x4, v0, v1); + _mm256_merge_si128(x1, x5, v2, v3); + _mm256_merge_si128(x2, x6, v4, v5); + _mm256_merge_si128(x3, x7, v6, v7); +} +#endif +inline int32_t per_tensor_quant(int k, void* lut_scales_, void* b_) { + bitnet_float_type* lut_scales = (bitnet_float_type*)lut_scales_; + bitnet_float_type* b = (bitnet_float_type*)b_; +#if defined __AVX2__ + __m256 max_vec = _mm256_set1_ps(0.f); + const __m256 vec_sign = _mm256_set1_ps(-0.0f); + for (int i = 0; i < k / 8; i++) { + __m256 vec_b = _mm256_loadu_ps(b + i * 8); + __m256 vec_babs = _mm256_andnot_ps(vec_sign, vec_b); + max_vec = _mm256_max_ps(vec_babs, max_vec); + } + __m128 max1 = _mm_max_ps(_mm256_extractf128_ps(max_vec, 1), _mm256_castps256_ps128(max_vec)); + max1 = _mm_max_ps(max1, _mm_movehl_ps(max1, max1)); + max1 = _mm_max_ss(max1, _mm_movehdup_ps(max1)); + float scales = 127 / _mm_cvtss_f32(max1); + *lut_scales = scales; +#endif + return 0; +} +inline int32_t partial_max_reset(int32_t bs, void* lut_scales_) { + bitnet_float_type* lut_scales = (bitnet_float_type*)lut_scales_; + #pragma unroll + for (int i=0; i< bs; i++) { + lut_scales[i] = 0.0; + } + return 0; +} +template +inline int32_t three_lut_ctor(int8_t* qlut, bitnet_float_type* b, bitnet_float_type* lut_scales) { +#if defined __AVX2__ + __m256 vec_lut[16]; + const __m256i vec_bi = _mm256_set_epi32(84, 72, 60, 48, 36, 24, 12, 0); + float scales = *lut_scales; + __m256i shuffle_mask = _mm256_set_epi8( + 0x0f, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x03, 0x01, + 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00, + 0x0f, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x03, 0x01, + 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00 + ); +#pragma unroll + for (int k = 0; k < act_k / 24; ++k) { + __m256 vec_b0 = _mm256_i32gather_ps(b + k * 24 + 0, vec_bi, 1); + __m256 vec_b1 = _mm256_i32gather_ps(b + k * 24 + 1, vec_bi, 1); + __m256 vec_b2 = _mm256_i32gather_ps(b + k * 24 + 2, vec_bi, 1); + + __m256i vec_b0i = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b0, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC)); + __m256i vec_b1i = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b1, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC)); + __m256i vec_b2i = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b2, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC)); + + vec_lut[15] = _mm256_setzero_si256(); + vec_lut[14] = _mm256_setzero_si256(); + vec_lut[13] = vec_b0i; + vec_lut[13] = _mm256_add_epi32(vec_lut[13], vec_b1i); + vec_lut[13] = _mm256_add_epi32(vec_lut[13], vec_b2i); + vec_lut[12] = vec_b0i; + vec_lut[12] = _mm256_add_epi32(vec_lut[12], vec_b1i); + vec_lut[11] = vec_b0i; + vec_lut[11] = _mm256_add_epi32(vec_lut[11], vec_b1i); + vec_lut[11] = _mm256_sub_epi32(vec_lut[11], vec_b2i); + vec_lut[10] = vec_b0i; + vec_lut[10] = _mm256_add_epi32(vec_lut[10], vec_b2i); + vec_lut[9] = vec_b0i; + vec_lut[8] = vec_b0i; + vec_lut[8] = _mm256_sub_epi32(vec_lut[8], vec_b2i); + vec_lut[7] = vec_b0i; + vec_lut[7] = _mm256_sub_epi32(vec_lut[7], vec_b1i); + vec_lut[7] = _mm256_add_epi32(vec_lut[7], vec_b2i); + vec_lut[6] = vec_b0i; + vec_lut[6] = _mm256_sub_epi32(vec_lut[6], vec_b1i); + vec_lut[5] = vec_b0i; + vec_lut[5] = _mm256_sub_epi32(vec_lut[5], vec_b1i); + vec_lut[5] = _mm256_sub_epi32(vec_lut[5], vec_b2i); + vec_lut[4] = vec_b1i; + vec_lut[4] = _mm256_add_epi32(vec_lut[4], vec_b2i); + vec_lut[3] = vec_b1i; + vec_lut[2] = vec_b1i; + vec_lut[2] = _mm256_sub_epi32(vec_lut[2], vec_b2i); + vec_lut[1] = vec_b2i; + vec_lut[0] = _mm256_setzero_si256(); + __m256i ix[16]; + +#pragma unroll + for (int g = 0; g < 16; ++g) { + ix[g] = vec_lut[g]; + } + + Transpose_8_8(&(ix[0]), &(ix[1]), &(ix[2]), &(ix[3]), &(ix[4]), &(ix[5]),&(ix[6]), &(ix[7])); + Transpose_8_8(&(ix[8]), &(ix[9]), &(ix[10]), &(ix[11]), &(ix[12]), &(ix[13]),&(ix[14]), &(ix[15])); + +#pragma unroll + for (int g = 0; g < 8; ++g) { + ix[g] = _mm256_packs_epi32(ix[g], ix[g + 8]); + ix[g] = _mm256_permute4x64_epi64(ix[g], _MM_SHUFFLE(3, 1, 2, 0)); + ix[g] = _mm256_shuffle_epi8(ix[g], shuffle_mask); + ix[g] = _mm256_permute4x64_epi64(ix[g], _MM_SHUFFLE(3, 1, 2, 0)); + } + int8_t* qlut_i8 = reinterpret_cast(qlut); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 0 * 32 + 0), ix[0]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 1 * 32 + 0), ix[1]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 2 * 32 + 0), ix[2]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 3 * 32 + 0), ix[3]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 4 * 32 + 0), ix[4]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 5 * 32 + 0), ix[5]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 6 * 32 + 0), ix[6]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 7 * 32 + 0), ix[7]); + + } + + *lut_scales = scales; +#endif + return 0; +} + +template +inline int32_t two_lut_ctor(int8_t* qlut, bitnet_float_type* b, bitnet_float_type* lut_scales) { +#if defined __AVX2__ + __m256 vec_lut[16]; + const __m256i vec_bi = _mm256_set_epi32(56, 48, 40, 32, 24, 16, 8, 0); + float scales = *lut_scales; + __m256i shuffle_mask = _mm256_set_epi8( + 0x0f, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x03, 0x01, + 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00, + 0x0f, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x03, 0x01, + 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00 + ); +#pragma unroll + for (int k = 0; k < act_k / 16; ++k) { + __m256 vec_b0f = _mm256_i32gather_ps(b + k * 16 + 0, vec_bi, 1); + __m256 vec_b1f = _mm256_i32gather_ps(b + k * 16 + 1, vec_bi, 1); + + __m256i vec_b0 = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b0f, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC)); + __m256i vec_b1 = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b1f, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC)); + vec_lut[15] = _mm256_setzero_si256(); + vec_lut[14] = _mm256_setzero_si256(); + vec_lut[13] = _mm256_setzero_si256(); + vec_lut[12] = _mm256_setzero_si256(); + vec_lut[11] = _mm256_setzero_si256(); + vec_lut[10] = _mm256_setzero_si256(); + vec_lut[9] = _mm256_setzero_si256(); + vec_lut[8] = vec_b0; + vec_lut[8] = _mm256_add_epi32(vec_lut[8], vec_b1); + vec_lut[7] = vec_b0; + vec_lut[6] = vec_b0; + vec_lut[6] = _mm256_sub_epi32(vec_lut[6], vec_b1); + vec_lut[5] = vec_b1; + vec_lut[4] = _mm256_setzero_si256(); + vec_lut[3] = _mm256_setzero_si256(); + vec_lut[3] = _mm256_sub_epi32(vec_lut[3], vec_b1); + vec_lut[2] = _mm256_setzero_si256(); + vec_lut[2] = _mm256_sub_epi32(vec_lut[2], vec_b0); + vec_lut[2] = _mm256_add_epi32(vec_lut[2], vec_b1); + vec_lut[1] = _mm256_setzero_si256(); + vec_lut[1] = _mm256_sub_epi32(vec_lut[1], vec_b0); + vec_lut[0] = _mm256_setzero_si256(); + vec_lut[0] = _mm256_sub_epi32(vec_lut[0], vec_b0); + vec_lut[0] = _mm256_sub_epi32(vec_lut[0], vec_b1); + + __m256i ix[16]; +#pragma unroll + for (int g = 0; g < 16; ++g) { + ix[g] = vec_lut[g]; + } + + Transpose_8_8(&(ix[0]), &(ix[1]), &(ix[2]), &(ix[3]), &(ix[4]), &(ix[5]),&(ix[6]), &(ix[7])); + Transpose_8_8(&(ix[8]), &(ix[9]), &(ix[10]), &(ix[11]), &(ix[12]), &(ix[13]),&(ix[14]), &(ix[15])); + +#pragma unroll + for (int g = 0; g < 8; ++g) { + ix[g] = _mm256_packs_epi32(ix[g], ix[g + 8]); + ix[g] = _mm256_permute4x64_epi64(ix[g], _MM_SHUFFLE(3, 1, 2, 0)); + ix[g] = _mm256_shuffle_epi8(ix[g], shuffle_mask); + ix[g] = _mm256_permute4x64_epi64(ix[g], _MM_SHUFFLE(3, 1, 2, 0)); + } + + int8_t* qlut_i8 = reinterpret_cast(qlut); + + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 0 * 32 + 0), ix[0]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 1 * 32 + 0), ix[1]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 2 * 32 + 0), ix[2]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 3 * 32 + 0), ix[3]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 4 * 32 + 0), ix[4]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 5 * 32 + 0), ix[5]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 6 * 32 + 0), ix[6]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 7 * 32 + 0), ix[7]); + + } + *lut_scales = scales; +#endif + return 0; +} +static bool is_type_supported(enum ggml_type type) { + if (type == GGML_TYPE_Q4_0 || + type == GGML_TYPE_TL2) { + return true; + } else { + return false; + } +} +#include + +#define BM3200_8640 160 +#define BBK3200_8640 96 +template +inline void three_tbl_impl_3200_8640(int32_t* c, int8_t* lut, uint8_t* a, uint8_t* sign) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const __m256i vec_sign_mask = _mm256_set1_epi16(0x8000); + const __m256i vec_zero = _mm256_set1_epi8(0x00); + const __m256i vec_one = _mm256_set1_epi8(0xff); + const int KK = BBK3200_8640 / 3; +#pragma unroll + for (int i = 0; i < BM3200_8640; i += 32) { + __m256i vec_as[KK / 2]; + __m256i vec_signs[KK / 8]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } + #pragma unroll + for (int as = 0; as < KK / 8; as++) { + vec_signs[as] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(sign + i * KK / 8 + as * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + __m256i vec_sign = vec_signs[k]; + __m256i vec_a_0 = vec_as[k * 4 + 0]; + __m128i vec_k1_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0)), 15); + __m256i vec_sign_left_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 1)), 15); + __m256i vec_v_top_0 = _mm256_and_si256(_mm256_srli_epi16(vec_a_0, 4), vec_mask); + __m256i vec_v_top_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_0, vec_k1_0), vec_v_top_0); + __m256i vec_v_top_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_0, vec_k2_0), vec_v_top_0); + __m256i vec_sign_right_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 2)), 15); + __m256i vec_sign_right_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 3)), 15); + __m256i vec_v_bot_0 = _mm256_and_si256(vec_a_0, vec_mask); + __m256i vec_v_bot_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_0, vec_k3_0), vec_v_bot_0); + __m256i vec_v_bot_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_0, vec_k4_0), vec_v_bot_0); + __m256i vec_v_top_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_lo_0), vec_sign_left_lo_0); + __m256i vec_v_top_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_hi_0), vec_sign_left_hi_0); + __m256i vec_v_bot_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_lo_0), vec_sign_right_lo_0); + __m256i vec_v_bot_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_hi_0), vec_sign_right_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_0); + __m256i vec_a_1 = vec_as[k * 4 + 1]; + __m128i vec_k1_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1)), 15); + __m256i vec_sign_left_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 1)), 15); + __m256i vec_v_top_1 = _mm256_and_si256(_mm256_srli_epi16(vec_a_1, 4), vec_mask); + __m256i vec_v_top_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_1, vec_k1_1), vec_v_top_1); + __m256i vec_v_top_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_1, vec_k2_1), vec_v_top_1); + __m256i vec_sign_right_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 2)), 15); + __m256i vec_sign_right_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 3)), 15); + __m256i vec_v_bot_1 = _mm256_and_si256(vec_a_1, vec_mask); + __m256i vec_v_bot_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_1, vec_k3_1), vec_v_bot_1); + __m256i vec_v_bot_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_1, vec_k4_1), vec_v_bot_1); + __m256i vec_v_top_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_lo_1), vec_sign_left_lo_1); + __m256i vec_v_top_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_hi_1), vec_sign_left_hi_1); + __m256i vec_v_bot_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_lo_1), vec_sign_right_lo_1); + __m256i vec_v_bot_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_hi_1), vec_sign_right_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_1); + __m256i vec_a_2 = vec_as[k * 4 + 2]; + __m128i vec_k1_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2)), 15); + __m256i vec_sign_left_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 1)), 15); + __m256i vec_v_top_2 = _mm256_and_si256(_mm256_srli_epi16(vec_a_2, 4), vec_mask); + __m256i vec_v_top_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_2, vec_k1_2), vec_v_top_2); + __m256i vec_v_top_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_2, vec_k2_2), vec_v_top_2); + __m256i vec_sign_right_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 2)), 15); + __m256i vec_sign_right_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 3)), 15); + __m256i vec_v_bot_2 = _mm256_and_si256(vec_a_2, vec_mask); + __m256i vec_v_bot_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_2, vec_k3_2), vec_v_bot_2); + __m256i vec_v_bot_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_2, vec_k4_2), vec_v_bot_2); + __m256i vec_v_top_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_lo_2), vec_sign_left_lo_2); + __m256i vec_v_top_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_hi_2), vec_sign_left_hi_2); + __m256i vec_v_bot_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_lo_2), vec_sign_right_lo_2); + __m256i vec_v_bot_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_hi_2), vec_sign_right_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_2); + __m256i vec_a_3 = vec_as[k * 4 + 3]; + __m128i vec_k1_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3)), 15); + __m256i vec_sign_left_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 1)), 15); + __m256i vec_v_top_3 = _mm256_and_si256(_mm256_srli_epi16(vec_a_3, 4), vec_mask); + __m256i vec_v_top_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_3, vec_k1_3), vec_v_top_3); + __m256i vec_v_top_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_3, vec_k2_3), vec_v_top_3); + __m256i vec_sign_right_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 2)), 15); + __m256i vec_sign_right_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 3)), 15); + __m256i vec_v_bot_3 = _mm256_and_si256(vec_a_3, vec_mask); + __m256i vec_v_bot_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_3, vec_k3_3), vec_v_bot_3); + __m256i vec_v_bot_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_3, vec_k4_3), vec_v_bot_3); + __m256i vec_v_top_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_lo_3), vec_sign_left_lo_3); + __m256i vec_v_top_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_hi_3), vec_sign_left_hi_3); + __m256i vec_v_bot_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_lo_3), vec_sign_right_lo_3); + __m256i vec_v_bot_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_hi_3), vec_sign_right_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_3); + } + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM3200_8640 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM3200_8640 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM3200_8640 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM3200_8640 * bs)); + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM3200_8640 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM3200_8640 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM3200_8640 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM3200_8640 * bs), vec_gc3); + } + } +#endif +} + +template +inline int32_t two_tbl_impl3200_8640(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const int KK = BK2 / 2; +#pragma unroll + for (int i = 0; i < BM3200_8640; i += 32) { + __m256i vec_as[KK / 2]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + #pragma unroll + for (int j = 0; j < 4; j++) { + __m256i vec_a = vec_as[k * 4 + j]; + + __m128i vec_k1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 0 + K2 / 2 * 32 * bs)); + __m128i vec_k2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 16 + K2 / 2 * 32 * bs)); + __m128i vec_k3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 32 + K2 / 2 * 32 * bs)); + __m128i vec_k4 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 48 + K2 / 2 * 32 * bs)); + + __m256i vec_v_top = _mm256_and_si256(_mm256_srli_epi16(vec_a, 4), vec_mask); + __m256i vec_v_top_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1, vec_k1), vec_v_top); + __m256i vec_v_top_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2, vec_k2), vec_v_top); + + __m256i vec_v_bot = _mm256_and_si256(vec_a, vec_mask); + __m256i vec_v_bot_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3, vec_k3), vec_v_bot); + __m256i vec_v_bot_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4, vec_k4), vec_v_bot); + + __m256i vec_v_top_lo = _mm256_unpackhi_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_top_hi = _mm256_unpacklo_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_bot_lo = _mm256_unpackhi_epi8(vec_v_bot_fir, vec_v_bot_sec); + __m256i vec_v_bot_hi = _mm256_unpacklo_epi8(vec_v_bot_fir, vec_v_bot_sec); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo); + } + } + + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM3200_8640 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM3200_8640 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM3200_8640 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM3200_8640 * bs)); + + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM3200_8640 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM3200_8640 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM3200_8640 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM3200_8640 * bs), vec_gc3); + } + } +#endif + return 0; +} + +template +int32_t three_qgemm_lut_3200_8640(void* A, void* sign, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM3200_8640]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM3200_8640 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 8640 / BBK3200_8640; ++k_outer) { + three_tbl_impl_3200_8640((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK3200_8640 / 3 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK3200_8640 / 3 / 2 * BM3200_8640)])), (&(((uint8_t*)sign)[(k_outer * BBK3200_8640 / 3 / 8 * BM3200_8640)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM3200_8640; i++) { + ((int32_t*)C)[i] = (int32_t)(((int32_t*)CBits)[i + bs * BM3200_8640]); + } + } + return 0; +} + +template +int32_t two_qgemm_lut_3200_8640(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM3200_8640]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM3200_8640 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 0 / 32; ++k_outer) { + two_tbl_impl3200_8640((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BK2 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BK2 / 2 / 2 * BM3200_8640)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM3200_8640; i++) { + ((int32_t*)C)[i] += (int32_t)(((int32_t*)CBits)[i + bs * BM3200_8640]); + ((float*)C)[i] = (float)(((int32_t*)C)[i]) / ((float*)LUT_Scales)[bs] * ((float*)Scales)[0]; + } + } + return 0; +} + +#include + +#define BM3200_3200 320 +#define BBK3200_3200 96 +template +inline void three_tbl_impl_3200_3200(int32_t* c, int8_t* lut, uint8_t* a, uint8_t* sign) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const __m256i vec_sign_mask = _mm256_set1_epi16(0x8000); + const __m256i vec_zero = _mm256_set1_epi8(0x00); + const __m256i vec_one = _mm256_set1_epi8(0xff); + const int KK = BBK3200_3200 / 3; +#pragma unroll + for (int i = 0; i < BM3200_3200; i += 32) { + __m256i vec_as[KK / 2]; + __m256i vec_signs[KK / 8]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } + #pragma unroll + for (int as = 0; as < KK / 8; as++) { + vec_signs[as] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(sign + i * KK / 8 + as * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + __m256i vec_sign = vec_signs[k]; + __m256i vec_a_0 = vec_as[k * 4 + 0]; + __m128i vec_k1_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0)), 15); + __m256i vec_sign_left_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 1)), 15); + __m256i vec_v_top_0 = _mm256_and_si256(_mm256_srli_epi16(vec_a_0, 4), vec_mask); + __m256i vec_v_top_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_0, vec_k1_0), vec_v_top_0); + __m256i vec_v_top_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_0, vec_k2_0), vec_v_top_0); + __m256i vec_sign_right_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 2)), 15); + __m256i vec_sign_right_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 3)), 15); + __m256i vec_v_bot_0 = _mm256_and_si256(vec_a_0, vec_mask); + __m256i vec_v_bot_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_0, vec_k3_0), vec_v_bot_0); + __m256i vec_v_bot_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_0, vec_k4_0), vec_v_bot_0); + __m256i vec_v_top_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_lo_0), vec_sign_left_lo_0); + __m256i vec_v_top_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_hi_0), vec_sign_left_hi_0); + __m256i vec_v_bot_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_lo_0), vec_sign_right_lo_0); + __m256i vec_v_bot_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_hi_0), vec_sign_right_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_0); + __m256i vec_a_1 = vec_as[k * 4 + 1]; + __m128i vec_k1_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1)), 15); + __m256i vec_sign_left_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 1)), 15); + __m256i vec_v_top_1 = _mm256_and_si256(_mm256_srli_epi16(vec_a_1, 4), vec_mask); + __m256i vec_v_top_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_1, vec_k1_1), vec_v_top_1); + __m256i vec_v_top_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_1, vec_k2_1), vec_v_top_1); + __m256i vec_sign_right_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 2)), 15); + __m256i vec_sign_right_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 3)), 15); + __m256i vec_v_bot_1 = _mm256_and_si256(vec_a_1, vec_mask); + __m256i vec_v_bot_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_1, vec_k3_1), vec_v_bot_1); + __m256i vec_v_bot_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_1, vec_k4_1), vec_v_bot_1); + __m256i vec_v_top_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_lo_1), vec_sign_left_lo_1); + __m256i vec_v_top_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_hi_1), vec_sign_left_hi_1); + __m256i vec_v_bot_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_lo_1), vec_sign_right_lo_1); + __m256i vec_v_bot_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_hi_1), vec_sign_right_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_1); + __m256i vec_a_2 = vec_as[k * 4 + 2]; + __m128i vec_k1_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2)), 15); + __m256i vec_sign_left_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 1)), 15); + __m256i vec_v_top_2 = _mm256_and_si256(_mm256_srli_epi16(vec_a_2, 4), vec_mask); + __m256i vec_v_top_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_2, vec_k1_2), vec_v_top_2); + __m256i vec_v_top_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_2, vec_k2_2), vec_v_top_2); + __m256i vec_sign_right_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 2)), 15); + __m256i vec_sign_right_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 3)), 15); + __m256i vec_v_bot_2 = _mm256_and_si256(vec_a_2, vec_mask); + __m256i vec_v_bot_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_2, vec_k3_2), vec_v_bot_2); + __m256i vec_v_bot_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_2, vec_k4_2), vec_v_bot_2); + __m256i vec_v_top_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_lo_2), vec_sign_left_lo_2); + __m256i vec_v_top_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_hi_2), vec_sign_left_hi_2); + __m256i vec_v_bot_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_lo_2), vec_sign_right_lo_2); + __m256i vec_v_bot_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_hi_2), vec_sign_right_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_2); + __m256i vec_a_3 = vec_as[k * 4 + 3]; + __m128i vec_k1_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3)), 15); + __m256i vec_sign_left_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 1)), 15); + __m256i vec_v_top_3 = _mm256_and_si256(_mm256_srli_epi16(vec_a_3, 4), vec_mask); + __m256i vec_v_top_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_3, vec_k1_3), vec_v_top_3); + __m256i vec_v_top_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_3, vec_k2_3), vec_v_top_3); + __m256i vec_sign_right_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 2)), 15); + __m256i vec_sign_right_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 3)), 15); + __m256i vec_v_bot_3 = _mm256_and_si256(vec_a_3, vec_mask); + __m256i vec_v_bot_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_3, vec_k3_3), vec_v_bot_3); + __m256i vec_v_bot_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_3, vec_k4_3), vec_v_bot_3); + __m256i vec_v_top_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_lo_3), vec_sign_left_lo_3); + __m256i vec_v_top_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_hi_3), vec_sign_left_hi_3); + __m256i vec_v_bot_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_lo_3), vec_sign_right_lo_3); + __m256i vec_v_bot_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_hi_3), vec_sign_right_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_3); + } + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM3200_3200 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM3200_3200 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM3200_3200 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM3200_3200 * bs)); + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM3200_3200 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM3200_3200 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM3200_3200 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM3200_3200 * bs), vec_gc3); + } + } +#endif +} + +template +inline int32_t two_tbl_impl3200_3200(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const int KK = BK2 / 2; +#pragma unroll + for (int i = 0; i < BM3200_3200; i += 32) { + __m256i vec_as[KK / 2]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + #pragma unroll + for (int j = 0; j < 4; j++) { + __m256i vec_a = vec_as[k * 4 + j]; + + __m128i vec_k1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 0 + K2 / 2 * 32 * bs)); + __m128i vec_k2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 16 + K2 / 2 * 32 * bs)); + __m128i vec_k3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 32 + K2 / 2 * 32 * bs)); + __m128i vec_k4 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 48 + K2 / 2 * 32 * bs)); + + __m256i vec_v_top = _mm256_and_si256(_mm256_srli_epi16(vec_a, 4), vec_mask); + __m256i vec_v_top_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1, vec_k1), vec_v_top); + __m256i vec_v_top_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2, vec_k2), vec_v_top); + + __m256i vec_v_bot = _mm256_and_si256(vec_a, vec_mask); + __m256i vec_v_bot_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3, vec_k3), vec_v_bot); + __m256i vec_v_bot_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4, vec_k4), vec_v_bot); + + __m256i vec_v_top_lo = _mm256_unpackhi_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_top_hi = _mm256_unpacklo_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_bot_lo = _mm256_unpackhi_epi8(vec_v_bot_fir, vec_v_bot_sec); + __m256i vec_v_bot_hi = _mm256_unpacklo_epi8(vec_v_bot_fir, vec_v_bot_sec); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo); + } + } + + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM3200_3200 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM3200_3200 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM3200_3200 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM3200_3200 * bs)); + + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM3200_3200 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM3200_3200 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM3200_3200 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM3200_3200 * bs), vec_gc3); + } + } +#endif + return 0; +} + +template +int32_t three_qgemm_lut_3200_3200(void* A, void* sign, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM3200_3200]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM3200_3200 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 3168 / BBK3200_3200; ++k_outer) { + three_tbl_impl_3200_3200((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK3200_3200 / 3 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK3200_3200 / 3 / 2 * BM3200_3200)])), (&(((uint8_t*)sign)[(k_outer * BBK3200_3200 / 3 / 8 * BM3200_3200)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM3200_3200; i++) { + ((int32_t*)C)[i] = (int32_t)(((int32_t*)CBits)[i + bs * BM3200_3200]); + } + } + return 0; +} + +template +int32_t two_qgemm_lut_3200_3200(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM3200_3200]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM3200_3200 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 32 / 32; ++k_outer) { + two_tbl_impl3200_3200((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BK2 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BK2 / 2 / 2 * BM3200_3200)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM3200_3200; i++) { + ((int32_t*)C)[i] += (int32_t)(((int32_t*)CBits)[i + bs * BM3200_3200]); + ((float*)C)[i] = (float)(((int32_t*)C)[i]) / ((float*)LUT_Scales)[bs] * ((float*)Scales)[0]; + } + } + return 0; +} + +#include + +#define BM8640_3200 320 +#define BBK8640_3200 96 +template +inline void three_tbl_impl_8640_3200(int32_t* c, int8_t* lut, uint8_t* a, uint8_t* sign) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const __m256i vec_sign_mask = _mm256_set1_epi16(0x8000); + const __m256i vec_zero = _mm256_set1_epi8(0x00); + const __m256i vec_one = _mm256_set1_epi8(0xff); + const int KK = BBK8640_3200 / 3; +#pragma unroll + for (int i = 0; i < BM8640_3200; i += 32) { + __m256i vec_as[KK / 2]; + __m256i vec_signs[KK / 8]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } + #pragma unroll + for (int as = 0; as < KK / 8; as++) { + vec_signs[as] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(sign + i * KK / 8 + as * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + __m256i vec_sign = vec_signs[k]; + __m256i vec_a_0 = vec_as[k * 4 + 0]; + __m128i vec_k1_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0)), 15); + __m256i vec_sign_left_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 1)), 15); + __m256i vec_v_top_0 = _mm256_and_si256(_mm256_srli_epi16(vec_a_0, 4), vec_mask); + __m256i vec_v_top_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_0, vec_k1_0), vec_v_top_0); + __m256i vec_v_top_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_0, vec_k2_0), vec_v_top_0); + __m256i vec_sign_right_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 2)), 15); + __m256i vec_sign_right_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 3)), 15); + __m256i vec_v_bot_0 = _mm256_and_si256(vec_a_0, vec_mask); + __m256i vec_v_bot_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_0, vec_k3_0), vec_v_bot_0); + __m256i vec_v_bot_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_0, vec_k4_0), vec_v_bot_0); + __m256i vec_v_top_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_lo_0), vec_sign_left_lo_0); + __m256i vec_v_top_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_hi_0), vec_sign_left_hi_0); + __m256i vec_v_bot_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_lo_0), vec_sign_right_lo_0); + __m256i vec_v_bot_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_hi_0), vec_sign_right_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_0); + __m256i vec_a_1 = vec_as[k * 4 + 1]; + __m128i vec_k1_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1)), 15); + __m256i vec_sign_left_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 1)), 15); + __m256i vec_v_top_1 = _mm256_and_si256(_mm256_srli_epi16(vec_a_1, 4), vec_mask); + __m256i vec_v_top_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_1, vec_k1_1), vec_v_top_1); + __m256i vec_v_top_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_1, vec_k2_1), vec_v_top_1); + __m256i vec_sign_right_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 2)), 15); + __m256i vec_sign_right_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 3)), 15); + __m256i vec_v_bot_1 = _mm256_and_si256(vec_a_1, vec_mask); + __m256i vec_v_bot_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_1, vec_k3_1), vec_v_bot_1); + __m256i vec_v_bot_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_1, vec_k4_1), vec_v_bot_1); + __m256i vec_v_top_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_lo_1), vec_sign_left_lo_1); + __m256i vec_v_top_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_hi_1), vec_sign_left_hi_1); + __m256i vec_v_bot_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_lo_1), vec_sign_right_lo_1); + __m256i vec_v_bot_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_hi_1), vec_sign_right_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_1); + __m256i vec_a_2 = vec_as[k * 4 + 2]; + __m128i vec_k1_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2)), 15); + __m256i vec_sign_left_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 1)), 15); + __m256i vec_v_top_2 = _mm256_and_si256(_mm256_srli_epi16(vec_a_2, 4), vec_mask); + __m256i vec_v_top_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_2, vec_k1_2), vec_v_top_2); + __m256i vec_v_top_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_2, vec_k2_2), vec_v_top_2); + __m256i vec_sign_right_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 2)), 15); + __m256i vec_sign_right_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 3)), 15); + __m256i vec_v_bot_2 = _mm256_and_si256(vec_a_2, vec_mask); + __m256i vec_v_bot_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_2, vec_k3_2), vec_v_bot_2); + __m256i vec_v_bot_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_2, vec_k4_2), vec_v_bot_2); + __m256i vec_v_top_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_lo_2), vec_sign_left_lo_2); + __m256i vec_v_top_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_hi_2), vec_sign_left_hi_2); + __m256i vec_v_bot_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_lo_2), vec_sign_right_lo_2); + __m256i vec_v_bot_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_hi_2), vec_sign_right_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_2); + __m256i vec_a_3 = vec_as[k * 4 + 3]; + __m128i vec_k1_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3)), 15); + __m256i vec_sign_left_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 1)), 15); + __m256i vec_v_top_3 = _mm256_and_si256(_mm256_srli_epi16(vec_a_3, 4), vec_mask); + __m256i vec_v_top_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_3, vec_k1_3), vec_v_top_3); + __m256i vec_v_top_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_3, vec_k2_3), vec_v_top_3); + __m256i vec_sign_right_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 2)), 15); + __m256i vec_sign_right_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 3)), 15); + __m256i vec_v_bot_3 = _mm256_and_si256(vec_a_3, vec_mask); + __m256i vec_v_bot_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_3, vec_k3_3), vec_v_bot_3); + __m256i vec_v_bot_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_3, vec_k4_3), vec_v_bot_3); + __m256i vec_v_top_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_lo_3), vec_sign_left_lo_3); + __m256i vec_v_top_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_hi_3), vec_sign_left_hi_3); + __m256i vec_v_bot_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_lo_3), vec_sign_right_lo_3); + __m256i vec_v_bot_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_hi_3), vec_sign_right_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_3); + } + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM8640_3200 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM8640_3200 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM8640_3200 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM8640_3200 * bs)); + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM8640_3200 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM8640_3200 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM8640_3200 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM8640_3200 * bs), vec_gc3); + } + } +#endif +} + +template +inline int32_t two_tbl_impl8640_3200(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const int KK = BK2 / 2; +#pragma unroll + for (int i = 0; i < BM8640_3200; i += 32) { + __m256i vec_as[KK / 2]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + #pragma unroll + for (int j = 0; j < 4; j++) { + __m256i vec_a = vec_as[k * 4 + j]; + + __m128i vec_k1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 0 + K2 / 2 * 32 * bs)); + __m128i vec_k2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 16 + K2 / 2 * 32 * bs)); + __m128i vec_k3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 32 + K2 / 2 * 32 * bs)); + __m128i vec_k4 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 48 + K2 / 2 * 32 * bs)); + + __m256i vec_v_top = _mm256_and_si256(_mm256_srli_epi16(vec_a, 4), vec_mask); + __m256i vec_v_top_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1, vec_k1), vec_v_top); + __m256i vec_v_top_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2, vec_k2), vec_v_top); + + __m256i vec_v_bot = _mm256_and_si256(vec_a, vec_mask); + __m256i vec_v_bot_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3, vec_k3), vec_v_bot); + __m256i vec_v_bot_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4, vec_k4), vec_v_bot); + + __m256i vec_v_top_lo = _mm256_unpackhi_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_top_hi = _mm256_unpacklo_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_bot_lo = _mm256_unpackhi_epi8(vec_v_bot_fir, vec_v_bot_sec); + __m256i vec_v_bot_hi = _mm256_unpacklo_epi8(vec_v_bot_fir, vec_v_bot_sec); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo); + } + } + + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM8640_3200 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM8640_3200 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM8640_3200 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM8640_3200 * bs)); + + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM8640_3200 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM8640_3200 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM8640_3200 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM8640_3200 * bs), vec_gc3); + } + } +#endif + return 0; +} + +template +int32_t three_qgemm_lut_8640_3200(void* A, void* sign, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM8640_3200]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM8640_3200 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 3168 / BBK8640_3200; ++k_outer) { + three_tbl_impl_8640_3200((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK8640_3200 / 3 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK8640_3200 / 3 / 2 * BM8640_3200)])), (&(((uint8_t*)sign)[(k_outer * BBK8640_3200 / 3 / 8 * BM8640_3200)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM8640_3200; i++) { + ((int32_t*)C)[i] = (int32_t)(((int32_t*)CBits)[i + bs * BM8640_3200]); + } + } + return 0; +} + +template +int32_t two_qgemm_lut_8640_3200(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM8640_3200]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM8640_3200 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 32 / 32; ++k_outer) { + two_tbl_impl8640_3200((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BK2 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BK2 / 2 / 2 * BM8640_3200)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM8640_3200; i++) { + ((int32_t*)C)[i] += (int32_t)(((int32_t*)CBits)[i + bs * BM8640_3200]); + ((float*)C)[i] = (float)(((int32_t*)C)[i]) / ((float*)LUT_Scales)[bs] * ((float*)Scales)[0]; + } + } + return 0; +} + +void ggml_preprocessor(int bs, int m, int three_k, int two_k, void* B, void* LUT_Scales, void* Three_QLUT, void* Two_QLUT) { + partial_max_reset(bs, (&(((float*)LUT_Scales)[0]))); + if (m == 3200 && two_k == 0 && three_k == 8640) { + for (int32_t b = 0; b < bs; b++) { + per_tensor_quant(two_k + three_k, (&(((float*)LUT_Scales)[b])), (&(((float*)B)[b * (two_k + three_k)]))); + three_lut_ctor<8640>((&(((int8_t*)Three_QLUT)[b * three_k / 3 * 32])), (&(((float*)B)[b * (three_k + two_k)])), (&(((float*)LUT_Scales)[b]))); + two_lut_ctor<0>((&(((int8_t*)Two_QLUT)[b * two_k / 2 * 32])), (&(((float*)B)[b * (three_k + two_k) + 8640])), (&(((float*)LUT_Scales)[b]))); + } + } + else if (m == 3200 && two_k == 32 && three_k == 3168) { + for (int32_t b = 0; b < bs; b++) { + per_tensor_quant(two_k + three_k, (&(((float*)LUT_Scales)[b])), (&(((float*)B)[b * (two_k + three_k)]))); + three_lut_ctor<3168>((&(((int8_t*)Three_QLUT)[b * three_k / 3 * 32])), (&(((float*)B)[b * (three_k + two_k)])), (&(((float*)LUT_Scales)[b]))); + two_lut_ctor<32>((&(((int8_t*)Two_QLUT)[b * two_k / 2 * 32])), (&(((float*)B)[b * (three_k + two_k) + 3168])), (&(((float*)LUT_Scales)[b]))); + } + } + else if (m == 8640 && two_k == 32 && three_k == 3168) { + for (int32_t b = 0; b < bs; b++) { + per_tensor_quant(two_k + three_k, (&(((float*)LUT_Scales)[b])), (&(((float*)B)[b * (two_k + three_k)]))); + three_lut_ctor<3168>((&(((int8_t*)Three_QLUT)[b * three_k / 3 * 32])), (&(((float*)B)[b * (three_k + two_k)])), (&(((float*)LUT_Scales)[b]))); + two_lut_ctor<32>((&(((int8_t*)Two_QLUT)[b * two_k / 2 * 32])), (&(((float*)B)[b * (three_k + two_k) + 3168])), (&(((float*)LUT_Scales)[b]))); + } + } +} +void ggml_qgemm_lut(int bs, int m, int k, int BK, void* A, void* sign, void* LUT, void* Scales, void* LUT_Scales, void* C) { + if (m == 3200 && k == 8640) { + if (BK == 0) { + if (bs == 1) { + two_qgemm_lut_3200_8640<1>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 8) { + two_qgemm_lut_3200_8640<8>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 32) { + two_qgemm_lut_3200_8640<32>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 128) { + two_qgemm_lut_3200_8640<128>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 256) { + two_qgemm_lut_3200_8640<256>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 512) { + two_qgemm_lut_3200_8640<512>(A, LUT, Scales, LUT_Scales, C); + } + } + else if (BK == 8640) { + if (bs == 1) { + three_qgemm_lut_3200_8640<1>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 8) { + three_qgemm_lut_3200_8640<8>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 32) { + three_qgemm_lut_3200_8640<32>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 128) { + three_qgemm_lut_3200_8640<128>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 256) { + three_qgemm_lut_3200_8640<256>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 512) { + three_qgemm_lut_3200_8640<512>(A, sign, LUT, Scales, LUT_Scales, C); + } + } + } + else if (m == 3200 && k == 3200) { + if (BK == 32) { + if (bs == 1) { + two_qgemm_lut_3200_3200<1>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 8) { + two_qgemm_lut_3200_3200<8>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 32) { + two_qgemm_lut_3200_3200<32>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 128) { + two_qgemm_lut_3200_3200<128>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 256) { + two_qgemm_lut_3200_3200<256>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 512) { + two_qgemm_lut_3200_3200<512>(A, LUT, Scales, LUT_Scales, C); + } + } + else if (BK == 3168) { + if (bs == 1) { + three_qgemm_lut_3200_3200<1>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 8) { + three_qgemm_lut_3200_3200<8>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 32) { + three_qgemm_lut_3200_3200<32>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 128) { + three_qgemm_lut_3200_3200<128>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 256) { + three_qgemm_lut_3200_3200<256>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 512) { + three_qgemm_lut_3200_3200<512>(A, sign, LUT, Scales, LUT_Scales, C); + } + } + } + else if (m == 8640 && k == 3200) { + if (BK == 32) { + if (bs == 1) { + two_qgemm_lut_8640_3200<1>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 8) { + two_qgemm_lut_8640_3200<8>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 32) { + two_qgemm_lut_8640_3200<32>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 128) { + two_qgemm_lut_8640_3200<128>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 256) { + two_qgemm_lut_8640_3200<256>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 512) { + two_qgemm_lut_8640_3200<512>(A, LUT, Scales, LUT_Scales, C); + } + } + else if (BK == 3168) { + if (bs == 1) { + three_qgemm_lut_8640_3200<1>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 8) { + three_qgemm_lut_8640_3200<8>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 32) { + three_qgemm_lut_8640_3200<32>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 128) { + three_qgemm_lut_8640_3200<128>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 256) { + three_qgemm_lut_8640_3200<256>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 512) { + three_qgemm_lut_8640_3200<512>(A, sign, LUT, Scales, LUT_Scales, C); + } + } + } +} + +void ggml_bitnet_transform_tensor(struct ggml_tensor * tensor) { + if (!(is_type_supported(tensor->type) && tensor->backend == GGML_BACKEND_TYPE_CPU && tensor->extra == nullptr)) { + return; + } + + int k = tensor->ne[0]; + int m = tensor->ne[1]; + const int lut_scales_size = 1; + int bk = 0; + int bm = 0; + + if (m == 3200 && k == 8640) { + bm = BM3200_8640; + bk = BBK3200_8640; + } +else if (m == 3200 && k == 3200) { + bm = BM3200_3200; + bk = BBK3200_3200; + } +else if (m == 8640 && k == 3200) { + bm = BM8640_3200; + bk = BBK8640_3200; + } + + const int n_tile_num = m / bm; + const int BK = bk; + uint8_t * qweights; + bitnet_float_type * scales; + + scales = (bitnet_float_type *) aligned_malloc(sizeof(bitnet_float_type)); + qweights = (uint8_t *) tensor->data; + float * i2_scales = (float * )(qweights + k * m / 4); + scales[0] = (bitnet_float_type) i2_scales[0]; + + tensor->extra = bitnet_tensor_extras + bitnet_tensor_extras_index; + bitnet_tensor_extras[bitnet_tensor_extras_index++] = { + /* .lut_scales_size = */ lut_scales_size, + /* .BK = */ BK, + /* .n_tile_num = */ n_tile_num, + /* .qweights = */ qweights, + /* .scales = */ scales + }; +} +#endif \ No newline at end of file diff --git a/preset_kernels/bitnet_b1_58-3B/kernel_config_tl1.ini b/preset_kernels/bitnet_b1_58-3B/kernel_config_tl1.ini new file mode 100644 index 0000000..b8640ad --- /dev/null +++ b/preset_kernels/bitnet_b1_58-3B/kernel_config_tl1.ini @@ -0,0 +1,21 @@ +[Kernels_0] +m = 3200 +k = 8640 +bm = 160 +bk = 64 +bmm = 32 + +[Kernels_1] +m = 3200 +k = 3200 +bm = 320 +bk = 128 +bmm = 64 + +[Kernels_2] +m = 8640 +k = 3200 +bm = 320 +bk = 64 +bmm = 32 + diff --git a/preset_kernels/bitnet_b1_58-3B/kernel_config_tl2.ini b/preset_kernels/bitnet_b1_58-3B/kernel_config_tl2.ini new file mode 100644 index 0000000..46468bf --- /dev/null +++ b/preset_kernels/bitnet_b1_58-3B/kernel_config_tl2.ini @@ -0,0 +1,21 @@ +[Kernels_0] +m = 3200 +k = 8640 +bm = 160 +bk = 96 +bmm = 32 + +[Kernels_1] +m = 3200 +k = 3200 +bm = 320 +bk = 96 +bmm = 32 + +[Kernels_2] +m = 8640 +k = 3200 +bm = 320 +bk = 96 +bmm = 32 + diff --git a/preset_kernels/bitnet_b1_58-large/bitnet-lut-kernels-tl1.h b/preset_kernels/bitnet_b1_58-large/bitnet-lut-kernels-tl1.h new file mode 100644 index 0000000..d38806b --- /dev/null +++ b/preset_kernels/bitnet_b1_58-large/bitnet-lut-kernels-tl1.h @@ -0,0 +1,627 @@ +#if defined(GGML_BITNET_ARM_TL1) +#include "ggml-bitnet.h" +#define GGML_BITNET_MAX_NODES 8192 +static bool initialized = false; +static bitnet_tensor_extra * bitnet_tensor_extras = nullptr; +static size_t bitnet_tensor_extras_index = 0; +static void * aligned_malloc(size_t size) {{ +#if defined(_WIN32) + return _aligned_malloc(size, 64); +#else + void * ptr = nullptr; + posix_memalign(&ptr, 64, size); + return ptr; +#endif +}} +static void aligned_free(void * ptr) {{ +#if defined(_WIN32) + _aligned_free(ptr); +#else + free(ptr); +#endif +}} + +void per_tensor_quant(int k, void* lut_scales_, void* b_) {{ + bitnet_float_type* lut_scales = (bitnet_float_type*)lut_scales_; + bitnet_float_type* b = (bitnet_float_type*)b_; +#ifdef __ARM_NEON + float32x4_t temp_max = vdupq_n_f32(0); + for (int i=0; i < k / 4; i++) {{ + float32x4_t vec_bs = vld1q_f32(b + 4 * i); + float32x4_t abssum = vabsq_f32(vec_bs); + temp_max = vmaxq_f32(abssum, temp_max); + }} + float32_t scales = 127 / vmaxvq_f32(temp_max); + *lut_scales = scales; +#elif defined __AVX2__ + __m256 max_vec = _mm256_set1_ps(0.f); + const __m256 vec_sign = _mm256_set1_ps(-0.0f); + // #pragma unroll + for (int i = 0; i < k / 8; i++) {{ + __m256 vec_b = _mm256_loadu_ps(b + i * 8); + __m256 vec_babs = _mm256_andnot_ps(vec_sign, vec_b); + max_vec = _mm256_max_ps(vec_babs, max_vec); + }} + __m128 max1 = _mm_max_ps(_mm256_extractf128_ps(max_vec, 1), _mm256_castps256_ps128(max_vec)); + max1 = _mm_max_ps(max1, _mm_movehl_ps(max1, max1)); + max1 = _mm_max_ss(max1, _mm_movehdup_ps(max1)); + float scales = 127 / _mm_cvtss_f32(max1); + *lut_scales = scales; +#endif +}} + +void partial_max_reset(void* lut_scales_) {{ + bitnet_float_type* lut_scales = (bitnet_float_type*)lut_scales_; + *lut_scales = 0.0; +}} + +#ifdef __ARM_NEON +inline void Transpose_8_8( + int16x8_t *v0, + int16x8_t *v1, + int16x8_t *v2, + int16x8_t *v3, + int16x8_t *v4, + int16x8_t *v5, + int16x8_t *v6, + int16x8_t *v7) +{{ + int16x8x2_t q04 = vzipq_s16(*v0, *v4); + int16x8x2_t q15 = vzipq_s16(*v1, *v5); + int16x8x2_t q26 = vzipq_s16(*v2, *v6); + int16x8x2_t q37 = vzipq_s16(*v3, *v7); + + int16x8x2_t q0246_0 = vzipq_s16(q04.val[0], q26.val[0]); + int16x8x2_t q0246_1 = vzipq_s16(q04.val[1], q26.val[1]); + int16x8x2_t q1357_0 = vzipq_s16(q15.val[0], q37.val[0]); + int16x8x2_t q1357_1 = vzipq_s16(q15.val[1], q37.val[1]); + + int16x8x2_t q_fin_0 = vzipq_s16(q0246_0.val[0], q1357_0.val[0]); + int16x8x2_t q_fin_1 = vzipq_s16(q0246_0.val[1], q1357_0.val[1]); + int16x8x2_t q_fin_2 = vzipq_s16(q0246_1.val[0], q1357_1.val[0]); + int16x8x2_t q_fin_3 = vzipq_s16(q0246_1.val[1], q1357_1.val[1]); + + *v0 = q_fin_0.val[0]; + *v1 = q_fin_0.val[1]; + *v2 = q_fin_1.val[0]; + *v3 = q_fin_1.val[1]; + *v4 = q_fin_2.val[0]; + *v5 = q_fin_2.val[1]; + *v6 = q_fin_3.val[0]; + *v7 = q_fin_3.val[1]; +}} +#endif + +template +inline void lut_ctor(int8_t* qlut, bitnet_float_type* b, bitnet_float_type* lut_scales) {{ +#ifdef __ARM_NEON + int16x8_t vec_lut[16]; + float32_t scales = *lut_scales; + uint8_t tbl_mask[16]; + tbl_mask[0] = 0; + tbl_mask[1] = 2; + tbl_mask[2] = 4; + tbl_mask[3] = 6; + tbl_mask[4] = 8; + tbl_mask[5] = 10; + tbl_mask[6] = 12; + tbl_mask[7] = 14; + tbl_mask[8] = 1; + tbl_mask[9] = 3; + tbl_mask[10] = 5; + tbl_mask[11] = 7; + tbl_mask[12] = 9; + tbl_mask[13] = 11; + tbl_mask[14] = 13; + tbl_mask[15] = 15; + uint8x16_t tbl_mask_q = vld1q_u8(tbl_mask); +#pragma unroll + for (int k = 0; k < act_k / 16; ++k) {{ + float32x4x2_t vec_bs_x0 = vld2q_f32(b + k * 16); + float32x4x2_t vec_bs_x1 = vld2q_f32(b + k * 16 + 8); + float32x4_t vec_f_0 = vmulq_n_f32(vec_bs_x0.val[0], scales); + float32x4_t vec_f_1 = vmulq_n_f32(vec_bs_x0.val[1], scales); + float32x4_t vec_f_2 = vmulq_n_f32(vec_bs_x1.val[0], scales); + float32x4_t vec_f_3 = vmulq_n_f32(vec_bs_x1.val[1], scales); + int32x4_t vec_b_0 = vcvtnq_s32_f32(vec_f_0); + int32x4_t vec_b_1 = vcvtnq_s32_f32(vec_f_1); + int32x4_t vec_b_2 = vcvtnq_s32_f32(vec_f_2); + int32x4_t vec_b_3 = vcvtnq_s32_f32(vec_f_3); + int16x4_t vec_b16_0 = vmovn_s32(vec_b_0); + int16x4_t vec_b16_1 = vmovn_s32(vec_b_1); + int16x4_t vec_b16_2 = vmovn_s32(vec_b_2); + int16x4_t vec_b16_3 = vmovn_s32(vec_b_3); + int16x8_t vec_bs_0 = vcombine_s16(vec_b16_0, vec_b16_2); + int16x8_t vec_bs_1 = vcombine_s16(vec_b16_1, vec_b16_3); + vec_lut[0] = vdupq_n_s16(0); + vec_lut[0] = vec_lut[0] - vec_bs_0; + vec_lut[0] = vec_lut[0] - vec_bs_1; + vec_lut[1] = vdupq_n_s16(0); + vec_lut[1] = vec_lut[1] - vec_bs_0; + vec_lut[2] = vdupq_n_s16(0); + vec_lut[2] = vec_lut[2] - vec_bs_0; + vec_lut[2] = vec_lut[2] + vec_bs_1; + vec_lut[3] = vdupq_n_s16(0); + vec_lut[3] = vec_lut[3] - vec_bs_1; + vec_lut[4] = vdupq_n_s16(0); + vec_lut[5] = vec_bs_1; + vec_lut[6] = vec_bs_0; + vec_lut[6] = vec_lut[6] - vec_bs_1; + vec_lut[7] = vec_bs_0; + vec_lut[8] = vec_bs_0; + vec_lut[8] = vec_lut[8] + vec_bs_1; + Transpose_8_8(&(vec_lut[0]), &(vec_lut[1]), &(vec_lut[2]), &(vec_lut[3]), + &(vec_lut[4]), &(vec_lut[5]), &(vec_lut[6]), &(vec_lut[7])); + Transpose_8_8(&(vec_lut[8]), &(vec_lut[9]), &(vec_lut[10]), &(vec_lut[11]), + &(vec_lut[12]), &(vec_lut[13]), &(vec_lut[14]), &(vec_lut[15])); +#pragma unroll + for (int idx = 0; idx < 8; idx++) {{ + int8x16_t q0_s = vqtbl1q_s8(vreinterpretq_s8_s16(vec_lut[idx]), tbl_mask_q); + int8x8_t q0_low = vget_low_s8(q0_s); + int8x8_t q0_high = vget_high_s8(q0_s); + int8x16_t q1_s = vqtbl1q_s8(vreinterpretq_s8_s16(vec_lut[idx + 8]), tbl_mask_q); + int8x8_t q1_low = vget_low_s8(q1_s); + int8x8_t q1_high = vget_high_s8(q1_s); + vst1_s8(qlut + k * 16 * 8 * 2 + idx * 16 * 2, q0_high); + vst1_s8(qlut + k * 16 * 8 * 2 + idx * 16 * 2 + 8, q1_high); + vst1_s8(qlut + k * 16 * 8 * 2 + idx * 16 * 2 + 16, q0_low); + vst1_s8(qlut + k * 16 * 8 * 2 + idx * 16 * 2 + 24, q1_low); + }} + }} +#endif +}} + +static bool is_type_supported(enum ggml_type type) {{ + if (type == GGML_TYPE_Q4_0 || + type == GGML_TYPE_TL1) {{ + return true; + }} else {{ + return false; + }} +}} +#include + +#define BM1536_4096 256 +#define BBK1536_4096 128 +inline void tbl_impl_1536_4096(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __ARM_NEON + const int KK = BBK1536_4096 / 2; + const uint8x16_t vec_mask = vdupq_n_u8(0x0f); + const int8x16_t vec_zero = vdupq_n_s16(0x0000); + int8x16_t vec_lut[2 * KK]; + int16x8_t vec_c[4]; +#pragma unroll + for (int k = 0; k < 2 * KK; k++) { + vec_lut[k] = vld1q_s8(lut + k * 16); + } + +#pragma unroll + for (int i = 0; i < BM1536_4096; i += 32) { + #pragma unroll + for (int i=0; i<4; i++) { + vec_c[i] = vandq_s16(vec_c[i], vec_zero); + } + +#pragma unroll + for (int k = 0; k < KK / 4; k++) { + + uint8x16_t vec_a_0 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 0 * 16); + uint8x16_t vec_a0_top = vshrq_n_u8(vec_a_0, 4); + uint8x16_t vec_a0_bot = vandq_u8(vec_a_0, vec_mask); + int8x16_t vec_v_0_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 0], vec_a0_top); + int8x16_t vec_v_0_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 1], vec_a0_top); + int8x16_t vec_v_0_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 2], vec_a0_bot); + int8x16_t vec_v_0_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 3], vec_a0_bot); + int8x16x2_t vec_v_left_0 = vzipq_s8(vec_v_0_left_tmp1, vec_v_0_left_tmp0); + int8x16x2_t vec_v_right_0 = vzipq_s8(vec_v_0_right_tmp1, vec_v_0_right_tmp0); + vec_c[0] += vec_v_left_0.val[0]; + vec_c[0] += vec_v_right_0.val[0]; + vec_c[1] += vec_v_left_0.val[1]; + vec_c[1] += vec_v_right_0.val[1]; + + uint8x16_t vec_a_1 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 1 * 16); + uint8x16_t vec_a1_top = vshrq_n_u8(vec_a_1, 4); + uint8x16_t vec_a1_bot = vandq_u8(vec_a_1, vec_mask); + int8x16_t vec_v_1_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 4], vec_a1_top); + int8x16_t vec_v_1_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 5], vec_a1_top); + int8x16_t vec_v_1_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 6], vec_a1_bot); + int8x16_t vec_v_1_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 7], vec_a1_bot); + int8x16x2_t vec_v_left_1 = vzipq_s8(vec_v_1_left_tmp1, vec_v_1_left_tmp0); + int8x16x2_t vec_v_right_1 = vzipq_s8(vec_v_1_right_tmp1, vec_v_1_right_tmp0); + vec_c[0] += vec_v_left_1.val[0]; + vec_c[0] += vec_v_right_1.val[0]; + vec_c[1] += vec_v_left_1.val[1]; + vec_c[1] += vec_v_right_1.val[1]; + + uint8x16_t vec_a_2 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 2 * 16); + uint8x16_t vec_a2_top = vshrq_n_u8(vec_a_2, 4); + uint8x16_t vec_a2_bot = vandq_u8(vec_a_2, vec_mask); + int8x16_t vec_v_2_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 0], vec_a2_top); + int8x16_t vec_v_2_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 1], vec_a2_top); + int8x16_t vec_v_2_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 2], vec_a2_bot); + int8x16_t vec_v_2_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 3], vec_a2_bot); + int8x16x2_t vec_v_left_2 = vzipq_s8(vec_v_2_left_tmp1, vec_v_2_left_tmp0); + int8x16x2_t vec_v_right_2 = vzipq_s8(vec_v_2_right_tmp1, vec_v_2_right_tmp0); + vec_c[2] += vec_v_left_2.val[0]; + vec_c[2] += vec_v_right_2.val[0]; + vec_c[3] += vec_v_left_2.val[1]; + vec_c[3] += vec_v_right_2.val[1]; + + uint8x16_t vec_a_3 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 3 * 16); + uint8x16_t vec_a3_top = vshrq_n_u8(vec_a_3, 4); + uint8x16_t vec_a3_bot = vandq_u8(vec_a_3, vec_mask); + int8x16_t vec_v_3_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 4], vec_a3_top); + int8x16_t vec_v_3_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 5], vec_a3_top); + int8x16_t vec_v_3_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 6], vec_a3_bot); + int8x16_t vec_v_3_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 7], vec_a3_bot); + int8x16x2_t vec_v_left_3 = vzipq_s8(vec_v_3_left_tmp1, vec_v_3_left_tmp0); + int8x16x2_t vec_v_right_3 = vzipq_s8(vec_v_3_right_tmp1, vec_v_3_right_tmp0); + vec_c[2] += vec_v_left_3.val[0]; + vec_c[2] += vec_v_right_3.val[0]; + vec_c[3] += vec_v_left_3.val[1]; + vec_c[3] += vec_v_right_3.val[1]; + + } + + int32x4_t vec_v_bot_low_low_0 = vmovl_s16(vget_low_s16(vec_c[0])); + int32x4_t vec_v_bot_low_high_0 = vmovl_high_s16(vec_c[0]); + vst1q_s32(c + i + 0, vld1q_s32(c + i + 0) + vec_v_bot_low_low_0); + vst1q_s32(c + i + 4, vld1q_s32(c + i + 4) + vec_v_bot_low_high_0); + int32x4_t vec_v_bot_low_low_1 = vmovl_s16(vget_low_s16(vec_c[1])); + int32x4_t vec_v_bot_low_high_1 = vmovl_high_s16(vec_c[1]); + vst1q_s32(c + i + 8, vld1q_s32(c + i + 8) + vec_v_bot_low_low_1); + vst1q_s32(c + i + 12, vld1q_s32(c + i + 12) + vec_v_bot_low_high_1); + int32x4_t vec_v_bot_low_low_2 = vmovl_s16(vget_low_s16(vec_c[2])); + int32x4_t vec_v_bot_low_high_2 = vmovl_high_s16(vec_c[2]); + vst1q_s32(c + i + 16, vld1q_s32(c + i + 16) + vec_v_bot_low_low_2); + vst1q_s32(c + i + 20, vld1q_s32(c + i + 20) + vec_v_bot_low_high_2); + int32x4_t vec_v_bot_low_low_3 = vmovl_s16(vget_low_s16(vec_c[3])); + int32x4_t vec_v_bot_low_high_3 = vmovl_high_s16(vec_c[3]); + vst1q_s32(c + i + 24, vld1q_s32(c + i + 24) + vec_v_bot_low_low_3); + vst1q_s32(c + i + 28, vld1q_s32(c + i + 28) + vec_v_bot_low_high_3); + + } +#endif +} + +int32_t qgemm_lut_1536_4096(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BM1536_4096]; + memset(&(CBits[0]), 0, BM1536_4096 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 4096 / BBK1536_4096; ++k_outer) { + tbl_impl_1536_4096((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK1536_4096 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK1536_4096 / 2 / 2 * BM1536_4096)]))); + } +#pragma unroll + for (int i = 0; i < BM1536_4096; i++) { + ((bitnet_float_type*)C)[i] = (((int32_t*)CBits)[i]) / ((bitnet_float_type*)LUT_Scales)[0] * ((bitnet_float_type*)Scales)[0]; + } + return 0; +}; +#include + +#define BM1536_1536 128 +#define BBK1536_1536 64 +inline void tbl_impl_1536_1536(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __ARM_NEON + const int KK = BBK1536_1536 / 2; + const uint8x16_t vec_mask = vdupq_n_u8(0x0f); + const int8x16_t vec_zero = vdupq_n_s16(0x0000); + int8x16_t vec_lut[2 * KK]; + int16x8_t vec_c[8]; +#pragma unroll + for (int k = 0; k < 2 * KK; k++) { + vec_lut[k] = vld1q_s8(lut + k * 16); + } + +#pragma unroll + for (int i = 0; i < BM1536_1536; i += 64) { + #pragma unroll + for (int i=0; i<8; i++) { + vec_c[i] = vandq_s16(vec_c[i], vec_zero); + } + +#pragma unroll + for (int k = 0; k < KK / 2; k++) { + + uint8x16_t vec_a_0 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 0 * 16); + uint8x16_t vec_a0_top = vshrq_n_u8(vec_a_0, 4); + uint8x16_t vec_a0_bot = vandq_u8(vec_a_0, vec_mask); + int8x16_t vec_v_0_left_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 0], vec_a0_top); + int8x16_t vec_v_0_left_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 1], vec_a0_top); + int8x16_t vec_v_0_right_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 2], vec_a0_bot); + int8x16_t vec_v_0_right_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 3], vec_a0_bot); + int8x16x2_t vec_v_left_0 = vzipq_s8(vec_v_0_left_tmp1, vec_v_0_left_tmp0); + int8x16x2_t vec_v_right_0 = vzipq_s8(vec_v_0_right_tmp1, vec_v_0_right_tmp0); + vec_c[0] += vec_v_left_0.val[0]; + vec_c[0] += vec_v_right_0.val[0]; + vec_c[1] += vec_v_left_0.val[1]; + vec_c[1] += vec_v_right_0.val[1]; + + uint8x16_t vec_a_1 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 1 * 16); + uint8x16_t vec_a1_top = vshrq_n_u8(vec_a_1, 4); + uint8x16_t vec_a1_bot = vandq_u8(vec_a_1, vec_mask); + int8x16_t vec_v_1_left_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 0], vec_a1_top); + int8x16_t vec_v_1_left_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 1], vec_a1_top); + int8x16_t vec_v_1_right_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 2], vec_a1_bot); + int8x16_t vec_v_1_right_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 3], vec_a1_bot); + int8x16x2_t vec_v_left_1 = vzipq_s8(vec_v_1_left_tmp1, vec_v_1_left_tmp0); + int8x16x2_t vec_v_right_1 = vzipq_s8(vec_v_1_right_tmp1, vec_v_1_right_tmp0); + vec_c[2] += vec_v_left_1.val[0]; + vec_c[2] += vec_v_right_1.val[0]; + vec_c[3] += vec_v_left_1.val[1]; + vec_c[3] += vec_v_right_1.val[1]; + + uint8x16_t vec_a_2 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 2 * 16); + uint8x16_t vec_a2_top = vshrq_n_u8(vec_a_2, 4); + uint8x16_t vec_a2_bot = vandq_u8(vec_a_2, vec_mask); + int8x16_t vec_v_2_left_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 0], vec_a2_top); + int8x16_t vec_v_2_left_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 1], vec_a2_top); + int8x16_t vec_v_2_right_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 2], vec_a2_bot); + int8x16_t vec_v_2_right_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 3], vec_a2_bot); + int8x16x2_t vec_v_left_2 = vzipq_s8(vec_v_2_left_tmp1, vec_v_2_left_tmp0); + int8x16x2_t vec_v_right_2 = vzipq_s8(vec_v_2_right_tmp1, vec_v_2_right_tmp0); + vec_c[4] += vec_v_left_2.val[0]; + vec_c[4] += vec_v_right_2.val[0]; + vec_c[5] += vec_v_left_2.val[1]; + vec_c[5] += vec_v_right_2.val[1]; + + uint8x16_t vec_a_3 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 3 * 16); + uint8x16_t vec_a3_top = vshrq_n_u8(vec_a_3, 4); + uint8x16_t vec_a3_bot = vandq_u8(vec_a_3, vec_mask); + int8x16_t vec_v_3_left_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 0], vec_a3_top); + int8x16_t vec_v_3_left_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 1], vec_a3_top); + int8x16_t vec_v_3_right_tmp0 = vqtbl1q_s8(vec_lut[4 * k + 2], vec_a3_bot); + int8x16_t vec_v_3_right_tmp1 = vqtbl1q_s8(vec_lut[4 * k + 3], vec_a3_bot); + int8x16x2_t vec_v_left_3 = vzipq_s8(vec_v_3_left_tmp1, vec_v_3_left_tmp0); + int8x16x2_t vec_v_right_3 = vzipq_s8(vec_v_3_right_tmp1, vec_v_3_right_tmp0); + vec_c[6] += vec_v_left_3.val[0]; + vec_c[6] += vec_v_right_3.val[0]; + vec_c[7] += vec_v_left_3.val[1]; + vec_c[7] += vec_v_right_3.val[1]; + + } + + int32x4_t vec_v_bot_low_low_0 = vmovl_s16(vget_low_s16(vec_c[0])); + int32x4_t vec_v_bot_low_high_0 = vmovl_high_s16(vec_c[0]); + vst1q_s32(c + i + 0, vld1q_s32(c + i + 0) + vec_v_bot_low_low_0); + vst1q_s32(c + i + 4, vld1q_s32(c + i + 4) + vec_v_bot_low_high_0); + int32x4_t vec_v_bot_low_low_1 = vmovl_s16(vget_low_s16(vec_c[1])); + int32x4_t vec_v_bot_low_high_1 = vmovl_high_s16(vec_c[1]); + vst1q_s32(c + i + 8, vld1q_s32(c + i + 8) + vec_v_bot_low_low_1); + vst1q_s32(c + i + 12, vld1q_s32(c + i + 12) + vec_v_bot_low_high_1); + int32x4_t vec_v_bot_low_low_2 = vmovl_s16(vget_low_s16(vec_c[2])); + int32x4_t vec_v_bot_low_high_2 = vmovl_high_s16(vec_c[2]); + vst1q_s32(c + i + 16, vld1q_s32(c + i + 16) + vec_v_bot_low_low_2); + vst1q_s32(c + i + 20, vld1q_s32(c + i + 20) + vec_v_bot_low_high_2); + int32x4_t vec_v_bot_low_low_3 = vmovl_s16(vget_low_s16(vec_c[3])); + int32x4_t vec_v_bot_low_high_3 = vmovl_high_s16(vec_c[3]); + vst1q_s32(c + i + 24, vld1q_s32(c + i + 24) + vec_v_bot_low_low_3); + vst1q_s32(c + i + 28, vld1q_s32(c + i + 28) + vec_v_bot_low_high_3); + int32x4_t vec_v_bot_low_low_4 = vmovl_s16(vget_low_s16(vec_c[4])); + int32x4_t vec_v_bot_low_high_4 = vmovl_high_s16(vec_c[4]); + vst1q_s32(c + i + 32, vld1q_s32(c + i + 32) + vec_v_bot_low_low_4); + vst1q_s32(c + i + 36, vld1q_s32(c + i + 36) + vec_v_bot_low_high_4); + int32x4_t vec_v_bot_low_low_5 = vmovl_s16(vget_low_s16(vec_c[5])); + int32x4_t vec_v_bot_low_high_5 = vmovl_high_s16(vec_c[5]); + vst1q_s32(c + i + 40, vld1q_s32(c + i + 40) + vec_v_bot_low_low_5); + vst1q_s32(c + i + 44, vld1q_s32(c + i + 44) + vec_v_bot_low_high_5); + int32x4_t vec_v_bot_low_low_6 = vmovl_s16(vget_low_s16(vec_c[6])); + int32x4_t vec_v_bot_low_high_6 = vmovl_high_s16(vec_c[6]); + vst1q_s32(c + i + 48, vld1q_s32(c + i + 48) + vec_v_bot_low_low_6); + vst1q_s32(c + i + 52, vld1q_s32(c + i + 52) + vec_v_bot_low_high_6); + int32x4_t vec_v_bot_low_low_7 = vmovl_s16(vget_low_s16(vec_c[7])); + int32x4_t vec_v_bot_low_high_7 = vmovl_high_s16(vec_c[7]); + vst1q_s32(c + i + 56, vld1q_s32(c + i + 56) + vec_v_bot_low_low_7); + vst1q_s32(c + i + 60, vld1q_s32(c + i + 60) + vec_v_bot_low_high_7); + + } +#endif +} + +int32_t qgemm_lut_1536_1536(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BM1536_1536]; + memset(&(CBits[0]), 0, BM1536_1536 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 1536 / BBK1536_1536; ++k_outer) { + tbl_impl_1536_1536((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK1536_1536 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK1536_1536 / 2 / 2 * BM1536_1536)]))); + } +#pragma unroll + for (int i = 0; i < BM1536_1536; i++) { + ((bitnet_float_type*)C)[i] = (((int32_t*)CBits)[i]) / ((bitnet_float_type*)LUT_Scales)[0] * ((bitnet_float_type*)Scales)[0]; + } + return 0; +}; +#include + +#define BM4096_1536 256 +#define BBK4096_1536 128 +inline void tbl_impl_4096_1536(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __ARM_NEON + const int KK = BBK4096_1536 / 2; + const uint8x16_t vec_mask = vdupq_n_u8(0x0f); + const int8x16_t vec_zero = vdupq_n_s16(0x0000); + int8x16_t vec_lut[2 * KK]; + int16x8_t vec_c[4]; +#pragma unroll + for (int k = 0; k < 2 * KK; k++) { + vec_lut[k] = vld1q_s8(lut + k * 16); + } + +#pragma unroll + for (int i = 0; i < BM4096_1536; i += 32) { + #pragma unroll + for (int i=0; i<4; i++) { + vec_c[i] = vandq_s16(vec_c[i], vec_zero); + } + +#pragma unroll + for (int k = 0; k < KK / 4; k++) { + + uint8x16_t vec_a_0 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 0 * 16); + uint8x16_t vec_a0_top = vshrq_n_u8(vec_a_0, 4); + uint8x16_t vec_a0_bot = vandq_u8(vec_a_0, vec_mask); + int8x16_t vec_v_0_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 0], vec_a0_top); + int8x16_t vec_v_0_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 1], vec_a0_top); + int8x16_t vec_v_0_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 2], vec_a0_bot); + int8x16_t vec_v_0_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 3], vec_a0_bot); + int8x16x2_t vec_v_left_0 = vzipq_s8(vec_v_0_left_tmp1, vec_v_0_left_tmp0); + int8x16x2_t vec_v_right_0 = vzipq_s8(vec_v_0_right_tmp1, vec_v_0_right_tmp0); + vec_c[0] += vec_v_left_0.val[0]; + vec_c[0] += vec_v_right_0.val[0]; + vec_c[1] += vec_v_left_0.val[1]; + vec_c[1] += vec_v_right_0.val[1]; + + uint8x16_t vec_a_1 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 1 * 16); + uint8x16_t vec_a1_top = vshrq_n_u8(vec_a_1, 4); + uint8x16_t vec_a1_bot = vandq_u8(vec_a_1, vec_mask); + int8x16_t vec_v_1_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 4], vec_a1_top); + int8x16_t vec_v_1_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 5], vec_a1_top); + int8x16_t vec_v_1_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 6], vec_a1_bot); + int8x16_t vec_v_1_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 7], vec_a1_bot); + int8x16x2_t vec_v_left_1 = vzipq_s8(vec_v_1_left_tmp1, vec_v_1_left_tmp0); + int8x16x2_t vec_v_right_1 = vzipq_s8(vec_v_1_right_tmp1, vec_v_1_right_tmp0); + vec_c[0] += vec_v_left_1.val[0]; + vec_c[0] += vec_v_right_1.val[0]; + vec_c[1] += vec_v_left_1.val[1]; + vec_c[1] += vec_v_right_1.val[1]; + + uint8x16_t vec_a_2 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 2 * 16); + uint8x16_t vec_a2_top = vshrq_n_u8(vec_a_2, 4); + uint8x16_t vec_a2_bot = vandq_u8(vec_a_2, vec_mask); + int8x16_t vec_v_2_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 0], vec_a2_top); + int8x16_t vec_v_2_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 1], vec_a2_top); + int8x16_t vec_v_2_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 2], vec_a2_bot); + int8x16_t vec_v_2_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 3], vec_a2_bot); + int8x16x2_t vec_v_left_2 = vzipq_s8(vec_v_2_left_tmp1, vec_v_2_left_tmp0); + int8x16x2_t vec_v_right_2 = vzipq_s8(vec_v_2_right_tmp1, vec_v_2_right_tmp0); + vec_c[2] += vec_v_left_2.val[0]; + vec_c[2] += vec_v_right_2.val[0]; + vec_c[3] += vec_v_left_2.val[1]; + vec_c[3] += vec_v_right_2.val[1]; + + uint8x16_t vec_a_3 = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + 3 * 16); + uint8x16_t vec_a3_top = vshrq_n_u8(vec_a_3, 4); + uint8x16_t vec_a3_bot = vandq_u8(vec_a_3, vec_mask); + int8x16_t vec_v_3_left_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 4], vec_a3_top); + int8x16_t vec_v_3_left_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 5], vec_a3_top); + int8x16_t vec_v_3_right_tmp0 = vqtbl1q_s8(vec_lut[8 * k + 6], vec_a3_bot); + int8x16_t vec_v_3_right_tmp1 = vqtbl1q_s8(vec_lut[8 * k + 7], vec_a3_bot); + int8x16x2_t vec_v_left_3 = vzipq_s8(vec_v_3_left_tmp1, vec_v_3_left_tmp0); + int8x16x2_t vec_v_right_3 = vzipq_s8(vec_v_3_right_tmp1, vec_v_3_right_tmp0); + vec_c[2] += vec_v_left_3.val[0]; + vec_c[2] += vec_v_right_3.val[0]; + vec_c[3] += vec_v_left_3.val[1]; + vec_c[3] += vec_v_right_3.val[1]; + + } + + int32x4_t vec_v_bot_low_low_0 = vmovl_s16(vget_low_s16(vec_c[0])); + int32x4_t vec_v_bot_low_high_0 = vmovl_high_s16(vec_c[0]); + vst1q_s32(c + i + 0, vld1q_s32(c + i + 0) + vec_v_bot_low_low_0); + vst1q_s32(c + i + 4, vld1q_s32(c + i + 4) + vec_v_bot_low_high_0); + int32x4_t vec_v_bot_low_low_1 = vmovl_s16(vget_low_s16(vec_c[1])); + int32x4_t vec_v_bot_low_high_1 = vmovl_high_s16(vec_c[1]); + vst1q_s32(c + i + 8, vld1q_s32(c + i + 8) + vec_v_bot_low_low_1); + vst1q_s32(c + i + 12, vld1q_s32(c + i + 12) + vec_v_bot_low_high_1); + int32x4_t vec_v_bot_low_low_2 = vmovl_s16(vget_low_s16(vec_c[2])); + int32x4_t vec_v_bot_low_high_2 = vmovl_high_s16(vec_c[2]); + vst1q_s32(c + i + 16, vld1q_s32(c + i + 16) + vec_v_bot_low_low_2); + vst1q_s32(c + i + 20, vld1q_s32(c + i + 20) + vec_v_bot_low_high_2); + int32x4_t vec_v_bot_low_low_3 = vmovl_s16(vget_low_s16(vec_c[3])); + int32x4_t vec_v_bot_low_high_3 = vmovl_high_s16(vec_c[3]); + vst1q_s32(c + i + 24, vld1q_s32(c + i + 24) + vec_v_bot_low_low_3); + vst1q_s32(c + i + 28, vld1q_s32(c + i + 28) + vec_v_bot_low_high_3); + + } +#endif +} + +int32_t qgemm_lut_4096_1536(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BM4096_1536]; + memset(&(CBits[0]), 0, BM4096_1536 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 1536 / BBK4096_1536; ++k_outer) { + tbl_impl_4096_1536((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK4096_1536 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK4096_1536 / 2 / 2 * BM4096_1536)]))); + } +#pragma unroll + for (int i = 0; i < BM4096_1536; i++) { + ((bitnet_float_type*)C)[i] = (((int32_t*)CBits)[i]) / ((bitnet_float_type*)LUT_Scales)[0] * ((bitnet_float_type*)Scales)[0]; + } + return 0; +}; + +template +void preprocessor_k(void* B, void* LUT_Scales, void* QLUT) {{ + partial_max_reset((&(((bitnet_float_type*)LUT_Scales)[0]))); + per_tensor_quant(K, (&(((bitnet_float_type*)LUT_Scales)[0])), (&(((bitnet_float_type*)B)[0]))); + + lut_ctor((&(((int8_t*)QLUT)[0])), (&(((bitnet_float_type*)B)[0])), (&(((bitnet_float_type*)LUT_Scales)[0]))); +}} +void ggml_preprocessor(int m, int k, void* B, void* LUT_Scales, void* QLUT) { + if (m == 1536 && k == 4096) { + preprocessor_k<4096>(B, LUT_Scales, QLUT); + } + else if (m == 1536 && k == 1536) { + preprocessor_k<1536>(B, LUT_Scales, QLUT); + } + else if (m == 4096 && k == 1536) { + preprocessor_k<1536>(B, LUT_Scales, QLUT); + } +} +void ggml_qgemm_lut(int m, int k, void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + if (m == 1536 && k == 4096) { + qgemm_lut_1536_4096(A, LUT, Scales, LUT_Scales, C); + } + else if (m == 1536 && k == 1536) { + qgemm_lut_1536_1536(A, LUT, Scales, LUT_Scales, C); + } + else if (m == 4096 && k == 1536) { + qgemm_lut_4096_1536(A, LUT, Scales, LUT_Scales, C); + } +} + +void ggml_bitnet_transform_tensor(struct ggml_tensor * tensor) { + if (!(is_type_supported(tensor->type) && tensor->backend == GGML_BACKEND_TYPE_CPU && tensor->extra == nullptr)) { + return; + } + + int k = tensor->ne[0]; + int m = tensor->ne[1]; + const int lut_scales_size = 1; + const int scales_size = 1; + int bk = 0; + int bm = 0; + + if (m == 1536 && k == 4096) { + bm = BM1536_4096; + bk = BBK1536_4096; + } +else if (m == 1536 && k == 1536) { + bm = BM1536_1536; + bk = BBK1536_1536; + } +else if (m == 4096 && k == 1536) { + bm = BM4096_1536; + bk = BBK4096_1536; + } + + const int n_tile_num = m / bm; + const int BK = bk; + uint8_t * qweights; + bitnet_float_type * scales; + + scales = (bitnet_float_type *) aligned_malloc(sizeof(bitnet_float_type)); + qweights = (uint8_t *) tensor->data; + float * i2_scales = (float * )(qweights + k * m / 4); + scales[0] = (bitnet_float_type) i2_scales[0]; + + tensor->extra = bitnet_tensor_extras + bitnet_tensor_extras_index; + bitnet_tensor_extras[bitnet_tensor_extras_index++] = { + /* .lut_scales_size = */ lut_scales_size, + /* .scales_size = */ scales_size, + /* .n_tile_num = */ n_tile_num, + /* .qweights = */ qweights, + /* .scales = */ scales + }; +} +#endif \ No newline at end of file diff --git a/preset_kernels/bitnet_b1_58-large/bitnet-lut-kernels-tl2.h b/preset_kernels/bitnet_b1_58-large/bitnet-lut-kernels-tl2.h new file mode 100644 index 0000000..92bda56 --- /dev/null +++ b/preset_kernels/bitnet_b1_58-large/bitnet-lut-kernels-tl2.h @@ -0,0 +1,1167 @@ +#if defined(GGML_BITNET_X86_TL2) +#include "ggml-bitnet.h" +#define GGML_BITNET_MAX_NODES 8192 +static bool initialized = false; +static bitnet_tensor_extra * bitnet_tensor_extras = nullptr; +static size_t bitnet_tensor_extras_index = 0; +static void * aligned_malloc(size_t size) { +#if defined(_WIN32) + return _aligned_malloc(size, 64); +#else + void * ptr = nullptr; + posix_memalign(&ptr, 64, size); + return ptr; +#endif +} + +static void aligned_free(void * ptr) { +#if defined(_WIN32) + _aligned_free(ptr); +#else + free(ptr); +#endif +} +#define BK2 32 +#if defined __AVX2__ +inline void _mm256_merge_epi32(const __m256i v0, const __m256i v1, __m256i *vl, __m256i *vh) +{ + __m256i va = _mm256_permute4x64_epi64(v0, _MM_SHUFFLE(3, 1, 2, 0)); + __m256i vb = _mm256_permute4x64_epi64(v1, _MM_SHUFFLE(3, 1, 2, 0)); + *vl = _mm256_unpacklo_epi32(va, vb); + *vh = _mm256_unpackhi_epi32(va, vb); +} +inline void _mm256_merge_epi64(const __m256i v0, const __m256i v1, __m256i *vl, __m256i *vh) +{ + __m256i va = _mm256_permute4x64_epi64(v0, _MM_SHUFFLE(3, 1, 2, 0)); + __m256i vb = _mm256_permute4x64_epi64(v1, _MM_SHUFFLE(3, 1, 2, 0)); + *vl = _mm256_unpacklo_epi64(va, vb); + *vh = _mm256_unpackhi_epi64(va, vb); +} +inline void _mm256_merge_si128(const __m256i v0, const __m256i v1, __m256i *vl, __m256i *vh) +{ + *vl = _mm256_permute2x128_si256(v0, v1, _MM_SHUFFLE(0, 2, 0, 0)); + *vh = _mm256_permute2x128_si256(v0, v1, _MM_SHUFFLE(0, 3, 0, 1)); +} +inline void Transpose_8_8( + __m256i *v0, + __m256i *v1, + __m256i *v2, + __m256i *v3, + __m256i *v4, + __m256i *v5, + __m256i *v6, + __m256i *v7) +{ + __m256i w0, w1, w2, w3, w4, w5, w6, w7; + __m256i x0, x1, x2, x3, x4, x5, x6, x7; + _mm256_merge_epi32(*v0, *v1, &w0, &w1); + _mm256_merge_epi32(*v2, *v3, &w2, &w3); + _mm256_merge_epi32(*v4, *v5, &w4, &w5); + _mm256_merge_epi32(*v6, *v7, &w6, &w7); + _mm256_merge_epi64(w0, w2, &x0, &x1); + _mm256_merge_epi64(w1, w3, &x2, &x3); + _mm256_merge_epi64(w4, w6, &x4, &x5); + _mm256_merge_epi64(w5, w7, &x6, &x7); + _mm256_merge_si128(x0, x4, v0, v1); + _mm256_merge_si128(x1, x5, v2, v3); + _mm256_merge_si128(x2, x6, v4, v5); + _mm256_merge_si128(x3, x7, v6, v7); +} +#endif +inline int32_t per_tensor_quant(int k, void* lut_scales_, void* b_) { + bitnet_float_type* lut_scales = (bitnet_float_type*)lut_scales_; + bitnet_float_type* b = (bitnet_float_type*)b_; +#if defined __AVX2__ + __m256 max_vec = _mm256_set1_ps(0.f); + const __m256 vec_sign = _mm256_set1_ps(-0.0f); + for (int i = 0; i < k / 8; i++) { + __m256 vec_b = _mm256_loadu_ps(b + i * 8); + __m256 vec_babs = _mm256_andnot_ps(vec_sign, vec_b); + max_vec = _mm256_max_ps(vec_babs, max_vec); + } + __m128 max1 = _mm_max_ps(_mm256_extractf128_ps(max_vec, 1), _mm256_castps256_ps128(max_vec)); + max1 = _mm_max_ps(max1, _mm_movehl_ps(max1, max1)); + max1 = _mm_max_ss(max1, _mm_movehdup_ps(max1)); + float scales = 127 / _mm_cvtss_f32(max1); + *lut_scales = scales; +#endif + return 0; +} +inline int32_t partial_max_reset(int32_t bs, void* lut_scales_) { + bitnet_float_type* lut_scales = (bitnet_float_type*)lut_scales_; + #pragma unroll + for (int i=0; i< bs; i++) { + lut_scales[i] = 0.0; + } + return 0; +} +template +inline int32_t three_lut_ctor(int8_t* qlut, bitnet_float_type* b, bitnet_float_type* lut_scales) { +#if defined __AVX2__ + __m256 vec_lut[16]; + const __m256i vec_bi = _mm256_set_epi32(84, 72, 60, 48, 36, 24, 12, 0); + float scales = *lut_scales; + __m256i shuffle_mask = _mm256_set_epi8( + 0x0f, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x03, 0x01, + 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00, + 0x0f, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x03, 0x01, + 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00 + ); +#pragma unroll + for (int k = 0; k < act_k / 24; ++k) { + __m256 vec_b0 = _mm256_i32gather_ps(b + k * 24 + 0, vec_bi, 1); + __m256 vec_b1 = _mm256_i32gather_ps(b + k * 24 + 1, vec_bi, 1); + __m256 vec_b2 = _mm256_i32gather_ps(b + k * 24 + 2, vec_bi, 1); + + __m256i vec_b0i = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b0, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC)); + __m256i vec_b1i = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b1, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC)); + __m256i vec_b2i = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b2, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC)); + + vec_lut[15] = _mm256_setzero_si256(); + vec_lut[14] = _mm256_setzero_si256(); + vec_lut[13] = vec_b0i; + vec_lut[13] = _mm256_add_epi32(vec_lut[13], vec_b1i); + vec_lut[13] = _mm256_add_epi32(vec_lut[13], vec_b2i); + vec_lut[12] = vec_b0i; + vec_lut[12] = _mm256_add_epi32(vec_lut[12], vec_b1i); + vec_lut[11] = vec_b0i; + vec_lut[11] = _mm256_add_epi32(vec_lut[11], vec_b1i); + vec_lut[11] = _mm256_sub_epi32(vec_lut[11], vec_b2i); + vec_lut[10] = vec_b0i; + vec_lut[10] = _mm256_add_epi32(vec_lut[10], vec_b2i); + vec_lut[9] = vec_b0i; + vec_lut[8] = vec_b0i; + vec_lut[8] = _mm256_sub_epi32(vec_lut[8], vec_b2i); + vec_lut[7] = vec_b0i; + vec_lut[7] = _mm256_sub_epi32(vec_lut[7], vec_b1i); + vec_lut[7] = _mm256_add_epi32(vec_lut[7], vec_b2i); + vec_lut[6] = vec_b0i; + vec_lut[6] = _mm256_sub_epi32(vec_lut[6], vec_b1i); + vec_lut[5] = vec_b0i; + vec_lut[5] = _mm256_sub_epi32(vec_lut[5], vec_b1i); + vec_lut[5] = _mm256_sub_epi32(vec_lut[5], vec_b2i); + vec_lut[4] = vec_b1i; + vec_lut[4] = _mm256_add_epi32(vec_lut[4], vec_b2i); + vec_lut[3] = vec_b1i; + vec_lut[2] = vec_b1i; + vec_lut[2] = _mm256_sub_epi32(vec_lut[2], vec_b2i); + vec_lut[1] = vec_b2i; + vec_lut[0] = _mm256_setzero_si256(); + __m256i ix[16]; + +#pragma unroll + for (int g = 0; g < 16; ++g) { + ix[g] = vec_lut[g]; + } + + Transpose_8_8(&(ix[0]), &(ix[1]), &(ix[2]), &(ix[3]), &(ix[4]), &(ix[5]),&(ix[6]), &(ix[7])); + Transpose_8_8(&(ix[8]), &(ix[9]), &(ix[10]), &(ix[11]), &(ix[12]), &(ix[13]),&(ix[14]), &(ix[15])); + +#pragma unroll + for (int g = 0; g < 8; ++g) { + ix[g] = _mm256_packs_epi32(ix[g], ix[g + 8]); + ix[g] = _mm256_permute4x64_epi64(ix[g], _MM_SHUFFLE(3, 1, 2, 0)); + ix[g] = _mm256_shuffle_epi8(ix[g], shuffle_mask); + ix[g] = _mm256_permute4x64_epi64(ix[g], _MM_SHUFFLE(3, 1, 2, 0)); + } + int8_t* qlut_i8 = reinterpret_cast(qlut); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 0 * 32 + 0), ix[0]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 1 * 32 + 0), ix[1]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 2 * 32 + 0), ix[2]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 3 * 32 + 0), ix[3]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 4 * 32 + 0), ix[4]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 5 * 32 + 0), ix[5]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 6 * 32 + 0), ix[6]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 7 * 32 + 0), ix[7]); + + } + + *lut_scales = scales; +#endif + return 0; +} + +template +inline int32_t two_lut_ctor(int8_t* qlut, bitnet_float_type* b, bitnet_float_type* lut_scales) { +#if defined __AVX2__ + __m256 vec_lut[16]; + const __m256i vec_bi = _mm256_set_epi32(56, 48, 40, 32, 24, 16, 8, 0); + float scales = *lut_scales; + __m256i shuffle_mask = _mm256_set_epi8( + 0x0f, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x03, 0x01, + 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00, + 0x0f, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x03, 0x01, + 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00 + ); +#pragma unroll + for (int k = 0; k < act_k / 16; ++k) { + __m256 vec_b0f = _mm256_i32gather_ps(b + k * 16 + 0, vec_bi, 1); + __m256 vec_b1f = _mm256_i32gather_ps(b + k * 16 + 1, vec_bi, 1); + + __m256i vec_b0 = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b0f, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC)); + __m256i vec_b1 = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b1f, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC)); + vec_lut[15] = _mm256_setzero_si256(); + vec_lut[14] = _mm256_setzero_si256(); + vec_lut[13] = _mm256_setzero_si256(); + vec_lut[12] = _mm256_setzero_si256(); + vec_lut[11] = _mm256_setzero_si256(); + vec_lut[10] = _mm256_setzero_si256(); + vec_lut[9] = _mm256_setzero_si256(); + vec_lut[8] = vec_b0; + vec_lut[8] = _mm256_add_epi32(vec_lut[8], vec_b1); + vec_lut[7] = vec_b0; + vec_lut[6] = vec_b0; + vec_lut[6] = _mm256_sub_epi32(vec_lut[6], vec_b1); + vec_lut[5] = vec_b1; + vec_lut[4] = _mm256_setzero_si256(); + vec_lut[3] = _mm256_setzero_si256(); + vec_lut[3] = _mm256_sub_epi32(vec_lut[3], vec_b1); + vec_lut[2] = _mm256_setzero_si256(); + vec_lut[2] = _mm256_sub_epi32(vec_lut[2], vec_b0); + vec_lut[2] = _mm256_add_epi32(vec_lut[2], vec_b1); + vec_lut[1] = _mm256_setzero_si256(); + vec_lut[1] = _mm256_sub_epi32(vec_lut[1], vec_b0); + vec_lut[0] = _mm256_setzero_si256(); + vec_lut[0] = _mm256_sub_epi32(vec_lut[0], vec_b0); + vec_lut[0] = _mm256_sub_epi32(vec_lut[0], vec_b1); + + __m256i ix[16]; +#pragma unroll + for (int g = 0; g < 16; ++g) { + ix[g] = vec_lut[g]; + } + + Transpose_8_8(&(ix[0]), &(ix[1]), &(ix[2]), &(ix[3]), &(ix[4]), &(ix[5]),&(ix[6]), &(ix[7])); + Transpose_8_8(&(ix[8]), &(ix[9]), &(ix[10]), &(ix[11]), &(ix[12]), &(ix[13]),&(ix[14]), &(ix[15])); + +#pragma unroll + for (int g = 0; g < 8; ++g) { + ix[g] = _mm256_packs_epi32(ix[g], ix[g + 8]); + ix[g] = _mm256_permute4x64_epi64(ix[g], _MM_SHUFFLE(3, 1, 2, 0)); + ix[g] = _mm256_shuffle_epi8(ix[g], shuffle_mask); + ix[g] = _mm256_permute4x64_epi64(ix[g], _MM_SHUFFLE(3, 1, 2, 0)); + } + + int8_t* qlut_i8 = reinterpret_cast(qlut); + + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 0 * 32 + 0), ix[0]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 1 * 32 + 0), ix[1]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 2 * 32 + 0), ix[2]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 3 * 32 + 0), ix[3]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 4 * 32 + 0), ix[4]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 5 * 32 + 0), ix[5]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 6 * 32 + 0), ix[6]); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 7 * 32 + 0), ix[7]); + + } + *lut_scales = scales; +#endif + return 0; +} +static bool is_type_supported(enum ggml_type type) { + if (type == GGML_TYPE_Q4_0 || + type == GGML_TYPE_TL2) { + return true; + } else { + return false; + } +} +#include + +#define BM1536_4096 256 +#define BBK1536_4096 96 +template +inline void three_tbl_impl_1536_4096(int32_t* c, int8_t* lut, uint8_t* a, uint8_t* sign) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const __m256i vec_sign_mask = _mm256_set1_epi16(0x8000); + const __m256i vec_zero = _mm256_set1_epi8(0x00); + const __m256i vec_one = _mm256_set1_epi8(0xff); + const int KK = BBK1536_4096 / 3; +#pragma unroll + for (int i = 0; i < BM1536_4096; i += 32) { + __m256i vec_as[KK / 2]; + __m256i vec_signs[KK / 8]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } + #pragma unroll + for (int as = 0; as < KK / 8; as++) { + vec_signs[as] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(sign + i * KK / 8 + as * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + __m256i vec_sign = vec_signs[k]; + __m256i vec_a_0 = vec_as[k * 4 + 0]; + __m128i vec_k1_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0)), 15); + __m256i vec_sign_left_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 1)), 15); + __m256i vec_v_top_0 = _mm256_and_si256(_mm256_srli_epi16(vec_a_0, 4), vec_mask); + __m256i vec_v_top_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_0, vec_k1_0), vec_v_top_0); + __m256i vec_v_top_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_0, vec_k2_0), vec_v_top_0); + __m256i vec_sign_right_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 2)), 15); + __m256i vec_sign_right_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 3)), 15); + __m256i vec_v_bot_0 = _mm256_and_si256(vec_a_0, vec_mask); + __m256i vec_v_bot_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_0, vec_k3_0), vec_v_bot_0); + __m256i vec_v_bot_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_0, vec_k4_0), vec_v_bot_0); + __m256i vec_v_top_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_lo_0), vec_sign_left_lo_0); + __m256i vec_v_top_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_hi_0), vec_sign_left_hi_0); + __m256i vec_v_bot_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_lo_0), vec_sign_right_lo_0); + __m256i vec_v_bot_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_hi_0), vec_sign_right_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_0); + __m256i vec_a_1 = vec_as[k * 4 + 1]; + __m128i vec_k1_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1)), 15); + __m256i vec_sign_left_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 1)), 15); + __m256i vec_v_top_1 = _mm256_and_si256(_mm256_srli_epi16(vec_a_1, 4), vec_mask); + __m256i vec_v_top_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_1, vec_k1_1), vec_v_top_1); + __m256i vec_v_top_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_1, vec_k2_1), vec_v_top_1); + __m256i vec_sign_right_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 2)), 15); + __m256i vec_sign_right_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 3)), 15); + __m256i vec_v_bot_1 = _mm256_and_si256(vec_a_1, vec_mask); + __m256i vec_v_bot_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_1, vec_k3_1), vec_v_bot_1); + __m256i vec_v_bot_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_1, vec_k4_1), vec_v_bot_1); + __m256i vec_v_top_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_lo_1), vec_sign_left_lo_1); + __m256i vec_v_top_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_hi_1), vec_sign_left_hi_1); + __m256i vec_v_bot_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_lo_1), vec_sign_right_lo_1); + __m256i vec_v_bot_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_hi_1), vec_sign_right_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_1); + __m256i vec_a_2 = vec_as[k * 4 + 2]; + __m128i vec_k1_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2)), 15); + __m256i vec_sign_left_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 1)), 15); + __m256i vec_v_top_2 = _mm256_and_si256(_mm256_srli_epi16(vec_a_2, 4), vec_mask); + __m256i vec_v_top_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_2, vec_k1_2), vec_v_top_2); + __m256i vec_v_top_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_2, vec_k2_2), vec_v_top_2); + __m256i vec_sign_right_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 2)), 15); + __m256i vec_sign_right_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 3)), 15); + __m256i vec_v_bot_2 = _mm256_and_si256(vec_a_2, vec_mask); + __m256i vec_v_bot_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_2, vec_k3_2), vec_v_bot_2); + __m256i vec_v_bot_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_2, vec_k4_2), vec_v_bot_2); + __m256i vec_v_top_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_lo_2), vec_sign_left_lo_2); + __m256i vec_v_top_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_hi_2), vec_sign_left_hi_2); + __m256i vec_v_bot_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_lo_2), vec_sign_right_lo_2); + __m256i vec_v_bot_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_hi_2), vec_sign_right_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_2); + __m256i vec_a_3 = vec_as[k * 4 + 3]; + __m128i vec_k1_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3)), 15); + __m256i vec_sign_left_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 1)), 15); + __m256i vec_v_top_3 = _mm256_and_si256(_mm256_srli_epi16(vec_a_3, 4), vec_mask); + __m256i vec_v_top_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_3, vec_k1_3), vec_v_top_3); + __m256i vec_v_top_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_3, vec_k2_3), vec_v_top_3); + __m256i vec_sign_right_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 2)), 15); + __m256i vec_sign_right_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 3)), 15); + __m256i vec_v_bot_3 = _mm256_and_si256(vec_a_3, vec_mask); + __m256i vec_v_bot_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_3, vec_k3_3), vec_v_bot_3); + __m256i vec_v_bot_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_3, vec_k4_3), vec_v_bot_3); + __m256i vec_v_top_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_lo_3), vec_sign_left_lo_3); + __m256i vec_v_top_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_hi_3), vec_sign_left_hi_3); + __m256i vec_v_bot_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_lo_3), vec_sign_right_lo_3); + __m256i vec_v_bot_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_hi_3), vec_sign_right_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_3); + } + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM1536_4096 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM1536_4096 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM1536_4096 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM1536_4096 * bs)); + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM1536_4096 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM1536_4096 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM1536_4096 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM1536_4096 * bs), vec_gc3); + } + } +#endif +} + +template +inline int32_t two_tbl_impl1536_4096(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const int KK = BK2 / 2; +#pragma unroll + for (int i = 0; i < BM1536_4096; i += 32) { + __m256i vec_as[KK / 2]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + #pragma unroll + for (int j = 0; j < 4; j++) { + __m256i vec_a = vec_as[k * 4 + j]; + + __m128i vec_k1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 0 + K2 / 2 * 32 * bs)); + __m128i vec_k2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 16 + K2 / 2 * 32 * bs)); + __m128i vec_k3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 32 + K2 / 2 * 32 * bs)); + __m128i vec_k4 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 48 + K2 / 2 * 32 * bs)); + + __m256i vec_v_top = _mm256_and_si256(_mm256_srli_epi16(vec_a, 4), vec_mask); + __m256i vec_v_top_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1, vec_k1), vec_v_top); + __m256i vec_v_top_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2, vec_k2), vec_v_top); + + __m256i vec_v_bot = _mm256_and_si256(vec_a, vec_mask); + __m256i vec_v_bot_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3, vec_k3), vec_v_bot); + __m256i vec_v_bot_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4, vec_k4), vec_v_bot); + + __m256i vec_v_top_lo = _mm256_unpackhi_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_top_hi = _mm256_unpacklo_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_bot_lo = _mm256_unpackhi_epi8(vec_v_bot_fir, vec_v_bot_sec); + __m256i vec_v_bot_hi = _mm256_unpacklo_epi8(vec_v_bot_fir, vec_v_bot_sec); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo); + } + } + + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM1536_4096 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM1536_4096 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM1536_4096 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM1536_4096 * bs)); + + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM1536_4096 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM1536_4096 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM1536_4096 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM1536_4096 * bs), vec_gc3); + } + } +#endif + return 0; +} + +template +int32_t three_qgemm_lut_1536_4096(void* A, void* sign, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM1536_4096]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM1536_4096 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 4032 / BBK1536_4096; ++k_outer) { + three_tbl_impl_1536_4096((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK1536_4096 / 3 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK1536_4096 / 3 / 2 * BM1536_4096)])), (&(((uint8_t*)sign)[(k_outer * BBK1536_4096 / 3 / 8 * BM1536_4096)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM1536_4096; i++) { + ((int32_t*)C)[i] = (int32_t)(((int32_t*)CBits)[i + bs * BM1536_4096]); + } + } + return 0; +} + +template +int32_t two_qgemm_lut_1536_4096(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM1536_4096]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM1536_4096 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 64 / 32; ++k_outer) { + two_tbl_impl1536_4096((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BK2 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BK2 / 2 / 2 * BM1536_4096)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM1536_4096; i++) { + ((int32_t*)C)[i] += (int32_t)(((int32_t*)CBits)[i + bs * BM1536_4096]); + ((float*)C)[i] = (float)(((int32_t*)C)[i]) / ((float*)LUT_Scales)[bs] * ((float*)Scales)[0]; + } + } + return 0; +} + +#include + +#define BM1536_1536 128 +#define BBK1536_1536 192 +template +inline void three_tbl_impl_1536_1536(int32_t* c, int8_t* lut, uint8_t* a, uint8_t* sign) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const __m256i vec_sign_mask = _mm256_set1_epi16(0x8000); + const __m256i vec_zero = _mm256_set1_epi8(0x00); + const __m256i vec_one = _mm256_set1_epi8(0xff); + const int KK = BBK1536_1536 / 3; +#pragma unroll + for (int i = 0; i < BM1536_1536; i += 32) { + __m256i vec_as[KK / 2]; + __m256i vec_signs[KK / 8]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } + #pragma unroll + for (int as = 0; as < KK / 8; as++) { + vec_signs[as] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(sign + i * KK / 8 + as * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + __m256i vec_sign = vec_signs[k]; + __m256i vec_a_0 = vec_as[k * 4 + 0]; + __m128i vec_k1_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0)), 15); + __m256i vec_sign_left_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 1)), 15); + __m256i vec_v_top_0 = _mm256_and_si256(_mm256_srli_epi16(vec_a_0, 4), vec_mask); + __m256i vec_v_top_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_0, vec_k1_0), vec_v_top_0); + __m256i vec_v_top_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_0, vec_k2_0), vec_v_top_0); + __m256i vec_sign_right_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 2)), 15); + __m256i vec_sign_right_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 3)), 15); + __m256i vec_v_bot_0 = _mm256_and_si256(vec_a_0, vec_mask); + __m256i vec_v_bot_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_0, vec_k3_0), vec_v_bot_0); + __m256i vec_v_bot_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_0, vec_k4_0), vec_v_bot_0); + __m256i vec_v_top_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_lo_0), vec_sign_left_lo_0); + __m256i vec_v_top_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_hi_0), vec_sign_left_hi_0); + __m256i vec_v_bot_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_lo_0), vec_sign_right_lo_0); + __m256i vec_v_bot_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_hi_0), vec_sign_right_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_0); + __m256i vec_a_1 = vec_as[k * 4 + 1]; + __m128i vec_k1_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1)), 15); + __m256i vec_sign_left_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 1)), 15); + __m256i vec_v_top_1 = _mm256_and_si256(_mm256_srli_epi16(vec_a_1, 4), vec_mask); + __m256i vec_v_top_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_1, vec_k1_1), vec_v_top_1); + __m256i vec_v_top_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_1, vec_k2_1), vec_v_top_1); + __m256i vec_sign_right_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 2)), 15); + __m256i vec_sign_right_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 3)), 15); + __m256i vec_v_bot_1 = _mm256_and_si256(vec_a_1, vec_mask); + __m256i vec_v_bot_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_1, vec_k3_1), vec_v_bot_1); + __m256i vec_v_bot_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_1, vec_k4_1), vec_v_bot_1); + __m256i vec_v_top_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_lo_1), vec_sign_left_lo_1); + __m256i vec_v_top_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_hi_1), vec_sign_left_hi_1); + __m256i vec_v_bot_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_lo_1), vec_sign_right_lo_1); + __m256i vec_v_bot_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_hi_1), vec_sign_right_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_1); + __m256i vec_a_2 = vec_as[k * 4 + 2]; + __m128i vec_k1_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2)), 15); + __m256i vec_sign_left_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 1)), 15); + __m256i vec_v_top_2 = _mm256_and_si256(_mm256_srli_epi16(vec_a_2, 4), vec_mask); + __m256i vec_v_top_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_2, vec_k1_2), vec_v_top_2); + __m256i vec_v_top_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_2, vec_k2_2), vec_v_top_2); + __m256i vec_sign_right_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 2)), 15); + __m256i vec_sign_right_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 3)), 15); + __m256i vec_v_bot_2 = _mm256_and_si256(vec_a_2, vec_mask); + __m256i vec_v_bot_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_2, vec_k3_2), vec_v_bot_2); + __m256i vec_v_bot_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_2, vec_k4_2), vec_v_bot_2); + __m256i vec_v_top_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_lo_2), vec_sign_left_lo_2); + __m256i vec_v_top_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_hi_2), vec_sign_left_hi_2); + __m256i vec_v_bot_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_lo_2), vec_sign_right_lo_2); + __m256i vec_v_bot_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_hi_2), vec_sign_right_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_2); + __m256i vec_a_3 = vec_as[k * 4 + 3]; + __m128i vec_k1_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3)), 15); + __m256i vec_sign_left_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 1)), 15); + __m256i vec_v_top_3 = _mm256_and_si256(_mm256_srli_epi16(vec_a_3, 4), vec_mask); + __m256i vec_v_top_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_3, vec_k1_3), vec_v_top_3); + __m256i vec_v_top_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_3, vec_k2_3), vec_v_top_3); + __m256i vec_sign_right_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 2)), 15); + __m256i vec_sign_right_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 3)), 15); + __m256i vec_v_bot_3 = _mm256_and_si256(vec_a_3, vec_mask); + __m256i vec_v_bot_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_3, vec_k3_3), vec_v_bot_3); + __m256i vec_v_bot_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_3, vec_k4_3), vec_v_bot_3); + __m256i vec_v_top_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_lo_3), vec_sign_left_lo_3); + __m256i vec_v_top_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_hi_3), vec_sign_left_hi_3); + __m256i vec_v_bot_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_lo_3), vec_sign_right_lo_3); + __m256i vec_v_bot_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_hi_3), vec_sign_right_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_3); + } + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM1536_1536 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM1536_1536 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM1536_1536 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM1536_1536 * bs)); + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM1536_1536 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM1536_1536 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM1536_1536 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM1536_1536 * bs), vec_gc3); + } + } +#endif +} + +template +inline int32_t two_tbl_impl1536_1536(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const int KK = BK2 / 2; +#pragma unroll + for (int i = 0; i < BM1536_1536; i += 32) { + __m256i vec_as[KK / 2]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + #pragma unroll + for (int j = 0; j < 4; j++) { + __m256i vec_a = vec_as[k * 4 + j]; + + __m128i vec_k1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 0 + K2 / 2 * 32 * bs)); + __m128i vec_k2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 16 + K2 / 2 * 32 * bs)); + __m128i vec_k3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 32 + K2 / 2 * 32 * bs)); + __m128i vec_k4 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 48 + K2 / 2 * 32 * bs)); + + __m256i vec_v_top = _mm256_and_si256(_mm256_srli_epi16(vec_a, 4), vec_mask); + __m256i vec_v_top_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1, vec_k1), vec_v_top); + __m256i vec_v_top_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2, vec_k2), vec_v_top); + + __m256i vec_v_bot = _mm256_and_si256(vec_a, vec_mask); + __m256i vec_v_bot_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3, vec_k3), vec_v_bot); + __m256i vec_v_bot_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4, vec_k4), vec_v_bot); + + __m256i vec_v_top_lo = _mm256_unpackhi_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_top_hi = _mm256_unpacklo_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_bot_lo = _mm256_unpackhi_epi8(vec_v_bot_fir, vec_v_bot_sec); + __m256i vec_v_bot_hi = _mm256_unpacklo_epi8(vec_v_bot_fir, vec_v_bot_sec); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo); + } + } + + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM1536_1536 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM1536_1536 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM1536_1536 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM1536_1536 * bs)); + + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM1536_1536 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM1536_1536 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM1536_1536 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM1536_1536 * bs), vec_gc3); + } + } +#endif + return 0; +} + +template +int32_t three_qgemm_lut_1536_1536(void* A, void* sign, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM1536_1536]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM1536_1536 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 1536 / BBK1536_1536; ++k_outer) { + three_tbl_impl_1536_1536((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK1536_1536 / 3 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK1536_1536 / 3 / 2 * BM1536_1536)])), (&(((uint8_t*)sign)[(k_outer * BBK1536_1536 / 3 / 8 * BM1536_1536)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM1536_1536; i++) { + ((int32_t*)C)[i] = (int32_t)(((int32_t*)CBits)[i + bs * BM1536_1536]); + } + } + return 0; +} + +template +int32_t two_qgemm_lut_1536_1536(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM1536_1536]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM1536_1536 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 0 / 32; ++k_outer) { + two_tbl_impl1536_1536((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BK2 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BK2 / 2 / 2 * BM1536_1536)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM1536_1536; i++) { + ((int32_t*)C)[i] += (int32_t)(((int32_t*)CBits)[i + bs * BM1536_1536]); + ((float*)C)[i] = (float)(((int32_t*)C)[i]) / ((float*)LUT_Scales)[bs] * ((float*)Scales)[0]; + } + } + return 0; +} + +#include + +#define BM4096_1536 256 +#define BBK4096_1536 96 +template +inline void three_tbl_impl_4096_1536(int32_t* c, int8_t* lut, uint8_t* a, uint8_t* sign) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const __m256i vec_sign_mask = _mm256_set1_epi16(0x8000); + const __m256i vec_zero = _mm256_set1_epi8(0x00); + const __m256i vec_one = _mm256_set1_epi8(0xff); + const int KK = BBK4096_1536 / 3; +#pragma unroll + for (int i = 0; i < BM4096_1536; i += 32) { + __m256i vec_as[KK / 2]; + __m256i vec_signs[KK / 8]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } + #pragma unroll + for (int as = 0; as < KK / 8; as++) { + vec_signs[as] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(sign + i * KK / 8 + as * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + __m256i vec_sign = vec_signs[k]; + __m256i vec_a_0 = vec_as[k * 4 + 0]; + __m128i vec_k1_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0)), 15); + __m256i vec_sign_left_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 1)), 15); + __m256i vec_v_top_0 = _mm256_and_si256(_mm256_srli_epi16(vec_a_0, 4), vec_mask); + __m256i vec_v_top_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_0, vec_k1_0), vec_v_top_0); + __m256i vec_v_top_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_0, vec_k2_0), vec_v_top_0); + __m256i vec_sign_right_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 2)), 15); + __m256i vec_sign_right_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 3)), 15); + __m256i vec_v_bot_0 = _mm256_and_si256(vec_a_0, vec_mask); + __m256i vec_v_bot_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_0, vec_k3_0), vec_v_bot_0); + __m256i vec_v_bot_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_0, vec_k4_0), vec_v_bot_0); + __m256i vec_v_top_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_lo_0), vec_sign_left_lo_0); + __m256i vec_v_top_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_hi_0), vec_sign_left_hi_0); + __m256i vec_v_bot_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_lo_0), vec_sign_right_lo_0); + __m256i vec_v_bot_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_hi_0), vec_sign_right_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_0); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_0); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_0); + __m256i vec_a_1 = vec_as[k * 4 + 1]; + __m128i vec_k1_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1)), 15); + __m256i vec_sign_left_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 1)), 15); + __m256i vec_v_top_1 = _mm256_and_si256(_mm256_srli_epi16(vec_a_1, 4), vec_mask); + __m256i vec_v_top_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_1, vec_k1_1), vec_v_top_1); + __m256i vec_v_top_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_1, vec_k2_1), vec_v_top_1); + __m256i vec_sign_right_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 2)), 15); + __m256i vec_sign_right_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 3)), 15); + __m256i vec_v_bot_1 = _mm256_and_si256(vec_a_1, vec_mask); + __m256i vec_v_bot_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_1, vec_k3_1), vec_v_bot_1); + __m256i vec_v_bot_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_1, vec_k4_1), vec_v_bot_1); + __m256i vec_v_top_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_lo_1), vec_sign_left_lo_1); + __m256i vec_v_top_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_hi_1), vec_sign_left_hi_1); + __m256i vec_v_bot_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_lo_1), vec_sign_right_lo_1); + __m256i vec_v_bot_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_hi_1), vec_sign_right_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_1); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_1); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_1); + __m256i vec_a_2 = vec_as[k * 4 + 2]; + __m128i vec_k1_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2)), 15); + __m256i vec_sign_left_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 1)), 15); + __m256i vec_v_top_2 = _mm256_and_si256(_mm256_srli_epi16(vec_a_2, 4), vec_mask); + __m256i vec_v_top_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_2, vec_k1_2), vec_v_top_2); + __m256i vec_v_top_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_2, vec_k2_2), vec_v_top_2); + __m256i vec_sign_right_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 2)), 15); + __m256i vec_sign_right_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 3)), 15); + __m256i vec_v_bot_2 = _mm256_and_si256(vec_a_2, vec_mask); + __m256i vec_v_bot_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_2, vec_k3_2), vec_v_bot_2); + __m256i vec_v_bot_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_2, vec_k4_2), vec_v_bot_2); + __m256i vec_v_top_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_lo_2), vec_sign_left_lo_2); + __m256i vec_v_top_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_hi_2), vec_sign_left_hi_2); + __m256i vec_v_bot_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_lo_2), vec_sign_right_lo_2); + __m256i vec_v_bot_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_hi_2), vec_sign_right_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_2); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_2); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_2); + __m256i vec_a_3 = vec_as[k * 4 + 3]; + __m128i vec_k1_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 0 + K3 / 3 * 32 * bs)); + __m128i vec_k2_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 16 + K3 / 3 * 32 * bs)); + __m128i vec_k3_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 32 + K3 / 3 * 32 * bs)); + __m128i vec_k4_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 48 + K3 / 3 * 32 * bs)); + __m256i vec_sign_left_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3)), 15); + __m256i vec_sign_left_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 1)), 15); + __m256i vec_v_top_3 = _mm256_and_si256(_mm256_srli_epi16(vec_a_3, 4), vec_mask); + __m256i vec_v_top_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_3, vec_k1_3), vec_v_top_3); + __m256i vec_v_top_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_3, vec_k2_3), vec_v_top_3); + __m256i vec_sign_right_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 2)), 15); + __m256i vec_sign_right_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 3)), 15); + __m256i vec_v_bot_3 = _mm256_and_si256(vec_a_3, vec_mask); + __m256i vec_v_bot_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_3, vec_k3_3), vec_v_bot_3); + __m256i vec_v_bot_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_3, vec_k4_3), vec_v_bot_3); + __m256i vec_v_top_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_lo_3), vec_sign_left_lo_3); + __m256i vec_v_top_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_hi_3), vec_sign_left_hi_3); + __m256i vec_v_bot_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_lo_3), vec_sign_right_lo_3); + __m256i vec_v_bot_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_hi_3), vec_sign_right_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_3); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_3); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_3); + } + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM4096_1536 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM4096_1536 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM4096_1536 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM4096_1536 * bs)); + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM4096_1536 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM4096_1536 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM4096_1536 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM4096_1536 * bs), vec_gc3); + } + } +#endif +} + +template +inline int32_t two_tbl_impl4096_1536(int32_t* c, int8_t* lut, uint8_t* a) { +#ifdef __AVX2__ + const __m256i vec_mask = _mm256_set1_epi8(0x0f); + const int KK = BK2 / 2; +#pragma unroll + for (int i = 0; i < BM4096_1536; i += 32) { + __m256i vec_as[KK / 2]; + #pragma unroll + for (int ai = 0; ai < KK / 2; ai++) { + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32)); + } +#pragma unroll + for (int bs = 0; bs < batch_size; bs++) { + __m256i vec_c0 = _mm256_setzero_si256(); + __m256i vec_c1 = _mm256_setzero_si256(); +#pragma unroll + for (int k = 0; k < KK / 8; k++) { + #pragma unroll + for (int j = 0; j < 4; j++) { + __m256i vec_a = vec_as[k * 4 + j]; + + __m128i vec_k1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 0 + K2 / 2 * 32 * bs)); + __m128i vec_k2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 16 + K2 / 2 * 32 * bs)); + __m128i vec_k3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 32 + K2 / 2 * 32 * bs)); + __m128i vec_k4 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 48 + K2 / 2 * 32 * bs)); + + __m256i vec_v_top = _mm256_and_si256(_mm256_srli_epi16(vec_a, 4), vec_mask); + __m256i vec_v_top_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1, vec_k1), vec_v_top); + __m256i vec_v_top_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2, vec_k2), vec_v_top); + + __m256i vec_v_bot = _mm256_and_si256(vec_a, vec_mask); + __m256i vec_v_bot_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3, vec_k3), vec_v_bot); + __m256i vec_v_bot_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4, vec_k4), vec_v_bot); + + __m256i vec_v_top_lo = _mm256_unpackhi_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_top_hi = _mm256_unpacklo_epi8(vec_v_top_fir, vec_v_top_sec); + __m256i vec_v_bot_lo = _mm256_unpackhi_epi8(vec_v_bot_fir, vec_v_bot_sec); + __m256i vec_v_bot_hi = _mm256_unpacklo_epi8(vec_v_bot_fir, vec_v_bot_sec); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi); + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo); + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo); + } + } + + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM4096_1536 * bs)); + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM4096_1536 * bs)); + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM4096_1536 * bs)); + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM4096_1536 * bs)); + + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0))); + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1))); + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1))); + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1))); + + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM4096_1536 * bs), vec_gc0); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM4096_1536 * bs), vec_gc1); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM4096_1536 * bs), vec_gc2); + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM4096_1536 * bs), vec_gc3); + } + } +#endif + return 0; +} + +template +int32_t three_qgemm_lut_4096_1536(void* A, void* sign, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM4096_1536]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM4096_1536 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 1536 / BBK4096_1536; ++k_outer) { + three_tbl_impl_4096_1536((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK4096_1536 / 3 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK4096_1536 / 3 / 2 * BM4096_1536)])), (&(((uint8_t*)sign)[(k_outer * BBK4096_1536 / 3 / 8 * BM4096_1536)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM4096_1536; i++) { + ((int32_t*)C)[i] = (int32_t)(((int32_t*)CBits)[i + bs * BM4096_1536]); + } + } + return 0; +} + +template +int32_t two_qgemm_lut_4096_1536(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) { + alignas(32) uint32_t CBits[BATCH_SIZE * BM4096_1536]; + memset(&(CBits[0]), 0, BATCH_SIZE * BM4096_1536 * sizeof(int32_t)); +#pragma unroll + for (int32_t k_outer = 0; k_outer < 0 / 32; ++k_outer) { + two_tbl_impl4096_1536((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BK2 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BK2 / 2 / 2 * BM4096_1536)]))); + } +#pragma unroll + for (int bs = 0; bs < BATCH_SIZE; bs++) { +#pragma unroll + for (int i = 0; i < BM4096_1536; i++) { + ((int32_t*)C)[i] += (int32_t)(((int32_t*)CBits)[i + bs * BM4096_1536]); + ((float*)C)[i] = (float)(((int32_t*)C)[i]) / ((float*)LUT_Scales)[bs] * ((float*)Scales)[0]; + } + } + return 0; +} + +void ggml_preprocessor(int bs, int m, int three_k, int two_k, void* B, void* LUT_Scales, void* Three_QLUT, void* Two_QLUT) { + partial_max_reset(bs, (&(((float*)LUT_Scales)[0]))); + if (m == 1536 && two_k == 64 && three_k == 4032) { + for (int32_t b = 0; b < bs; b++) { + per_tensor_quant(two_k + three_k, (&(((float*)LUT_Scales)[b])), (&(((float*)B)[b * (two_k + three_k)]))); + three_lut_ctor<4032>((&(((int8_t*)Three_QLUT)[b * three_k / 3 * 32])), (&(((float*)B)[b * (three_k + two_k)])), (&(((float*)LUT_Scales)[b]))); + two_lut_ctor<64>((&(((int8_t*)Two_QLUT)[b * two_k / 2 * 32])), (&(((float*)B)[b * (three_k + two_k) + 4032])), (&(((float*)LUT_Scales)[b]))); + } + } + else if (m == 1536 && two_k == 0 && three_k == 1536) { + for (int32_t b = 0; b < bs; b++) { + per_tensor_quant(two_k + three_k, (&(((float*)LUT_Scales)[b])), (&(((float*)B)[b * (two_k + three_k)]))); + three_lut_ctor<1536>((&(((int8_t*)Three_QLUT)[b * three_k / 3 * 32])), (&(((float*)B)[b * (three_k + two_k)])), (&(((float*)LUT_Scales)[b]))); + two_lut_ctor<0>((&(((int8_t*)Two_QLUT)[b * two_k / 2 * 32])), (&(((float*)B)[b * (three_k + two_k) + 1536])), (&(((float*)LUT_Scales)[b]))); + } + } + else if (m == 4096 && two_k == 0 && three_k == 1536) { + for (int32_t b = 0; b < bs; b++) { + per_tensor_quant(two_k + three_k, (&(((float*)LUT_Scales)[b])), (&(((float*)B)[b * (two_k + three_k)]))); + three_lut_ctor<1536>((&(((int8_t*)Three_QLUT)[b * three_k / 3 * 32])), (&(((float*)B)[b * (three_k + two_k)])), (&(((float*)LUT_Scales)[b]))); + two_lut_ctor<0>((&(((int8_t*)Two_QLUT)[b * two_k / 2 * 32])), (&(((float*)B)[b * (three_k + two_k) + 1536])), (&(((float*)LUT_Scales)[b]))); + } + } +} +void ggml_qgemm_lut(int bs, int m, int k, int BK, void* A, void* sign, void* LUT, void* Scales, void* LUT_Scales, void* C) { + if (m == 1536 && k == 4096) { + if (BK == 64) { + if (bs == 1) { + two_qgemm_lut_1536_4096<1>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 8) { + two_qgemm_lut_1536_4096<8>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 32) { + two_qgemm_lut_1536_4096<32>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 128) { + two_qgemm_lut_1536_4096<128>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 256) { + two_qgemm_lut_1536_4096<256>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 512) { + two_qgemm_lut_1536_4096<512>(A, LUT, Scales, LUT_Scales, C); + } + } + else if (BK == 4032) { + if (bs == 1) { + three_qgemm_lut_1536_4096<1>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 8) { + three_qgemm_lut_1536_4096<8>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 32) { + three_qgemm_lut_1536_4096<32>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 128) { + three_qgemm_lut_1536_4096<128>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 256) { + three_qgemm_lut_1536_4096<256>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 512) { + three_qgemm_lut_1536_4096<512>(A, sign, LUT, Scales, LUT_Scales, C); + } + } + } + else if (m == 1536 && k == 1536) { + if (BK == 0) { + if (bs == 1) { + two_qgemm_lut_1536_1536<1>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 8) { + two_qgemm_lut_1536_1536<8>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 32) { + two_qgemm_lut_1536_1536<32>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 128) { + two_qgemm_lut_1536_1536<128>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 256) { + two_qgemm_lut_1536_1536<256>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 512) { + two_qgemm_lut_1536_1536<512>(A, LUT, Scales, LUT_Scales, C); + } + } + else if (BK == 1536) { + if (bs == 1) { + three_qgemm_lut_1536_1536<1>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 8) { + three_qgemm_lut_1536_1536<8>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 32) { + three_qgemm_lut_1536_1536<32>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 128) { + three_qgemm_lut_1536_1536<128>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 256) { + three_qgemm_lut_1536_1536<256>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 512) { + three_qgemm_lut_1536_1536<512>(A, sign, LUT, Scales, LUT_Scales, C); + } + } + } + else if (m == 4096 && k == 1536) { + if (BK == 0) { + if (bs == 1) { + two_qgemm_lut_4096_1536<1>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 8) { + two_qgemm_lut_4096_1536<8>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 32) { + two_qgemm_lut_4096_1536<32>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 128) { + two_qgemm_lut_4096_1536<128>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 256) { + two_qgemm_lut_4096_1536<256>(A, LUT, Scales, LUT_Scales, C); + } else if (bs == 512) { + two_qgemm_lut_4096_1536<512>(A, LUT, Scales, LUT_Scales, C); + } + } + else if (BK == 1536) { + if (bs == 1) { + three_qgemm_lut_4096_1536<1>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 8) { + three_qgemm_lut_4096_1536<8>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 32) { + three_qgemm_lut_4096_1536<32>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 128) { + three_qgemm_lut_4096_1536<128>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 256) { + three_qgemm_lut_4096_1536<256>(A, sign, LUT, Scales, LUT_Scales, C); + }else if (bs == 512) { + three_qgemm_lut_4096_1536<512>(A, sign, LUT, Scales, LUT_Scales, C); + } + } + } +} + +void ggml_bitnet_transform_tensor(struct ggml_tensor * tensor) { + if (!(is_type_supported(tensor->type) && tensor->backend == GGML_BACKEND_TYPE_CPU && tensor->extra == nullptr)) { + return; + } + + int k = tensor->ne[0]; + int m = tensor->ne[1]; + const int lut_scales_size = 1; + int bk = 0; + int bm = 0; + + if (m == 1536 && k == 4096) { + bm = BM1536_4096; + bk = BBK1536_4096; + } +else if (m == 1536 && k == 1536) { + bm = BM1536_1536; + bk = BBK1536_1536; + } +else if (m == 4096 && k == 1536) { + bm = BM4096_1536; + bk = BBK4096_1536; + } + + const int n_tile_num = m / bm; + const int BK = bk; + uint8_t * qweights; + bitnet_float_type * scales; + + scales = (bitnet_float_type *) aligned_malloc(sizeof(bitnet_float_type)); + qweights = (uint8_t *) tensor->data; + float * i2_scales = (float * )(qweights + k * m / 4); + scales[0] = (bitnet_float_type) i2_scales[0]; + + tensor->extra = bitnet_tensor_extras + bitnet_tensor_extras_index; + bitnet_tensor_extras[bitnet_tensor_extras_index++] = { + /* .lut_scales_size = */ lut_scales_size, + /* .BK = */ BK, + /* .n_tile_num = */ n_tile_num, + /* .qweights = */ qweights, + /* .scales = */ scales + }; +} +#endif \ No newline at end of file diff --git a/preset_kernels/bitnet_b1_58-large/kernel_config_tl1.ini b/preset_kernels/bitnet_b1_58-large/kernel_config_tl1.ini new file mode 100644 index 0000000..5d94318 --- /dev/null +++ b/preset_kernels/bitnet_b1_58-large/kernel_config_tl1.ini @@ -0,0 +1,21 @@ +[Kernels_0] +m = 1536 +k = 4096 +bm = 256 +bk = 128 +bmm = 32 + +[Kernels_1] +m = 1536 +k = 1536 +bm = 128 +bk = 64 +bmm = 64 + +[Kernels_2] +m = 4096 +k = 1536 +bm = 256 +bk = 128 +bmm = 32 + diff --git a/preset_kernels/bitnet_b1_58-large/kernel_config_tl2.ini b/preset_kernels/bitnet_b1_58-large/kernel_config_tl2.ini new file mode 100644 index 0000000..54d4b83 --- /dev/null +++ b/preset_kernels/bitnet_b1_58-large/kernel_config_tl2.ini @@ -0,0 +1,21 @@ +[Kernels_0] +m = 1536 +k = 4096 +bm = 256 +bk = 96 +bmm = 32 + +[Kernels_1] +m = 1536 +k = 1536 +bm = 128 +bk = 192 +bmm = 32 + +[Kernels_2] +m = 4096 +k = 1536 +bm = 256 +bk = 96 +bmm = 64 + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..3f5c547 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,11 @@ +# These requirements include all dependencies for all top-level python scripts +# for llama.cpp. Avoid adding packages here directly. +# +# Package versions must stay compatible across all top-level python scripts. +# + +-r 3rdparty/llama.cpp/requirements/requirements-convert_legacy_llama.txt +-r 3rdparty/llama.cpp/requirements/requirements-convert_hf_to_gguf.txt +-r 3rdparty/llama.cpp/requirements/requirements-convert_hf_to_gguf_update.txt +-r 3rdparty/llama.cpp/requirements/requirements-convert_llama_ggml_to_gguf.txt +-r 3rdparty/llama.cpp/requirements/requirements-convert_lora_to_gguf.txt \ No newline at end of file diff --git a/run_inference.py b/run_inference.py new file mode 100644 index 0000000..fe14e0e --- /dev/null +++ b/run_inference.py @@ -0,0 +1,53 @@ +import os +import sys +import signal +import platform +import argparse +import subprocess + +def run_command(command, shell=False): + """Run a system command and ensure it succeeds.""" + try: + subprocess.run(command, shell=shell, check=True) + except subprocess.CalledProcessError as e: + print(f"Error occurred while running command: {e}") + sys.exit(1) + +def run_inference(): + build_dir = "build" + if platform.system() == "Windows": + main_path = os.path.join(build_dir, "bin", "Release", "llama-cli.exe") + if not os.path.exists(main_path): + main_path = os.path.join(build_dir, "bin", "llama-cli") + else: + main_path = os.path.join(build_dir, "bin", "llama-cli") + command = [ + f'{main_path}', + '-m', args.model, + '-n', str(args.n_predict), + '-t', str(args.threads), + '-p', args.prompt, + '-ngl', '0', + '-c', str(args.ctx_size), + '--temp', str(args.temperature), + "-b", "1" + ] + run_command(command) + +def signal_handler(sig, frame): + print("Ctrl+C pressed, exiting...") + sys.exit(0) + +if __name__ == "__main__": + signal.signal(signal.SIGINT, signal_handler) + # Usage: python run_inference.py -p "Microsoft Corporation is an American multinational corporation and technology company headquartered in Redmond, Washington." + parser = argparse.ArgumentParser(description='Run inference') + parser.add_argument("-m", "--model", type=str, help="Path to model file", required=False, default="models/bitnet_b1_58-3B/ggml-model-i2_s.gguf") + parser.add_argument("-n", "--n-predict", type=int, help="Number of tokens to predict when generating text", required=False, default=128) + parser.add_argument("-p", "--prompt", type=str, help="Prompt to generate text from", required=True) + parser.add_argument("-t", "--threads", type=int, help="Number of threads to use", required=False, default=2) + parser.add_argument("-c", "--ctx-size", type=int, help="Size of the prompt context", required=False, default=2048) + parser.add_argument("-temp", "--temperature", type=float, help="Temperature, a hyperparameter that controls the randomness of the generated text", required=False, default=0.8) + + args = parser.parse_args() + run_inference() \ No newline at end of file diff --git a/setup_env.py b/setup_env.py new file mode 100644 index 0000000..b9bf5fc --- /dev/null +++ b/setup_env.py @@ -0,0 +1,202 @@ +import subprocess +import signal +import sys +import os +import platform +import argparse +import logging +import shutil +from pathlib import Path + +logger = logging.getLogger("setup_env") + +SUPPORTED_HF_MODELS = { + "1bitLLM/bitnet_b1_58-large": { + "model_name": "bitnet_b1_58-large", + }, + "1bitLLM/bitnet_b1_58-3B": { + "model_name": "bitnet_b1_58-3B", + }, + "HF1BitLLM/Llama3-8B-1.58-100B-tokens": { + "model_name": "Llama3-8B-1.58-100B-tokens", + } +} + +SUPPORTED_QUANT_TYPES = { + "arm64": ["i2_s", "tl1"], + "x86_64": ["i2_s", "tl2"] +} + +COMPILER_EXTRA_ARGS = { + "arm64": ["-DBITNET_ARM_TL1=ON"], + "x86_64": ["-DBITNET_X86_TL2=ON"] +} + +OS_EXTRA_ARGS = { + "Windows":["-T", "ClangCL"], + "Linux": ["-DCMAKE_C_COMPILER=clang", "-DCMAKE_CXX_COMPILER=clang++"] +} + +ARCH_ALIAS = { + "AMD64": "x86_64", + "x86": "x86_64", + "x86_64": "x86_64", + "aarch64": "arm64", + "arm64": "arm64", + "ARM64": "arm64", +} + +def system_info(): + return platform.system(), ARCH_ALIAS[platform.machine()] + +def get_model_name(): + if args.hf_repo: + return SUPPORTED_HF_MODELS[args.hf_repo]["model_name"] + return os.path.basename(os.path.normpath(args.model_dir)) + +def run_command(command, shell=False, log_step=None): + """Run a system command and ensure it succeeds.""" + if log_step: + log_file = os.path.join(args.log_dir, log_step + ".log") + with open(log_file, "w") as f: + try: + subprocess.run(command, shell=shell, check=True, stdout=f, stderr=f) + except subprocess.CalledProcessError as e: + logging.error(f"Error occurred while running command: {e}, check details in {log_file}") + sys.exit(1) + else: + try: + subprocess.run(command, shell=shell, check=True) + except subprocess.CalledProcessError as e: + logging.error(f"Error occurred while running command: {e}") + sys.exit(1) + +def prepare_model(): + _, arch = system_info() + hf_url = args.hf_repo + model_dir = args.model_dir + quant_type = args.quant_type + quant_embd = args.quant_embd + if hf_url is not None: + # download the model + model_dir = os.path.join(model_dir, SUPPORTED_HF_MODELS[hf_url]["model_name"]) + Path(model_dir).mkdir(parents=True, exist_ok=True) + logging.info(f"Downloading model {hf_url} from HuggingFace to {model_dir}...") + run_command(["huggingface-cli", "download", hf_url, "--local-dir", model_dir], log_step="download_model") + elif not os.path.exists(model_dir): + logging.error(f"Model directory {model_dir} does not exist.") + sys.exit(1) + else: + logging.info(f"Loading model from directory {model_dir}.") + gguf_path = os.path.join(model_dir, "ggml-model-" + quant_type + ".gguf") + if not os.path.exists(gguf_path) or os.path.getsize(gguf_path) == 0: + logging.info(f"Converting HF model to GGUF format...") + if quant_type.startswith("tl"): + run_command([sys.executable, "utils/convert-hf-to-gguf-bitnet.py", model_dir, "--outtype", quant_type, "--quant-embd"], log_step="convert_to_tl") + else: # i2s + # convert to f32 + run_command([sys.executable, "utils/convert-hf-to-gguf-bitnet.py", model_dir, "--outtype", "f32"], log_step="convert_to_f32_gguf") + f32_model = os.path.join(model_dir, "ggml-model-f32.gguf") + i2s_model = os.path.join(model_dir, "ggml-model-i2_s.gguf") + # quantize to i2s + if platform.system() != "Windows": + if quant_embd: + run_command(["./build/bin/llama-quantize", "--token-embedding-type", "f16", f32_model, i2s_model, "I2_S", "1", "1"], log_step="quantize_to_i2s") + else: + run_command(["./build/bin/llama-quantize", f32_model, i2s_model, "I2_S", "1"], log_step="quantize_to_i2s") + else: + if quant_embd: + run_command(["./build/bin/Release/llama-quantize", "--token-embedding-type", "f16", f32_model, i2s_model, "I2_S", "1", "1"], log_step="quantize_to_i2s") + else: + run_command(["./build/bin/Release/llama-quantize", f32_model, i2s_model, "I2_S", "1"], log_step="quantize_to_i2s") + + logging.info(f"GGUF model saved at {gguf_path}") + else: + logging.info(f"GGUF model already exists at {gguf_path}") + +def setup_gguf(): + # Install the pip package + run_command([sys.executable, "-m", "pip", "install", "3rdparty/llama.cpp/gguf-py"], log_step="install_gguf") + +def gen_code(): + _, arch = system_info() + if arch == "arm64": + if args.use_pretuned: + pretuned_kernels = os.path.join("preset_kernels", get_model_name()) + if not os.path.exists(pretuned_kernels): + logging.error(f"Pretuned kernels not found for model {args.hf_repo}") + sys.exit(1) + if args.quant_type == "tl1": + shutil.copyfile(os.path.join(pretuned_kernels, "bitnet-lut-kernels-tl1.h"), "include/bitnet-lut-kernels.h") + shutil.copyfile(os.path.join(pretuned_kernels, "kernel_config_tl1.ini"), "include/kernel_config.ini") + elif args.quant_type == "tl2": + shutil.copyfile(os.path.join(pretuned_kernels, "bitnet-lut-kernels-tl2.h"), "include/bitnet-lut-kernels.h") + shutil.copyfile(os.path.join(pretuned_kernels, "kernel_config_tl2.ini"), "include/kernel_config.ini") + if get_model_name() == "bitnet_b1_58-large": + run_command([sys.executable, "utils/codegen_tl1.py", "--model", "bitnet_b1_58-large", "--BM", "256,128,256", "--BK", "128,64,128", "--bm", "32,64,32"], log_step="codegen") + elif get_model_name() == "Llama3-8B-1.58-100B-tokens": + run_command([sys.executable, "utils/codegen_tl1.py", "--model", "Llama3-8B-1.58-100B-tokens", "--BM", "256,128,256,128", "--BK", "128,64,128,64", "--bm", "32,64,32,64"], log_step="codegen") + elif get_model_name() == "bitnet_b1_58-3B": + run_command([sys.executable, "utils/codegen_tl1.py", "--model", "bitnet_b1_58-3B", "--BM", "160,320,320", "--BK", "64,128,64", "--bm", "32,64,32"], log_step="codegen") + else: + raise NotImplementedError() + else: + if args.use_pretuned: + # cp preset_kernels/model_name/bitnet-lut-kernels_tl1.h to include/bitnet-lut-kernels.h + pretuned_kernels = os.path.join("preset_kernels", get_model_name()) + if not os.path.exists(pretuned_kernels): + logging.error(f"Pretuned kernels not found for model {args.hf_repo}") + sys.exit(1) + shutil.copyfile(os.path.join(pretuned_kernels, "bitnet-lut-kernels-tl2.h"), "include/bitnet-lut-kernels.h") + if get_model_name() == "bitnet_b1_58-large": + run_command([sys.executable, "utils/codegen_tl2.py", "--model", "bitnet_b1_58-large", "--BM", "256,128,256", "--BK", "96,192,96", "--bm", "32,32,32"], log_step="codegen") + elif get_model_name() == "Llama3-8B-1.58-100B-tokens": + run_command([sys.executable, "utils/codegen_tl2.py", "--model", "Llama3-8B-1.58-100B-tokens", "--BM", "256,128,256,128", "--BK", "96,96,96,96", "--bm", "32,32,32,32"], log_step="codegen") + elif get_model_name() == "bitnet_b1_58-3B": + run_command([sys.executable, "utils/codegen_tl2.py", "--model", "bitnet_b1_58-3B", "--BM", "160,320,320", "--BK", "96,96,96", "--bm", "32,32,32"], log_step="codegen") + else: + raise NotImplementedError() + + +def compile(): + # Check if cmake is installed + cmake_exists = subprocess.run(["cmake", "--version"], capture_output=True) + if cmake_exists.returncode != 0: + logging.error("Cmake is not available. Please install CMake and try again.") + sys.exit(1) + _, arch = system_info() + if arch not in COMPILER_EXTRA_ARGS.keys(): + logging.error(f"Arch {arch} is not supported yet") + exit(0) + logging.info("Compiling the code using CMake.") + run_command(["cmake", "-B", "build", *COMPILER_EXTRA_ARGS[arch], *OS_EXTRA_ARGS.get(platform.system(), [])], log_step="generate_build_files") + # run_command(["cmake", "--build", "build", "--target", "llama-cli", "--config", "Release"]) + run_command(["cmake", "--build", "build", "--config", "Release"], log_step="compile") + +def main(): + setup_gguf() + gen_code() + compile() + prepare_model() + +def parse_args(): + _, arch = system_info() + parser = argparse.ArgumentParser(description='Setup the environment for running the inference') + parser.add_argument("--hf-repo", "-hr", type=str, help="Model used for inference", choices=SUPPORTED_HF_MODELS.keys()) + parser.add_argument("--model-dir", "-md", type=str, help="Directory to save/load the model", default="models") + parser.add_argument("--log-dir", "-ld", type=str, help="Directory to save the logging info", default="logs") + parser.add_argument("--quant-type", "-q", type=str, help="Quantization type", choices=SUPPORTED_QUANT_TYPES[arch], default="i2_s") + parser.add_argument("--quant-embd", action="store_true", help="Quantize the embeddings to f16") + parser.add_argument("--use-pretuned", "-p", action="store_true", help="Use the pretuned kernel parameters") + return parser.parse_args() + +def signal_handler(sig, frame): + logging.info("Ctrl+C pressed, exiting...") + sys.exit(0) + +if __name__ == "__main__": + signal.signal(signal.SIGINT, signal_handler) + args = parse_args() + Path(args.log_dir).mkdir(parents=True, exist_ok=True) + logging.basicConfig(level=logging.INFO) + main() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..9cead70 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,10 @@ +set(GGML_HEADERS_BITNET ../include/ggml-bitnet.h) +set(GGML_SOURCES_BITNET ggml-bitnet-mad.cpp) +set(GGML_SOURCES_BITNET ggml-bitnet-lut.cpp) + +include_directories(3rdparty/llama.cpp/ggml/include) + +if ((NOT ${CMAKE_C_COMPILER_ID} MATCHES "Clang") OR +(NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")) + message(FATAL_ERROR "Clang is required for Bitnet.cpp compilation") +endif() \ No newline at end of file diff --git a/src/ggml-bitnet-lut.cpp b/src/ggml-bitnet-lut.cpp new file mode 100644 index 0000000..d6bea16 --- /dev/null +++ b/src/ggml-bitnet-lut.cpp @@ -0,0 +1,163 @@ +#include +#include + +#include "ggml-bitnet.h" +#include "ggml-quants.h" +#include "bitnet-lut-kernels.h" + +#if defined(GGML_BITNET_ARM_TL1) + +void ggml_bitnet_init(void) { + // LOG(INFO) << "ggml_bitnet_init"; + + if (initialized) { + return; + } + initialized = true; + + // if (wrapper == nullptr) { + // wrapper = new BITNET::BITNETGeMMWrapper(); + // } + if (bitnet_tensor_extras == nullptr) { + bitnet_tensor_extras = new bitnet_tensor_extra[GGML_BITNET_MAX_NODES]; + } + bitnet_tensor_extras_index = 0; +} + +void ggml_bitnet_free(void) { + // LOG(INFO) << "ggml_bitnet_free"; + + if (!initialized) { + return; + } + initialized = false; + + // delete wrapper; + // wrapper = nullptr; + for (size_t i = 0; i < bitnet_tensor_extras_index; i++) { + // aligned_free(bitnet_tensor_extras[i].qweights); + // aligned_free(bitnet_tensor_extras[i].scales); + } + delete[] bitnet_tensor_extras; + bitnet_tensor_extras = nullptr; +} + +static bool do_permutate(enum ggml_type type) { + if (type == GGML_TYPE_TL1) { + // Add additional args to decide if permuted I2 or naive I2 + return false; + } else { + return true; + } +} + +bool ggml_bitnet_can_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, const struct ggml_tensor * dst) { + if ((is_type_supported(src0->type)) && + src1->type == GGML_TYPE_F32 && + dst->type == GGML_TYPE_F32 && + src0->backend == GGML_BACKEND_TYPE_CPU) { + if (src1->ne[1] <= 1) { + return true; + } + } + return false; +} + +size_t ggml_bitnet_mul_mat_get_wsize(const struct ggml_tensor * src0, const struct ggml_tensor * src1, const struct ggml_tensor * dst) { + const size_t ne01 = src0->ne[1]; + const size_t ne10 = src1->ne[0]; + const size_t ne11 = src1->ne[1]; + const int bits = ggml_bitnet_get_type_bits(src0->type); + + size_t wsize = ne10 * ne11 * 15 * sizeof(int8_t) + 1 * ne11 * 2 * sizeof(bitnet_float_type); + if (sizeof(bitnet_float_type) == 2) { + // Need fp32 to fp16 conversion + wsize += std::max(ne10, ne01) * ne11 * sizeof(bitnet_float_type); + } + wsize = ((wsize - 1) / 64 + 1) * 64; + return wsize; +} + +int ggml_bitnet_get_type_bits(enum ggml_type type) { + switch (type) { + case GGML_TYPE_TL1: + return 2; + case GGML_TYPE_Q4_0: + return 4; + default: + return 0; + } +} + +#endif +#if defined(GGML_BITNET_X86_TL2) +void ggml_bitnet_init(void) { + // LOG(INFO) << "ggml_bitnet_init"; + + if (initialized) { + return; + } + initialized = true; + + // if (wrapper == nullptr) { + // wrapper = new BITNET::BITNETGeMMWrapper(); + // } + if (bitnet_tensor_extras == nullptr) { + bitnet_tensor_extras = new bitnet_tensor_extra[GGML_BITNET_MAX_NODES]; + } + bitnet_tensor_extras_index = 0; +} + +void ggml_bitnet_free(void) { + // LOG(INFO) << "ggml_bitnet_free"; + + if (!initialized) { + return; + } + initialized = false; + + // delete wrapper; + // wrapper = nullptr; + for (size_t i = 0; i < bitnet_tensor_extras_index; i++) { + // aligned_free(bitnet_tensor_extras[i].qweights); + // aligned_free(bitnet_tensor_extras[i].scales); + } + delete[] bitnet_tensor_extras; + bitnet_tensor_extras = nullptr; +} + +bool ggml_bitnet_can_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, const struct ggml_tensor * dst) { + if ((is_type_supported(src0->type)) && + src1->type == GGML_TYPE_F32 && + dst->type == GGML_TYPE_F32 && + src0->backend == GGML_BACKEND_TYPE_CPU) { + return true; + } + return false; +} + +size_t ggml_bitnet_mul_mat_get_wsize(const struct ggml_tensor * src0, const struct ggml_tensor * src1, const struct ggml_tensor * dst) { + const size_t ne01 = src0->ne[1]; + const size_t ne10 = src1->ne[0]; + const size_t ne11 = src1->ne[1]; + + size_t wsize = ne10 * ne11 * 11 * sizeof(int8_t) + 2 * ne11 * 2 * sizeof(bitnet_float_type); + if (sizeof(bitnet_float_type) == 2) { + // Need fp32 to fp16 conversion + wsize += std::max(ne10, ne01) * ne11 * sizeof(bitnet_float_type); + } + wsize = ((wsize - 1) / 64 + 1) * 64; + return wsize; +} + +int ggml_bitnet_get_type_bits(enum ggml_type type) { + switch (type) { + case GGML_TYPE_TL2: + return 2; + case GGML_TYPE_Q4_0: + return 4; + default: + return 0; + } +} +#endif \ No newline at end of file diff --git a/src/ggml-bitnet-mad.cpp b/src/ggml-bitnet-mad.cpp new file mode 100644 index 0000000..f75e6ca --- /dev/null +++ b/src/ggml-bitnet-mad.cpp @@ -0,0 +1,361 @@ +#include +#include + +#include "ggml-bitnet.h" +#include "ggml-quants.h" +#include +#include + +#define QK_I2_S 128 +#define QK_I2 128 + +#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) +#include +// horizontally add 8 int32_t +static inline int hsum_i32_8(const __m256i a) { + const __m128i sum128 = _mm_add_epi32(_mm256_castsi256_si128(a), _mm256_extractf128_si256(a, 1)); + const __m128i hi64 = _mm_unpackhi_epi64(sum128, sum128); + const __m128i sum64 = _mm_add_epi32(hi64, sum128); + const __m128i hi32 = _mm_shuffle_epi32(sum64, _MM_SHUFFLE(2, 3, 0, 1)); + return _mm_cvtsi128_si32(_mm_add_epi32(sum64, hi32)); +} +#elif defined(__loongarch_asx) +// horizontally add 8 int32_t +static inline int hsum_i32_8(const __m256i a) { + + __m256i tmp1 = __lasx_xvpermi_q(a, a, 0x11); + __m256i tmp2 = __lasx_xvpermi_q(a, a, 0x00); + + __m128i tmp1_128 = lasx_extracti128_lo(tmp1); + __m128i tmp2_128 = lasx_extracti128_lo(tmp2); + + __m128i sum128 = __lsx_vadd_w(tmp1_128, tmp2_128); + + __m128i ev = __lsx_vpickev_w(sum128, sum128); + __m128i od = __lsx_vpickod_w(sum128, sum128); + __m128i sum64 = __lsx_vadd_w(ev, od); + + int sum64_1, sum64_2; + sum64_1 = __lsx_vpickve2gr_w(sum64, 0); + sum64_2 = __lsx_vpickve2gr_w(sum64, 1); + + return sum64_1 + sum64_2; +} +#endif + +size_t quantize_i2_s(const float * src, void * dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { + // 2 bits per weight + + size_t row_size = ggml_row_size(GGML_TYPE_I2_S, n_per_row); + + int n = nrow * n_per_row; + + // f32 -> q8 + double max = 0; + for (int i = 0; i < n; ++i) { + max = fmax(max, (double)fabs((double)src[i])); + } + double i2_scale = max; + + uint8_t* q8 = (uint8_t*)malloc(n * sizeof(uint8_t)); + for (int i=0; i 0 ? 2 : 0; + } + + memset(dst, 0, n * sizeof(uint8_t) / 4); + + // q8 -> 0, 1, 2 + // | | | + // -1, 0, 1 + + uint8_t* i2_weight = (uint8_t*)dst; + for (int i = 0; i < n / QK_I2; i++) { + for (int j = 0; j < QK_I2; j++) { + int group_idx = j / 32; + int group_pos = j % 32; + uint8_t temp = (q8[i * QK_I2 + j] << (6 - 2 * group_idx)); + i2_weight[i * 32 + group_pos] |= temp; + } + } + + float* scale_ptr = (float*)((char*)i2_weight + n / 4); + scale_ptr[0] = i2_scale; + + // 32B for alignment + return nrow * row_size / 4 + 32; +} + +void ggml_vec_dot_i2_i8_s(int n, float * s, size_t bs, const void * vx, size_t bx, const void * vy, size_t by, int nrc) { + const uint8_t * x = (uint8_t *)vx; + const int8_t * y = (int8_t *)vy; + + const int nb = n / QK_I2_S; + const int group32_num = nb / 32; + const int la_num = nb % 32; + const int groupla_num = nb % 32 != 0 ? 1 : 0; + +#if defined(__AVX2__) + + __m256i mask = _mm256_set1_epi8(0x03); + __m256i accu = _mm256_setzero_si256(); + + for (int i=0; i < group32_num; i++){ + __m256i accu32 = _mm256_setzero_si256(); + for (int j=0; j < 32; j++) { + // 128 index + __m256i xq8_3 = _mm256_loadu_si256((const __m256i*)(x + i * 32 * 32 + j * 32)); + __m256i xq8_2 = _mm256_srli_epi16(xq8_3, 2); + __m256i xq8_1 = _mm256_srli_epi16(xq8_3, 4); + __m256i xq8_0 = _mm256_srli_epi16(xq8_3, 6); + + // each 32 index + xq8_3 = _mm256_and_si256(xq8_3, mask); + xq8_2 = _mm256_and_si256(xq8_2, mask); + xq8_1 = _mm256_and_si256(xq8_1, mask); + xq8_0 = _mm256_and_si256(xq8_0, mask); + + // each 32 index + __m256i yq8_0 = _mm256_loadu_si256((const __m256i*)(y + i * 128 * 32 + j * 128 + 0)); + __m256i yq8_1 = _mm256_loadu_si256((const __m256i*)(y + i * 128 * 32 + j * 128 + 32)); + __m256i yq8_2 = _mm256_loadu_si256((const __m256i*)(y + i * 128 * 32 + j * 128 + 64)); + __m256i yq8_3 = _mm256_loadu_si256((const __m256i*)(y + i * 128 * 32 + j * 128 + 96)); + + // 128 index accumulation add + // split into 32 accumulation block + // each block each 128 index accumulated 4index + // each index maximum 256 + // each block maximum 4 * 256 + // each block accumulation maximum 127 * 256 + // each 32 group index (128 index in one group) needs cast to int32 + xq8_0 = _mm256_maddubs_epi16(xq8_0, yq8_0); + xq8_1 = _mm256_maddubs_epi16(xq8_1, yq8_1); + xq8_2 = _mm256_maddubs_epi16(xq8_2, yq8_2); + xq8_3 = _mm256_maddubs_epi16(xq8_3, yq8_3); + + accu32 = _mm256_add_epi16(accu32, _mm256_add_epi16(xq8_0, xq8_1)); + accu32 = _mm256_add_epi16(accu32, _mm256_add_epi16(xq8_2, xq8_3)); + } + accu = _mm256_add_epi32(_mm256_madd_epi16(accu32, _mm256_set1_epi16(1)), accu); + } + + for (int i = 0; i < groupla_num; i++){ + __m256i accula = _mm256_setzero_si256(); + for (int j = 0; j < la_num; j++) { + // 128 index + __m256i xq8_3 = _mm256_loadu_si256((const __m256i*)(x + group32_num * 32 * 32 + j * 32)); + __m256i xq8_2 = _mm256_srli_epi16(xq8_3, 2); + __m256i xq8_1 = _mm256_srli_epi16(xq8_3, 4); + __m256i xq8_0 = _mm256_srli_epi16(xq8_3, 6); + + // each 32 index + xq8_3 = _mm256_and_si256(xq8_3, mask); + xq8_2 = _mm256_and_si256(xq8_2, mask); + xq8_1 = _mm256_and_si256(xq8_1, mask); + xq8_0 = _mm256_and_si256(xq8_0, mask); + + // each 32 index + __m256i yq8_0 = _mm256_loadu_si256((const __m256i*)(y + group32_num * 128 * 32 + j * 128 + 0)); + __m256i yq8_1 = _mm256_loadu_si256((const __m256i*)(y + group32_num * 128 * 32 + j * 128 + 32)); + __m256i yq8_2 = _mm256_loadu_si256((const __m256i*)(y + group32_num * 128 * 32 + j * 128 + 64)); + __m256i yq8_3 = _mm256_loadu_si256((const __m256i*)(y + group32_num * 128 * 32 + j * 128 + 96)); + + // 128 index accumulation add + // split into 32 accumulation block + // each block each 128 index accumulated 4index + // each index maximum 256 + // each block maximum 4 * 256 + // each block accumulation maximum 127 * 256 + // each 32 group index (128 index in one group) needs cast to int32 + xq8_0 = _mm256_maddubs_epi16(xq8_0, yq8_0); + xq8_1 = _mm256_maddubs_epi16(xq8_1, yq8_1); + xq8_2 = _mm256_maddubs_epi16(xq8_2, yq8_2); + xq8_3 = _mm256_maddubs_epi16(xq8_3, yq8_3); + + accula = _mm256_add_epi16(accula, _mm256_add_epi16(xq8_0, xq8_1)); + accula = _mm256_add_epi16(accula, _mm256_add_epi16(xq8_2, xq8_3)); + } + accu = _mm256_add_epi32(accu, _mm256_madd_epi16(accula, _mm256_set1_epi16(1))); + } + int sumi = hsum_i32_8(accu); + *s = (float)sumi; + +#elif defined(__ARM_NEON) + + int32x4_t accu_0 = vdupq_n_s32(0); + int32x4_t accu_1 = vdupq_n_s32(0); + int32x4_t accu_2 = vdupq_n_s32(0); + int32x4_t accu_3 = vdupq_n_s32(0); + const uint8x16_t mask = vdupq_n_u8(3); + + for (int i=0; i < group32_num; i++) { + +#if defined(__ARM_FEATURE_DOTPROD) + +#else + int16x8_t accu32_0 = vdupq_n_s16(0); + int16x8_t accu32_1 = vdupq_n_s16(0); + int16x8_t accu32_2 = vdupq_n_s16(0); + int16x8_t accu32_3 = vdupq_n_s16(0); +#endif + + for (int j=0; j < 32; j++) { + uint8x16_t xq8_6 = vld1q_u8(x + i * 32 * 32 + j * 32); + uint8x16_t xq8_7 = vld1q_u8(x + i * 32 * 32 + j * 32 + 16); + uint8x16_t xq8_4 = vshrq_n_u8(xq8_6, 2); + uint8x16_t xq8_5 = vshrq_n_u8(xq8_7, 2); + uint8x16_t xq8_2 = vshrq_n_u8(xq8_6, 4); + uint8x16_t xq8_3 = vshrq_n_u8(xq8_7, 4); + uint8x16_t xq8_0 = vshrq_n_u8(xq8_6, 6); + uint8x16_t xq8_1 = vshrq_n_u8(xq8_7, 6); + + int8x16_t q8_0 = vreinterpretq_s8_u8(vandq_u8(xq8_0, mask)); + int8x16_t q8_1 = vreinterpretq_s8_u8(vandq_u8(xq8_1, mask)); + int8x16_t q8_2 = vreinterpretq_s8_u8(vandq_u8(xq8_2, mask)); + int8x16_t q8_3 = vreinterpretq_s8_u8(vandq_u8(xq8_3, mask)); + int8x16_t q8_4 = vreinterpretq_s8_u8(vandq_u8(xq8_4, mask)); + int8x16_t q8_5 = vreinterpretq_s8_u8(vandq_u8(xq8_5, mask)); + int8x16_t q8_6 = vreinterpretq_s8_u8(vandq_u8(xq8_6, mask)); + int8x16_t q8_7 = vreinterpretq_s8_u8(vandq_u8(xq8_7, mask)); + + const int8x16_t yq8_0 = vld1q_s8(y + i * 128 * 32 + j * 128 + 0); + const int8x16_t yq8_1 = vld1q_s8(y + i * 128 * 32 + j * 128 + 16); + const int8x16_t yq8_2 = vld1q_s8(y + i * 128 * 32 + j * 128 + 32); + const int8x16_t yq8_3 = vld1q_s8(y + i * 128 * 32 + j * 128 + 48); + const int8x16_t yq8_4 = vld1q_s8(y + i * 128 * 32 + j * 128 + 64); + const int8x16_t yq8_5 = vld1q_s8(y + i * 128 * 32 + j * 128 + 80); + const int8x16_t yq8_6 = vld1q_s8(y + i * 128 * 32 + j * 128 + 96); + const int8x16_t yq8_7 = vld1q_s8(y + i * 128 * 32 + j * 128 + 112); + +#if defined(__ARM_FEATURE_DOTPROD) + accu_0 = vdotq_s32(accu_0, q8_0, yq8_0); + accu_1 = vdotq_s32(accu_1, q8_1, yq8_1); + accu_2 = vdotq_s32(accu_2, q8_2, yq8_2); + accu_3 = vdotq_s32(accu_3, q8_3, yq8_3); + accu_0 = vdotq_s32(accu_0, q8_4, yq8_4); + accu_1 = vdotq_s32(accu_1, q8_5, yq8_5); + accu_2 = vdotq_s32(accu_2, q8_6, yq8_6); + accu_3 = vdotq_s32(accu_3, q8_7, yq8_7); +#else + accu32_0 = vmlal_s8(accu32_0, vget_low_s8(q8_0), vget_low_s8(yq8_0)); + accu32_1 = vmlal_s8(accu32_1, vget_high_s8(q8_0), vget_high_s8(yq8_0)); + accu32_2 = vmlal_s8(accu32_2, vget_low_s8(q8_1), vget_low_s8(yq8_1)); + accu32_3 = vmlal_s8(accu32_3, vget_high_s8(q8_1), vget_high_s8(yq8_1)); + accu32_0 = vmlal_s8(accu32_0, vget_low_s8(q8_2), vget_low_s8(yq8_2)); + accu32_1 = vmlal_s8(accu32_1, vget_high_s8(q8_2), vget_high_s8(yq8_2)); + accu32_2 = vmlal_s8(accu32_2, vget_low_s8(q8_3), vget_low_s8(yq8_3)); + accu32_3 = vmlal_s8(accu32_3, vget_high_s8(q8_3), vget_high_s8(yq8_3)); + accu32_0 = vmlal_s8(accu32_0, vget_low_s8(q8_4), vget_low_s8(yq8_4)); + accu32_1 = vmlal_s8(accu32_1, vget_high_s8(q8_4), vget_high_s8(yq8_4)); + accu32_2 = vmlal_s8(accu32_2, vget_low_s8(q8_5), vget_low_s8(yq8_5)); + accu32_3 = vmlal_s8(accu32_3, vget_high_s8(q8_5), vget_high_s8(yq8_5)); + accu32_0 = vmlal_s8(accu32_0, vget_low_s8(q8_6), vget_low_s8(yq8_6)); + accu32_1 = vmlal_s8(accu32_1, vget_high_s8(q8_6), vget_high_s8(yq8_6)); + accu32_2 = vmlal_s8(accu32_2, vget_low_s8(q8_7), vget_low_s8(yq8_7)); + accu32_3 = vmlal_s8(accu32_3, vget_high_s8(q8_7), vget_high_s8(yq8_7)); +#endif + } + +#if defined(__ARM_FEATURE_DOTPROD) + +#else + accu_0 = vaddq_s32(accu_0, vmovl_s16(vget_low_s16(accu32_0))); + accu_0 = vaddq_s32(accu_0, vmovl_high_s16(accu32_0)); + accu_1 = vaddq_s32(accu_1, vmovl_s16(vget_low_s16(accu32_1))); + accu_1 = vaddq_s32(accu_1, vmovl_high_s16(accu32_1)); + accu_2 = vaddq_s32(accu_2, vmovl_s16(vget_low_s16(accu32_2))); + accu_2 = vaddq_s32(accu_2, vmovl_high_s16(accu32_2)); + accu_3 = vaddq_s32(accu_3, vmovl_s16(vget_low_s16(accu32_3))); + accu_3 = vaddq_s32(accu_3, vmovl_high_s16(accu32_3)); +#endif + } + + for (int i = 0; i < groupla_num; i++){ +#if defined(__ARM_FEATURE_DOTPROD) + +#else + int16x8_t accula_0 = vdupq_n_s16(0); + int16x8_t accula_1 = vdupq_n_s16(0); + int16x8_t accula_2 = vdupq_n_s16(0); + int16x8_t accula_3 = vdupq_n_s16(0); +#endif + for (int j = 0; j < la_num; j++) { + uint8x16_t xq8_6 = vld1q_u8(x + group32_num * 32 * 32 + j * 32); + uint8x16_t xq8_7 = vld1q_u8(x + group32_num * 32 * 32 + j * 32 + 16); + uint8x16_t xq8_4 = vshrq_n_u8(xq8_6, 2); + uint8x16_t xq8_5 = vshrq_n_u8(xq8_7, 2); + uint8x16_t xq8_2 = vshrq_n_u8(xq8_6, 4); + uint8x16_t xq8_3 = vshrq_n_u8(xq8_7, 4); + uint8x16_t xq8_0 = vshrq_n_u8(xq8_6, 6); + uint8x16_t xq8_1 = vshrq_n_u8(xq8_7, 6); + + int8x16_t q8_0 = vreinterpretq_s8_u8(vandq_u8(xq8_0, mask)); + int8x16_t q8_1 = vreinterpretq_s8_u8(vandq_u8(xq8_1, mask)); + int8x16_t q8_2 = vreinterpretq_s8_u8(vandq_u8(xq8_2, mask)); + int8x16_t q8_3 = vreinterpretq_s8_u8(vandq_u8(xq8_3, mask)); + int8x16_t q8_4 = vreinterpretq_s8_u8(vandq_u8(xq8_4, mask)); + int8x16_t q8_5 = vreinterpretq_s8_u8(vandq_u8(xq8_5, mask)); + int8x16_t q8_6 = vreinterpretq_s8_u8(vandq_u8(xq8_6, mask)); + int8x16_t q8_7 = vreinterpretq_s8_u8(vandq_u8(xq8_7, mask)); + + const int8x16_t yq8_0 = vld1q_s8(y + group32_num * 128 * 32 + j * 128 + 0); + const int8x16_t yq8_1 = vld1q_s8(y + group32_num * 128 * 32 + j * 128 + 16); + const int8x16_t yq8_2 = vld1q_s8(y + group32_num * 128 * 32 + j * 128 + 32); + const int8x16_t yq8_3 = vld1q_s8(y + group32_num * 128 * 32 + j * 128 + 48); + const int8x16_t yq8_4 = vld1q_s8(y + group32_num * 128 * 32 + j * 128 + 64); + const int8x16_t yq8_5 = vld1q_s8(y + group32_num * 128 * 32 + j * 128 + 80); + const int8x16_t yq8_6 = vld1q_s8(y + group32_num * 128 * 32 + j * 128 + 96); + const int8x16_t yq8_7 = vld1q_s8(y + group32_num * 128 * 32 + j * 128 + 112); + +#if defined(__ARM_FEATURE_DOTPROD) + accu_0 = vdotq_s32(accu_0, q8_0, yq8_0); + accu_1 = vdotq_s32(accu_1, q8_1, yq8_1); + accu_2 = vdotq_s32(accu_2, q8_2, yq8_2); + accu_3 = vdotq_s32(accu_3, q8_3, yq8_3); + accu_0 = vdotq_s32(accu_0, q8_4, yq8_4); + accu_1 = vdotq_s32(accu_1, q8_5, yq8_5); + accu_2 = vdotq_s32(accu_2, q8_6, yq8_6); + accu_3 = vdotq_s32(accu_3, q8_7, yq8_7); +#else + accula_0 = vmlal_s8(accula_0, vget_low_s8(q8_0), vget_low_s8(yq8_0)); + accula_1 = vmlal_s8(accula_1, vget_high_s8(q8_0), vget_high_s8(yq8_0)); + accula_2 = vmlal_s8(accula_2, vget_low_s8(q8_1), vget_low_s8(yq8_1)); + accula_3 = vmlal_s8(accula_3, vget_high_s8(q8_1), vget_high_s8(yq8_1)); + accula_0 = vmlal_s8(accula_0, vget_low_s8(q8_2), vget_low_s8(yq8_2)); + accula_1 = vmlal_s8(accula_1, vget_high_s8(q8_2), vget_high_s8(yq8_2)); + accula_2 = vmlal_s8(accula_2, vget_low_s8(q8_3), vget_low_s8(yq8_3)); + accula_3 = vmlal_s8(accula_3, vget_high_s8(q8_3), vget_high_s8(yq8_3)); + accula_0 = vmlal_s8(accula_0, vget_low_s8(q8_4), vget_low_s8(yq8_4)); + accula_1 = vmlal_s8(accula_1, vget_high_s8(q8_4), vget_high_s8(yq8_4)); + accula_2 = vmlal_s8(accula_2, vget_low_s8(q8_5), vget_low_s8(yq8_5)); + accula_3 = vmlal_s8(accula_3, vget_high_s8(q8_5), vget_high_s8(yq8_5)); + accula_0 = vmlal_s8(accula_0, vget_low_s8(q8_6), vget_low_s8(yq8_6)); + accula_1 = vmlal_s8(accula_1, vget_high_s8(q8_6), vget_high_s8(yq8_6)); + accula_2 = vmlal_s8(accula_2, vget_low_s8(q8_7), vget_low_s8(yq8_7)); + accula_3 = vmlal_s8(accula_3, vget_high_s8(q8_7), vget_high_s8(yq8_7)); +#endif + } +#if defined(__ARM_FEATURE_DOTPROD) + +#else + accu_0 = vaddq_s32(accu_0, vmovl_s16(vget_low_s16(accula_0))); + accu_0 = vaddq_s32(accu_0, vmovl_high_s16(accula_0)); + accu_1 = vaddq_s32(accu_1, vmovl_s16(vget_low_s16(accula_1))); + accu_1 = vaddq_s32(accu_1, vmovl_high_s16(accula_1)); + accu_2 = vaddq_s32(accu_2, vmovl_s16(vget_low_s16(accula_2))); + accu_2 = vaddq_s32(accu_2, vmovl_high_s16(accula_2)); + accu_3 = vaddq_s32(accu_3, vmovl_s16(vget_low_s16(accula_3))); + accu_3 = vaddq_s32(accu_3, vmovl_high_s16(accula_3)); +#endif + } + accu_0 = vaddq_s32(accu_0, accu_1); + accu_2 = vaddq_s32(accu_2, accu_3); + accu_0 = vaddq_s32(accu_0, accu_2); + int sumi = vaddlvq_s32(accu_0); + *s = (float)sumi; + +#endif +} \ No newline at end of file diff --git a/utils/codegen_tl1.py b/utils/codegen_tl1.py new file mode 100644 index 0000000..4c2e7dd --- /dev/null +++ b/utils/codegen_tl1.py @@ -0,0 +1,442 @@ +import argparse +import os +from configparser import ConfigParser + +def gen_ctor_code(): + kernel_code = "\n\ +#include \"ggml-bitnet.h\"\n\ +#define GGML_BITNET_MAX_NODES 8192\n\ +static bool initialized = false;\n\ +static bitnet_tensor_extra * bitnet_tensor_extras = nullptr;\n\ +static size_t bitnet_tensor_extras_index = 0;\n\ +static void * aligned_malloc(size_t size) {{\n\ +#if defined(_WIN32)\n\ + return _aligned_malloc(size, 64);\n\ +#else\n\ + void * ptr = nullptr;\n\ + posix_memalign(&ptr, 64, size);\n\ + return ptr;\n\ +#endif\n\ +}}\n\ +static void aligned_free(void * ptr) {{\n\ +#if defined(_WIN32)\n\ + _aligned_free(ptr);\n\ +#else\n\ + free(ptr);\n\ +#endif\n\ +}}\n\ +\n\ +void per_tensor_quant(int k, void* lut_scales_, void* b_) {{\n\ + bitnet_float_type* lut_scales = (bitnet_float_type*)lut_scales_;\n\ + bitnet_float_type* b = (bitnet_float_type*)b_;\n\ +#ifdef __ARM_NEON\n\ + float32x4_t temp_max = vdupq_n_f32(0);\n\ + for (int i=0; i < k / 4; i++) {{\n\ + float32x4_t vec_bs = vld1q_f32(b + 4 * i);\n\ + float32x4_t abssum = vabsq_f32(vec_bs);\n\ + temp_max = vmaxq_f32(abssum, temp_max);\n\ + }}\n\ + float32_t scales = 127 / vmaxvq_f32(temp_max);\n\ + *lut_scales = scales;\n\ +#elif defined __AVX2__\n\ + __m256 max_vec = _mm256_set1_ps(0.f);\n\ + const __m256 vec_sign = _mm256_set1_ps(-0.0f);\n\ + // #pragma unroll\n\ + for (int i = 0; i < k / 8; i++) {{\n\ + __m256 vec_b = _mm256_loadu_ps(b + i * 8);\n\ + __m256 vec_babs = _mm256_andnot_ps(vec_sign, vec_b);\n\ + max_vec = _mm256_max_ps(vec_babs, max_vec);\n\ + }}\n\ + __m128 max1 = _mm_max_ps(_mm256_extractf128_ps(max_vec, 1), _mm256_castps256_ps128(max_vec));\n\ + max1 = _mm_max_ps(max1, _mm_movehl_ps(max1, max1));\n\ + max1 = _mm_max_ss(max1, _mm_movehdup_ps(max1));\n\ + float scales = 127 / _mm_cvtss_f32(max1);\n\ + *lut_scales = scales;\n\ +#endif\n\ +}}\n\ +\n\ +void partial_max_reset(void* lut_scales_) {{\n\ + bitnet_float_type* lut_scales = (bitnet_float_type*)lut_scales_;\n\ + *lut_scales = 0.0;\n\ +}}\n\ +\n\ +#ifdef __ARM_NEON\n\ +inline void Transpose_8_8(\n\ + int16x8_t *v0,\n\ + int16x8_t *v1,\n\ + int16x8_t *v2,\n\ + int16x8_t *v3,\n\ + int16x8_t *v4,\n\ + int16x8_t *v5,\n\ + int16x8_t *v6,\n\ + int16x8_t *v7)\n\ +{{\n\ + int16x8x2_t q04 = vzipq_s16(*v0, *v4);\n\ + int16x8x2_t q15 = vzipq_s16(*v1, *v5);\n\ + int16x8x2_t q26 = vzipq_s16(*v2, *v6);\n\ + int16x8x2_t q37 = vzipq_s16(*v3, *v7);\n\ +\n\ + int16x8x2_t q0246_0 = vzipq_s16(q04.val[0], q26.val[0]);\n\ + int16x8x2_t q0246_1 = vzipq_s16(q04.val[1], q26.val[1]);\n\ + int16x8x2_t q1357_0 = vzipq_s16(q15.val[0], q37.val[0]);\n\ + int16x8x2_t q1357_1 = vzipq_s16(q15.val[1], q37.val[1]);\n\ +\n\ + int16x8x2_t q_fin_0 = vzipq_s16(q0246_0.val[0], q1357_0.val[0]);\n\ + int16x8x2_t q_fin_1 = vzipq_s16(q0246_0.val[1], q1357_0.val[1]);\n\ + int16x8x2_t q_fin_2 = vzipq_s16(q0246_1.val[0], q1357_1.val[0]);\n\ + int16x8x2_t q_fin_3 = vzipq_s16(q0246_1.val[1], q1357_1.val[1]);\n\ +\n\ + *v0 = q_fin_0.val[0];\n\ + *v1 = q_fin_0.val[1];\n\ + *v2 = q_fin_1.val[0];\n\ + *v3 = q_fin_1.val[1];\n\ + *v4 = q_fin_2.val[0];\n\ + *v5 = q_fin_2.val[1];\n\ + *v6 = q_fin_3.val[0];\n\ + *v7 = q_fin_3.val[1];\n\ +}}\n\ +#endif\n\ +\n\ +template\n\ +inline void lut_ctor(int8_t* qlut, bitnet_float_type* b, bitnet_float_type* lut_scales) {{\n\ +#ifdef __ARM_NEON\n\ + int16x8_t vec_lut[16];\n\ + float32_t scales = *lut_scales;\n\ + uint8_t tbl_mask[16];\n\ + tbl_mask[0] = 0;\n\ + tbl_mask[1] = 2;\n\ + tbl_mask[2] = 4;\n\ + tbl_mask[3] = 6;\n\ + tbl_mask[4] = 8;\n\ + tbl_mask[5] = 10;\n\ + tbl_mask[6] = 12;\n\ + tbl_mask[7] = 14;\n\ + tbl_mask[8] = 1;\n\ + tbl_mask[9] = 3;\n\ + tbl_mask[10] = 5;\n\ + tbl_mask[11] = 7;\n\ + tbl_mask[12] = 9;\n\ + tbl_mask[13] = 11;\n\ + tbl_mask[14] = 13;\n\ + tbl_mask[15] = 15;\n\ + uint8x16_t tbl_mask_q = vld1q_u8(tbl_mask);\n\ +#pragma unroll\n\ + for (int k = 0; k < act_k / 16; ++k) {{\n\ + float32x4x2_t vec_bs_x0 = vld2q_f32(b + k * 16);\n\ + float32x4x2_t vec_bs_x1 = vld2q_f32(b + k * 16 + 8);\n\ + float32x4_t vec_f_0 = vmulq_n_f32(vec_bs_x0.val[0], scales);\n\ + float32x4_t vec_f_1 = vmulq_n_f32(vec_bs_x0.val[1], scales);\n\ + float32x4_t vec_f_2 = vmulq_n_f32(vec_bs_x1.val[0], scales);\n\ + float32x4_t vec_f_3 = vmulq_n_f32(vec_bs_x1.val[1], scales);\n\ + int32x4_t vec_b_0 = vcvtnq_s32_f32(vec_f_0);\n\ + int32x4_t vec_b_1 = vcvtnq_s32_f32(vec_f_1);\n\ + int32x4_t vec_b_2 = vcvtnq_s32_f32(vec_f_2);\n\ + int32x4_t vec_b_3 = vcvtnq_s32_f32(vec_f_3);\n\ + int16x4_t vec_b16_0 = vmovn_s32(vec_b_0);\n\ + int16x4_t vec_b16_1 = vmovn_s32(vec_b_1);\n\ + int16x4_t vec_b16_2 = vmovn_s32(vec_b_2);\n\ + int16x4_t vec_b16_3 = vmovn_s32(vec_b_3);\n\ + int16x8_t vec_bs_0 = vcombine_s16(vec_b16_0, vec_b16_2);\n\ + int16x8_t vec_bs_1 = vcombine_s16(vec_b16_1, vec_b16_3);\n\ + vec_lut[0] = vdupq_n_s16(0);\n\ + vec_lut[0] = vec_lut[0] - vec_bs_0;\n\ + vec_lut[0] = vec_lut[0] - vec_bs_1;\n\ + vec_lut[1] = vdupq_n_s16(0);\n\ + vec_lut[1] = vec_lut[1] - vec_bs_0;\n\ + vec_lut[2] = vdupq_n_s16(0);\n\ + vec_lut[2] = vec_lut[2] - vec_bs_0;\n\ + vec_lut[2] = vec_lut[2] + vec_bs_1;\n\ + vec_lut[3] = vdupq_n_s16(0);\n\ + vec_lut[3] = vec_lut[3] - vec_bs_1;\n\ + vec_lut[4] = vdupq_n_s16(0);\n\ + vec_lut[5] = vec_bs_1;\n\ + vec_lut[6] = vec_bs_0;\n\ + vec_lut[6] = vec_lut[6] - vec_bs_1;\n\ + vec_lut[7] = vec_bs_0;\n\ + vec_lut[8] = vec_bs_0;\n\ + vec_lut[8] = vec_lut[8] + vec_bs_1;\n\ + Transpose_8_8(&(vec_lut[0]), &(vec_lut[1]), &(vec_lut[2]), &(vec_lut[3]),\n\ + &(vec_lut[4]), &(vec_lut[5]), &(vec_lut[6]), &(vec_lut[7]));\n\ + Transpose_8_8(&(vec_lut[8]), &(vec_lut[9]), &(vec_lut[10]), &(vec_lut[11]),\n\ + &(vec_lut[12]), &(vec_lut[13]), &(vec_lut[14]), &(vec_lut[15]));\n\ +#pragma unroll\n\ + for (int idx = 0; idx < 8; idx++) {{\n\ + int8x16_t q0_s = vqtbl1q_s8(vreinterpretq_s8_s16(vec_lut[idx]), tbl_mask_q);\n\ + int8x8_t q0_low = vget_low_s8(q0_s);\n\ + int8x8_t q0_high = vget_high_s8(q0_s);\n\ + int8x16_t q1_s = vqtbl1q_s8(vreinterpretq_s8_s16(vec_lut[idx + 8]), tbl_mask_q);\n\ + int8x8_t q1_low = vget_low_s8(q1_s);\n\ + int8x8_t q1_high = vget_high_s8(q1_s);\n\ + vst1_s8(qlut + k * 16 * 8 * 2 + idx * 16 * 2, q0_high);\n\ + vst1_s8(qlut + k * 16 * 8 * 2 + idx * 16 * 2 + 8, q1_high);\n\ + vst1_s8(qlut + k * 16 * 8 * 2 + idx * 16 * 2 + 16, q0_low);\n\ + vst1_s8(qlut + k * 16 * 8 * 2 + idx * 16 * 2 + 24, q1_low);\n\ + }}\n\ + }}\n\ +#endif\n\ +}}\n\ +\n\ +static bool is_type_supported(enum ggml_type type) {{\n\ + if (type == GGML_TYPE_Q4_0 ||\n\ + type == GGML_TYPE_TL1) {{\n\ + return true;\n\ + }} else {{\n\ + return false;\n\ + }}\n\ +}}\n\ +" + return kernel_code + +def gen_body_core_code(bm, by): + length = 4 + all_code = "" + for i in range(length): + core_code = "\n\ + uint8x16_t vec_a_{0} = vld1q_u8(a + i * KK / 2 + k * 32 * 2 + {0} * 16);\n\ + uint8x16_t vec_a{0}_top = vshrq_n_u8(vec_a_{0}, 4);\n\ + uint8x16_t vec_a{0}_bot = vandq_u8(vec_a_{0}, vec_mask);\n\ + int8x16_t vec_v_{0}_left_tmp0 = vqtbl1q_s8(vec_lut[{1} * k + {2}], vec_a{0}_top);\n\ + int8x16_t vec_v_{0}_left_tmp1 = vqtbl1q_s8(vec_lut[{1} * k + {3}], vec_a{0}_top);\n\ + int8x16_t vec_v_{0}_right_tmp0 = vqtbl1q_s8(vec_lut[{1} * k + {4}], vec_a{0}_bot);\n\ + int8x16_t vec_v_{0}_right_tmp1 = vqtbl1q_s8(vec_lut[{1} * k + {5}], vec_a{0}_bot);\n\ + int8x16x2_t vec_v_left_{0} = vzipq_s8(vec_v_{0}_left_tmp1, vec_v_{0}_left_tmp0);\n\ + int8x16x2_t vec_v_right_{0} = vzipq_s8(vec_v_{0}_right_tmp1, vec_v_{0}_right_tmp0);\n\ + vec_c[{6}] += vec_v_left_{0}.val[0];\n\ + vec_c[{6}] += vec_v_right_{0}.val[0];\n\ + vec_c[{7}] += vec_v_left_{0}.val[1];\n\ + vec_c[{7}] += vec_v_right_{0}.val[1];\n\ + ".format(i, 2 * by // 2, (4 * i) % (2 * by // 2), (4 * i + 1) % (2 * by // 2), (4 * i + 2) % (2 * by // 2), (4 * i + 3) % (2 * by // 2), (i * 2) // (by // 2) * 2 + 0, (i * 2) // (by // 2) * 2 + 1) + + all_code = "".join([all_code, core_code]) + + all_code = "".join([all_code, "\n }\n\n"]) + + for i in range(bm // 8): + core_code = "\ + int32x4_t vec_v_bot_low_low_{0} = vmovl_s16(vget_low_s16(vec_c[{0}]));\n\ + int32x4_t vec_v_bot_low_high_{0} = vmovl_high_s16(vec_c[{0}]);\n\ + vst1q_s32(c + i + {1}, vld1q_s32(c + i + {1}) + vec_v_bot_low_low_{0});\n\ + vst1q_s32(c + i + {2}, vld1q_s32(c + i + {2}) + vec_v_bot_low_high_{0});\n".format(i, i * 8, i * 8 + 4) + all_code = "".join([all_code, core_code]) + + return all_code + +def gen_tbl_impl(pre, BM, BK, bm, k): + + kernel_code = "\ +#include \n\ +\n\ +#define BM{0} {1}\n\ +#define BBK{0} {2}\n\ +inline void tbl_impl_{0}(int32_t* c, int8_t* lut, uint8_t* a) {{\n\ +#ifdef __ARM_NEON\n\ + const int KK = BBK{0} / 2;\n\ + const uint8x16_t vec_mask = vdupq_n_u8(0x0f);\n\ + const int8x16_t vec_zero = vdupq_n_s16(0x0000);\n\ + int8x16_t vec_lut[2 * KK];\n\ +".format(pre, BM, BK) + + kernel_code = "".join([kernel_code, " int16x8_t vec_c[{}];".format(bm // 8)]) + + kernel_code = "".join([kernel_code, "\n\ +#pragma unroll\n\ + for (int k = 0; k < 2 * KK; k++) {\n\ + vec_lut[k] = vld1q_s8(lut + k * 16);\n\ + }\n"]) + + pre_core_code = "\n\ +#pragma unroll\n\ + for (int i = 0; i < BM{}; i += {}) {{\n\ + #pragma unroll\n\ + for (int i=0; i<{}; i++) {{\n\ + vec_c[i] = vandq_s16(vec_c[i], vec_zero);\n\ + }}\n".format(pre, bm, bm // 8) + + body_core_pre_code = "\n\ +#pragma unroll\n\ + for (int k = 0; k < KK / {}; k++) {{\n\ + ".format(256 // bm // 2) + + body_core_post_code = "\n\ + }\n\ +\ +#endif\n\ +}\n" + + kernel_code = "".join([kernel_code, pre_core_code, body_core_pre_code, gen_body_core_code(bm, 256 // bm), body_core_post_code]) + + kernel_code = "".join([kernel_code, "\n\ +int32_t qgemm_lut_{0}(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) {{\n\ + alignas({1}) uint32_t CBits[BM{0}];\n\ + memset(&(CBits[0]), 0, BM{0} * sizeof(int32_t));\n\ +#pragma unroll\n\ + for (int32_t k_outer = 0; k_outer < {2} / BBK{0}; ++k_outer) {{\n\ + tbl_impl_{0}((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK{0} / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK{0} / 2 / 2 * BM{0})])));\n\ + }}\n\ +#pragma unroll\n\ + for (int i = 0; i < BM{0}; i++) {{\n\ + ((bitnet_float_type*)C)[i] = (((int32_t*)CBits)[i]) / ((bitnet_float_type*)LUT_Scales)[0] * ((bitnet_float_type*)Scales)[0];\n\ + }}\n\ + return 0;\n\ +}};\n".format(pre, min(32, BK), k)]) + + return kernel_code + +def gen_top_api(kernel_shapes): + + kernel_code = "void ggml_preprocessor(int m, int k, void* B, void* LUT_Scales, void* QLUT) {{\n\ + if (m == {0} && k == {1}) {{\n\ + preprocessor_k<{1}>(B, LUT_Scales, QLUT);\n\ + }}\n\ +".format(kernel_shapes[0][0], kernel_shapes[0][1]) + for i in range(1, len(kernel_shapes)): + kernel_code = "".join([kernel_code, " else if (m == {0} && k == {1}) {{\n\ + preprocessor_k<{1}>(B, LUT_Scales, QLUT);\n\ + }}\n".format(kernel_shapes[i][0], kernel_shapes[i][1])]) + kernel_code = "".join([kernel_code, "}\n"]) + kernel_code = "".join([kernel_code, "void ggml_qgemm_lut(int m, int k, void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) {{\n\ + if (m == {0} && k == {1}) {{\n\ + qgemm_lut_{0}_{1}(A, LUT, Scales, LUT_Scales, C);\n\ + }}\n\ +".format(kernel_shapes[0][0], kernel_shapes[0][1])]) + for i in range(1, len(kernel_shapes)): + kernel_code = "".join([kernel_code, " else if (m == {0} && k == {1}) {{\n\ + qgemm_lut_{0}_{1}(A, LUT, Scales, LUT_Scales, C);\n\ + }}\n\ +".format(kernel_shapes[i][0], kernel_shapes[i][1])]) + kernel_code = "".join([kernel_code, "}\n"]) + return kernel_code + +def gen_preprocess_code(): + kernel_code = "\n\ +template\n\ +void preprocessor_k(void* B, void* LUT_Scales, void* QLUT) {{\n\ + partial_max_reset((&(((bitnet_float_type*)LUT_Scales)[0])));\n\ + per_tensor_quant(K, (&(((bitnet_float_type*)LUT_Scales)[0])), (&(((bitnet_float_type*)B)[0])));\n\ + \n\ + lut_ctor((&(((int8_t*)QLUT)[0])), (&(((bitnet_float_type*)B)[0])), (&(((bitnet_float_type*)LUT_Scales)[0])));\n\ +}}\n" + return kernel_code + +def gen_transform_code(kernel_shape): + kernel_code = "\n\ +void ggml_bitnet_transform_tensor(struct ggml_tensor * tensor) {\n\ + if (!(is_type_supported(tensor->type) && tensor->backend == GGML_BACKEND_TYPE_CPU && tensor->extra == nullptr)) {\n\ + return;\n\ + }\n\ +\n\ + int k = tensor->ne[0];\n\ + int m = tensor->ne[1];\n\ + const int lut_scales_size = 1;\n\ + const int scales_size = 1;\n\ + int bk = 0;\n\ + int bm = 0;\n" + + kernel_code = "".join([kernel_code, "\n\ + if (m == {0} && k == {1}) {{\n\ + bm = BM{0}_{1};\n\ + bk = BBK{0}_{1};\n\ + }}\n".format(kernel_shapes[0][0], kernel_shapes[0][1])]) + + for i in range(1, len(kernel_shapes)): + kernel_code = "".join([kernel_code, "else if (m == {0} && k == {1}) {{\n\ + bm = BM{0}_{1};\n\ + bk = BBK{0}_{1};\n\ + }}\n".format(kernel_shapes[i][0], kernel_shapes[i][1])]) + + kernel_code = "".join([kernel_code, "\n\ + const int n_tile_num = m / bm;\n\ + const int BK = bk;\n\ + uint8_t * qweights;\n\ + bitnet_float_type * scales;\n\ +\n\ + scales = (bitnet_float_type *) aligned_malloc(sizeof(bitnet_float_type));\n\ + qweights = (uint8_t *) tensor->data;\n\ + float * i2_scales = (float * )(qweights + k * m / 4);\n\ + scales[0] = (bitnet_float_type) i2_scales[0];\n\ +\n\ + tensor->extra = bitnet_tensor_extras + bitnet_tensor_extras_index;\n\ + bitnet_tensor_extras[bitnet_tensor_extras_index++] = {\n\ + /* .lut_scales_size = */ lut_scales_size,\n\ + /* .BK = */ BK,\n\ + /* .n_tile_num = */ n_tile_num,\n\ + /* .qweights = */ qweights,\n\ + /* .scales = */ scales\n\ + };\n\ +}\n"]) + + return kernel_code + +if __name__ == "__main__": + ModelShapeDict = { + "bitnet_b1_58-large" : [[1536, 4096], + [1536, 1536], + [4096, 1536]], + "bitnet_b1_58-3B" : [[3200, 8640], + [3200, 3200], + [8640, 3200]], + "Llama3-8B-1.58-100B-tokens" : [[14336, 4096], + [4096, 14336], + [1024, 4096], + [4096, 4096]] + } + + parser = argparse.ArgumentParser(description='gen impl') + parser.add_argument('--model',default="input", type=str, dest="model", + help="choose from bitnet_b1_58-large/bitnet_b1_58-3B/Llama3-8B-1.58-100B-tokens.") + parser.add_argument('--BM',default="input", type=str, + help="block length when cutting one weight (M, K) into M / BM weights (BM, K).") + parser.add_argument('--BK',default="input", type=str, + help="block length when cutting one weight (M, K) into K / BK weights (M, BK).") + parser.add_argument('--bm',default="input", type=str, + help="using simd instructions to compute (bm, 256 / bm) in one block") + args = parser.parse_args() + + kernel_shapes = ModelShapeDict[args.model] + + BM_list = [int(item) for item in args.BM.split(',')] + BK_list = [int(item) for item in args.BK.split(',')] + bm_list = [int(item) for item in args.bm.split(',')] + + assert(len(BM_list) == len(BK_list) == len(bm_list) == len(kernel_shapes)), "number of BM / BK / bm shoud be {}".format(len(kernel_shapes)) + + for i in range(len(kernel_shapes)): + assert kernel_shapes[i][0] % BM_list[i] == 0, "M %% BM should be 0" + assert kernel_shapes[i][1] % BK_list[i] == 0, "K %% BK should be 0" + assert bm_list[i] in [32, 64], "choose bm from [32, 64]" + + tbl_impl_code = [] + + for i in range(len(kernel_shapes)): + tbl_impl_code.append( + gen_tbl_impl("{}_{}".format(kernel_shapes[i][0], kernel_shapes[i][1]), BM_list[i], BK_list[i], bm_list[i], kernel_shapes[i][1]) + ) + api_code = gen_top_api(kernel_shapes) + pre_code = gen_preprocess_code() + ctor_code = gen_ctor_code() + trans_code = gen_transform_code(kernel_shapes) + + output_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "include") + + with open(''.join([output_dir, "/bitnet-lut-kernels.h"]), 'w') as f: + f.write(''.join("#if defined(GGML_BITNET_ARM_TL1)")) + f.write(''.join(ctor_code)) + for code in tbl_impl_code: + f.write(''.join(code)) + f.write(''.join(pre_code)) + f.write(''.join(api_code)) + f.write(''.join(trans_code)) + f.write(''.join("#endif")) + + config = ConfigParser() + + for i in range(len(kernel_shapes)): + config.add_section('Kernels_{}'.format(i)) + config.set('Kernels_{}'.format(i), 'M'.format(i), str(kernel_shapes[i][0])) + config.set('Kernels_{}'.format(i), 'K'.format(i), str(kernel_shapes[i][1])) + config.set('Kernels_{}'.format(i), 'BM'.format(i), str(BM_list[i])) + config.set('Kernels_{}'.format(i), 'BK'.format(i), str(BK_list[i])) + config.set('Kernels_{}'.format(i), 'bmm'.format(i), str(bm_list[i])) + + with open(''.join([output_dir, "/kernel_config.ini"]), 'w') as configfile: + config.write(configfile) \ No newline at end of file diff --git a/utils/codegen_tl2.py b/utils/codegen_tl2.py new file mode 100644 index 0000000..44d2418 --- /dev/null +++ b/utils/codegen_tl2.py @@ -0,0 +1,757 @@ +import argparse +import os +from configparser import ConfigParser + +def gen_ctor_code(): + kernel_code = "\n\ +#include \"ggml-bitnet.h\"\n\ +#include \n\ +#include \n\ +#define GGML_BITNET_MAX_NODES 8192\n\ +static bool initialized = false;\n\ +static bitnet_tensor_extra * bitnet_tensor_extras = nullptr;\n\ +static size_t bitnet_tensor_extras_index = 0;\n\ +static void * aligned_malloc(size_t size) {\n\ +#if defined(_WIN32)\n\ + return _aligned_malloc(size, 64);\n\ +#else\n\ + void * ptr = nullptr;\n\ + posix_memalign(&ptr, 64, size);\n\ + return ptr;\n\ +#endif\n\ +}\n\ +\n\ +static void aligned_free(void * ptr) {\n\ +#if defined(_WIN32)\n\ + _aligned_free(ptr);\n\ +#else\n\ + free(ptr);\n\ +#endif\n\ +}\n\ +#define BK2 32\n\ +#if defined __AVX2__\n\ +inline void _mm256_merge_epi32(const __m256i v0, const __m256i v1, __m256i *vl, __m256i *vh)\n\ +{\n\ + __m256i va = _mm256_permute4x64_epi64(v0, _MM_SHUFFLE(3, 1, 2, 0));\n\ + __m256i vb = _mm256_permute4x64_epi64(v1, _MM_SHUFFLE(3, 1, 2, 0));\n\ + *vl = _mm256_unpacklo_epi32(va, vb);\n\ + *vh = _mm256_unpackhi_epi32(va, vb);\n\ +}\n\ +inline void _mm256_merge_epi64(const __m256i v0, const __m256i v1, __m256i *vl, __m256i *vh)\n\ +{\n\ + __m256i va = _mm256_permute4x64_epi64(v0, _MM_SHUFFLE(3, 1, 2, 0));\n\ + __m256i vb = _mm256_permute4x64_epi64(v1, _MM_SHUFFLE(3, 1, 2, 0));\n\ + *vl = _mm256_unpacklo_epi64(va, vb);\n\ + *vh = _mm256_unpackhi_epi64(va, vb);\n\ +}\n\ +inline void _mm256_merge_si128(const __m256i v0, const __m256i v1, __m256i *vl, __m256i *vh)\n\ +{\n\ + *vl = _mm256_permute2x128_si256(v0, v1, _MM_SHUFFLE(0, 2, 0, 0));\n\ + *vh = _mm256_permute2x128_si256(v0, v1, _MM_SHUFFLE(0, 3, 0, 1));\n\ +}\n\ +inline void Transpose_8_8(\n\ + __m256i *v0,\n\ + __m256i *v1,\n\ + __m256i *v2,\n\ + __m256i *v3,\n\ + __m256i *v4,\n\ + __m256i *v5,\n\ + __m256i *v6,\n\ + __m256i *v7)\n\ +{\n\ + __m256i w0, w1, w2, w3, w4, w5, w6, w7;\n\ + __m256i x0, x1, x2, x3, x4, x5, x6, x7;\n\ + _mm256_merge_epi32(*v0, *v1, &w0, &w1);\n\ + _mm256_merge_epi32(*v2, *v3, &w2, &w3);\n\ + _mm256_merge_epi32(*v4, *v5, &w4, &w5);\n\ + _mm256_merge_epi32(*v6, *v7, &w6, &w7);\n\ + _mm256_merge_epi64(w0, w2, &x0, &x1);\n\ + _mm256_merge_epi64(w1, w3, &x2, &x3);\n\ + _mm256_merge_epi64(w4, w6, &x4, &x5);\n\ + _mm256_merge_epi64(w5, w7, &x6, &x7);\n\ + _mm256_merge_si128(x0, x4, v0, v1);\n\ + _mm256_merge_si128(x1, x5, v2, v3);\n\ + _mm256_merge_si128(x2, x6, v4, v5);\n\ + _mm256_merge_si128(x3, x7, v6, v7);\n\ +}\n\ +#endif\n\ +inline int32_t per_tensor_quant(int k, void* lut_scales_, void* b_) {\n\ + bitnet_float_type* lut_scales = (bitnet_float_type*)lut_scales_;\n\ + bitnet_float_type* b = (bitnet_float_type*)b_;\n\ +#if defined __AVX2__\n\ + __m256 max_vec = _mm256_set1_ps(0.f);\n\ + const __m256 vec_sign = _mm256_set1_ps(-0.0f);\n\ + for (int i = 0; i < k / 8; i++) {\n\ + __m256 vec_b = _mm256_loadu_ps(b + i * 8);\n\ + __m256 vec_babs = _mm256_andnot_ps(vec_sign, vec_b);\n\ + max_vec = _mm256_max_ps(vec_babs, max_vec);\n\ + }\n\ + __m128 max1 = _mm_max_ps(_mm256_extractf128_ps(max_vec, 1), _mm256_castps256_ps128(max_vec));\n\ + max1 = _mm_max_ps(max1, _mm_movehl_ps(max1, max1));\n\ + max1 = _mm_max_ss(max1, _mm_movehdup_ps(max1));\n\ + float scales = 127 / _mm_cvtss_f32(max1);\n\ + *lut_scales = scales;\n\ +#endif\n\ + return 0;\n\ +}\n\ +inline int32_t partial_max_reset(int32_t bs, void* lut_scales_) {\n\ + bitnet_float_type* lut_scales = (bitnet_float_type*)lut_scales_;\n\ + #pragma unroll\n\ + for (int i=0; i< bs; i++) {\n\ + lut_scales[i] = 0.0;\n\ + }\n\ + return 0;\n\ +}\n\ +template\n\ +inline int32_t three_lut_ctor(int8_t* qlut, bitnet_float_type* b, bitnet_float_type* lut_scales) {\n\ +#if defined __AVX2__\n\ + __m256 vec_lut[16];\n\ + const __m256i vec_bi = _mm256_set_epi32(84, 72, 60, 48, 36, 24, 12, 0);\n\ + float scales = *lut_scales;\n\ + __m256i shuffle_mask = _mm256_set_epi8(\n\ + 0x0f, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x03, 0x01,\n\ + 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00,\n\ + 0x0f, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x03, 0x01,\n\ + 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00\n\ + );\n\ +#pragma unroll\n\ + for (int k = 0; k < act_k / 24; ++k) {\n\ + __m256 vec_b0 = _mm256_i32gather_ps(b + k * 24 + 0, vec_bi, 1);\n\ + __m256 vec_b1 = _mm256_i32gather_ps(b + k * 24 + 1, vec_bi, 1);\n\ + __m256 vec_b2 = _mm256_i32gather_ps(b + k * 24 + 2, vec_bi, 1);\n\ +\n\ + __m256i vec_b0i = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b0, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC));\n\ + __m256i vec_b1i = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b1, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC));\n\ + __m256i vec_b2i = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b2, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC));\n\ +\n\ + vec_lut[15] = _mm256_setzero_si256();\n\ + vec_lut[14] = _mm256_setzero_si256();\n\ + vec_lut[13] = vec_b0i;\n\ + vec_lut[13] = _mm256_add_epi32(vec_lut[13], vec_b1i);\n\ + vec_lut[13] = _mm256_add_epi32(vec_lut[13], vec_b2i);\n\ + vec_lut[12] = vec_b0i;\n\ + vec_lut[12] = _mm256_add_epi32(vec_lut[12], vec_b1i);\n\ + vec_lut[11] = vec_b0i;\n\ + vec_lut[11] = _mm256_add_epi32(vec_lut[11], vec_b1i);\n\ + vec_lut[11] = _mm256_sub_epi32(vec_lut[11], vec_b2i);\n\ + vec_lut[10] = vec_b0i;\n\ + vec_lut[10] = _mm256_add_epi32(vec_lut[10], vec_b2i);\n\ + vec_lut[9] = vec_b0i;\n\ + vec_lut[8] = vec_b0i;\n\ + vec_lut[8] = _mm256_sub_epi32(vec_lut[8], vec_b2i);\n\ + vec_lut[7] = vec_b0i;\n\ + vec_lut[7] = _mm256_sub_epi32(vec_lut[7], vec_b1i);\n\ + vec_lut[7] = _mm256_add_epi32(vec_lut[7], vec_b2i);\n\ + vec_lut[6] = vec_b0i;\n\ + vec_lut[6] = _mm256_sub_epi32(vec_lut[6], vec_b1i);\n\ + vec_lut[5] = vec_b0i;\n\ + vec_lut[5] = _mm256_sub_epi32(vec_lut[5], vec_b1i);\n\ + vec_lut[5] = _mm256_sub_epi32(vec_lut[5], vec_b2i);\n\ + vec_lut[4] = vec_b1i;\n\ + vec_lut[4] = _mm256_add_epi32(vec_lut[4], vec_b2i);\n\ + vec_lut[3] = vec_b1i;\n\ + vec_lut[2] = vec_b1i;\n\ + vec_lut[2] = _mm256_sub_epi32(vec_lut[2], vec_b2i);\n\ + vec_lut[1] = vec_b2i;\n\ + vec_lut[0] = _mm256_setzero_si256();\n\ + __m256i ix[16];\n\ +\n\ +#pragma unroll\n\ + for (int g = 0; g < 16; ++g) {\n\ + ix[g] = vec_lut[g];\n\ + }\n\ +\n\ + Transpose_8_8(&(ix[0]), &(ix[1]), &(ix[2]), &(ix[3]), &(ix[4]), &(ix[5]),&(ix[6]), &(ix[7]));\n\ + Transpose_8_8(&(ix[8]), &(ix[9]), &(ix[10]), &(ix[11]), &(ix[12]), &(ix[13]),&(ix[14]), &(ix[15]));\n\ +\n\ +#pragma unroll\n\ + for (int g = 0; g < 8; ++g) {\n\ + ix[g] = _mm256_packs_epi32(ix[g], ix[g + 8]);\n\ + ix[g] = _mm256_permute4x64_epi64(ix[g], _MM_SHUFFLE(3, 1, 2, 0));\n\ + ix[g] = _mm256_shuffle_epi8(ix[g], shuffle_mask);\n\ + ix[g] = _mm256_permute4x64_epi64(ix[g], _MM_SHUFFLE(3, 1, 2, 0));\n\ + }\n\ + int8_t* qlut_i8 = reinterpret_cast(qlut);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 0 * 32 + 0), ix[0]);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 1 * 32 + 0), ix[1]);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 2 * 32 + 0), ix[2]);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 3 * 32 + 0), ix[3]);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 4 * 32 + 0), ix[4]);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 5 * 32 + 0), ix[5]);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 6 * 32 + 0), ix[6]);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 7 * 32 + 0), ix[7]);\n\ +\n\ + }\n\ +\n\ + *lut_scales = scales;\n\ +#endif\n\ + return 0;\n\ +}\n\ +\n\ +template\n\ +inline int32_t two_lut_ctor(int8_t* qlut, bitnet_float_type* b, bitnet_float_type* lut_scales) {\n\ +#if defined __AVX2__\n\ + __m256 vec_lut[16];\n\ + const __m256i vec_bi = _mm256_set_epi32(56, 48, 40, 32, 24, 16, 8, 0);\n\ + float scales = *lut_scales;\n\ + __m256i shuffle_mask = _mm256_set_epi8(\n\ + 0x0f, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x03, 0x01,\n\ + 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00,\n\ + 0x0f, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x03, 0x01,\n\ + 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00\n\ + );\n\ +#pragma unroll\n\ + for (int k = 0; k < act_k / 16; ++k) {\n\ + __m256 vec_b0f = _mm256_i32gather_ps(b + k * 16 + 0, vec_bi, 1);\n\ + __m256 vec_b1f = _mm256_i32gather_ps(b + k * 16 + 1, vec_bi, 1);\n\ +\n\ + __m256i vec_b0 = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b0f, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC));\n\ + __m256i vec_b1 = _mm256_cvtps_epi32(_mm256_round_ps(_mm256_mul_ps(vec_b1f, _mm256_set1_ps(scales)), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC));\n\ + vec_lut[15] = _mm256_setzero_si256();\n\ + vec_lut[14] = _mm256_setzero_si256();\n\ + vec_lut[13] = _mm256_setzero_si256();\n\ + vec_lut[12] = _mm256_setzero_si256();\n\ + vec_lut[11] = _mm256_setzero_si256();\n\ + vec_lut[10] = _mm256_setzero_si256();\n\ + vec_lut[9] = _mm256_setzero_si256();\n\ + vec_lut[8] = vec_b0;\n\ + vec_lut[8] = _mm256_add_epi32(vec_lut[8], vec_b1);\n\ + vec_lut[7] = vec_b0;\n\ + vec_lut[6] = vec_b0;\n\ + vec_lut[6] = _mm256_sub_epi32(vec_lut[6], vec_b1);\n\ + vec_lut[5] = vec_b1;\n\ + vec_lut[4] = _mm256_setzero_si256();\n\ + vec_lut[3] = _mm256_setzero_si256();\n\ + vec_lut[3] = _mm256_sub_epi32(vec_lut[3], vec_b1);\n\ + vec_lut[2] = _mm256_setzero_si256();\n\ + vec_lut[2] = _mm256_sub_epi32(vec_lut[2], vec_b0);\n\ + vec_lut[2] = _mm256_add_epi32(vec_lut[2], vec_b1);\n\ + vec_lut[1] = _mm256_setzero_si256();\n\ + vec_lut[1] = _mm256_sub_epi32(vec_lut[1], vec_b0);\n\ + vec_lut[0] = _mm256_setzero_si256();\n\ + vec_lut[0] = _mm256_sub_epi32(vec_lut[0], vec_b0);\n\ + vec_lut[0] = _mm256_sub_epi32(vec_lut[0], vec_b1);\n\ +\n\ + __m256i ix[16];\n\ +#pragma unroll\n\ + for (int g = 0; g < 16; ++g) {\n\ + ix[g] = vec_lut[g];\n\ + }\n\ +\n\ + Transpose_8_8(&(ix[0]), &(ix[1]), &(ix[2]), &(ix[3]), &(ix[4]), &(ix[5]),&(ix[6]), &(ix[7]));\n\ + Transpose_8_8(&(ix[8]), &(ix[9]), &(ix[10]), &(ix[11]), &(ix[12]), &(ix[13]),&(ix[14]), &(ix[15]));\n\ +\n\ +#pragma unroll\n\ + for (int g = 0; g < 8; ++g) {\n\ + ix[g] = _mm256_packs_epi32(ix[g], ix[g + 8]);\n\ + ix[g] = _mm256_permute4x64_epi64(ix[g], _MM_SHUFFLE(3, 1, 2, 0));\n\ + ix[g] = _mm256_shuffle_epi8(ix[g], shuffle_mask);\n\ + ix[g] = _mm256_permute4x64_epi64(ix[g], _MM_SHUFFLE(3, 1, 2, 0));\n\ + }\n\ +\n\ + int8_t* qlut_i8 = reinterpret_cast(qlut);\n\ +\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 0 * 32 + 0), ix[0]);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 1 * 32 + 0), ix[1]);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 2 * 32 + 0), ix[2]);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 3 * 32 + 0), ix[3]);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 4 * 32 + 0), ix[4]);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 5 * 32 + 0), ix[5]);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 6 * 32 + 0), ix[6]);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(qlut_i8 + k * 256 + 7 * 32 + 0), ix[7]);\n\ +\n\ + }\n\ + *lut_scales = scales;\n\ +#endif\n\ + return 0;\n\ +}\n\ +static bool is_type_supported(enum ggml_type type) {\n\ + if (type == GGML_TYPE_Q4_0 ||\n\ + type == GGML_TYPE_TL2) {\n\ + return true;\n\ + } else {\n\ + return false;\n\ + }\n\ +}\n\ +" + return kernel_code + +def gen_tbl_impl(pre, BM, BK, bm, k_list): + + kernel_code = "\ +#include \n\ +\n\ +#define BM{0} {1}\n\ +#define BBK{0} {2}\n\ +template\n\ +inline void three_tbl_impl_{0}(int32_t* c, int8_t* lut, uint8_t* a, uint8_t* sign) {{\n\ +".format(pre, BM, BK) + + kernel_code = "".join([kernel_code, "\ +#ifdef __AVX2__\n\ + const __m256i vec_mask = _mm256_set1_epi8(0x0f);\n\ + const __m256i vec_sign_mask = _mm256_set1_epi16(0x8000);\n\ + const __m256i vec_zero = _mm256_set1_epi8(0x00);\n\ + const __m256i vec_one = _mm256_set1_epi8(0xff);\n\ + const int KK = BBK{0} / 3;\n\ +#pragma unroll\n\ + for (int i = 0; i < BM{0}; i += 32) {{\n\ + __m256i vec_as[KK / 2];\n\ + __m256i vec_signs[KK / 8];\n\ + #pragma unroll\n\ + for (int ai = 0; ai < KK / 2; ai++) {{\n\ + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32));\n\ + }}\n\ + #pragma unroll\n\ + for (int as = 0; as < KK / 8; as++) {{\n\ + vec_signs[as] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(sign + i * KK / 8 + as * 32));\n\ + }}\n\ +#pragma unroll\n\ + for (int bs = 0; bs < batch_size; bs++) {{\n\ + __m256i vec_c0 = _mm256_setzero_si256();\n\ + __m256i vec_c1 = _mm256_setzero_si256();\n\ +#pragma unroll\n\ + for (int k = 0; k < KK / 8; k++) {{\n\ + __m256i vec_sign = vec_signs[k];\n\ + __m256i vec_a_0 = vec_as[k * 4 + 0];\n\ + __m128i vec_k1_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 0 + K3 / 3 * 32 * bs));\n\ + __m128i vec_k2_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 16 + K3 / 3 * 32 * bs));\n\ + __m128i vec_k3_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 32 + K3 / 3 * 32 * bs));\n\ + __m128i vec_k4_0 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 0 * 64 + 48 + K3 / 3 * 32 * bs));\n\ + __m256i vec_sign_left_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0)), 15);\n\ + __m256i vec_sign_left_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 1)), 15);\n\ + __m256i vec_v_top_0 = _mm256_and_si256(_mm256_srli_epi16(vec_a_0, 4), vec_mask);\n\ + __m256i vec_v_top_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_0, vec_k1_0), vec_v_top_0);\n\ + __m256i vec_v_top_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_0, vec_k2_0), vec_v_top_0);\n\ + __m256i vec_sign_right_hi_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 2)), 15);\n\ + __m256i vec_sign_right_lo_0 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 0 + 3)), 15);\n\ + __m256i vec_v_bot_0 = _mm256_and_si256(vec_a_0, vec_mask);\n\ + __m256i vec_v_bot_fir_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_0, vec_k3_0), vec_v_bot_0);\n\ + __m256i vec_v_bot_sec_0 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_0, vec_k4_0), vec_v_bot_0);\n\ + __m256i vec_v_top_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_lo_0), vec_sign_left_lo_0);\n\ + __m256i vec_v_top_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_0, vec_v_top_sec_0), vec_sign_left_hi_0), vec_sign_left_hi_0);\n\ + __m256i vec_v_bot_lo_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_lo_0), vec_sign_right_lo_0);\n\ + __m256i vec_v_bot_hi_0 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_0, vec_v_bot_sec_0), vec_sign_right_hi_0), vec_sign_right_hi_0);\n\ + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_0);\n\ + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_0);\n\ + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_0);\n\ + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_0);\n\ + __m256i vec_a_1 = vec_as[k * 4 + 1];\n\ + __m128i vec_k1_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 0 + K3 / 3 * 32 * bs));\n\ + __m128i vec_k2_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 16 + K3 / 3 * 32 * bs));\n\ + __m128i vec_k3_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 32 + K3 / 3 * 32 * bs));\n\ + __m128i vec_k4_1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 1 * 64 + 48 + K3 / 3 * 32 * bs));\n\ + __m256i vec_sign_left_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1)), 15);\n\ + __m256i vec_sign_left_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 1)), 15);\n\ + __m256i vec_v_top_1 = _mm256_and_si256(_mm256_srli_epi16(vec_a_1, 4), vec_mask);\n\ + __m256i vec_v_top_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_1, vec_k1_1), vec_v_top_1);\n\ + __m256i vec_v_top_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_1, vec_k2_1), vec_v_top_1);\n\ + __m256i vec_sign_right_hi_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 2)), 15);\n\ + __m256i vec_sign_right_lo_1 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 1 + 3)), 15);\n\ + __m256i vec_v_bot_1 = _mm256_and_si256(vec_a_1, vec_mask);\n\ + __m256i vec_v_bot_fir_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_1, vec_k3_1), vec_v_bot_1);\n\ + __m256i vec_v_bot_sec_1 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_1, vec_k4_1), vec_v_bot_1);\n\ + __m256i vec_v_top_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_lo_1), vec_sign_left_lo_1);\n\ + __m256i vec_v_top_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_1, vec_v_top_sec_1), vec_sign_left_hi_1), vec_sign_left_hi_1);\n\ + __m256i vec_v_bot_lo_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_lo_1), vec_sign_right_lo_1);\n\ + __m256i vec_v_bot_hi_1 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_1, vec_v_bot_sec_1), vec_sign_right_hi_1), vec_sign_right_hi_1);\n\ + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_1);\n\ + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_1);\n\ + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_1);\n\ + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_1);\n\ + __m256i vec_a_2 = vec_as[k * 4 + 2];\n\ + __m128i vec_k1_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 0 + K3 / 3 * 32 * bs));\n\ + __m128i vec_k2_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 16 + K3 / 3 * 32 * bs));\n\ + __m128i vec_k3_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 32 + K3 / 3 * 32 * bs));\n\ + __m128i vec_k4_2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 2 * 64 + 48 + K3 / 3 * 32 * bs));\n\ + __m256i vec_sign_left_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2)), 15);\n\ + __m256i vec_sign_left_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 1)), 15);\n\ + __m256i vec_v_top_2 = _mm256_and_si256(_mm256_srli_epi16(vec_a_2, 4), vec_mask);\n\ + __m256i vec_v_top_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_2, vec_k1_2), vec_v_top_2);\n\ + __m256i vec_v_top_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_2, vec_k2_2), vec_v_top_2);\n\ + __m256i vec_sign_right_hi_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 2)), 15);\n\ + __m256i vec_sign_right_lo_2 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 2 + 3)), 15);\n\ + __m256i vec_v_bot_2 = _mm256_and_si256(vec_a_2, vec_mask);\n\ + __m256i vec_v_bot_fir_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_2, vec_k3_2), vec_v_bot_2);\n\ + __m256i vec_v_bot_sec_2 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_2, vec_k4_2), vec_v_bot_2);\n\ + __m256i vec_v_top_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_lo_2), vec_sign_left_lo_2);\n\ + __m256i vec_v_top_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_2, vec_v_top_sec_2), vec_sign_left_hi_2), vec_sign_left_hi_2);\n\ + __m256i vec_v_bot_lo_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_lo_2), vec_sign_right_lo_2);\n\ + __m256i vec_v_bot_hi_2 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_2, vec_v_bot_sec_2), vec_sign_right_hi_2), vec_sign_right_hi_2);\n\ + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_2);\n\ + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_2);\n\ + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_2);\n\ + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_2);\n\ + __m256i vec_a_3 = vec_as[k * 4 + 3];\n\ + __m128i vec_k1_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 0 + K3 / 3 * 32 * bs));\n\ + __m128i vec_k2_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 16 + K3 / 3 * 32 * bs));\n\ + __m128i vec_k3_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 32 + K3 / 3 * 32 * bs));\n\ + __m128i vec_k4_3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + 3 * 64 + 48 + K3 / 3 * 32 * bs));\n\ + __m256i vec_sign_left_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3)), 15);\n\ + __m256i vec_sign_left_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 1)), 15);\n\ + __m256i vec_v_top_3 = _mm256_and_si256(_mm256_srli_epi16(vec_a_3, 4), vec_mask);\n\ + __m256i vec_v_top_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1_3, vec_k1_3), vec_v_top_3);\n\ + __m256i vec_v_top_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2_3, vec_k2_3), vec_v_top_3);\n\ + __m256i vec_sign_right_hi_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 2)), 15);\n\ + __m256i vec_sign_right_lo_3 = _mm256_srai_epi16(_mm256_slli_epi16(vec_sign, (4 * 3 + 3)), 15);\n\ + __m256i vec_v_bot_3 = _mm256_and_si256(vec_a_3, vec_mask);\n\ + __m256i vec_v_bot_fir_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3_3, vec_k3_3), vec_v_bot_3);\n\ + __m256i vec_v_bot_sec_3 = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4_3, vec_k4_3), vec_v_bot_3);\n\ + __m256i vec_v_top_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_lo_3), vec_sign_left_lo_3);\n\ + __m256i vec_v_top_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_top_fir_3, vec_v_top_sec_3), vec_sign_left_hi_3), vec_sign_left_hi_3);\n\ + __m256i vec_v_bot_lo_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpackhi_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_lo_3), vec_sign_right_lo_3);\n\ + __m256i vec_v_bot_hi_3 = _mm256_xor_si256(_mm256_add_epi16(_mm256_unpacklo_epi8(vec_v_bot_fir_3, vec_v_bot_sec_3), vec_sign_right_hi_3), vec_sign_right_hi_3);\n\ + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi_3);\n\ + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi_3);\n\ + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo_3);\n\ + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo_3);\n\ + }}\n\ + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM{0} * bs));\n\ + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM{0} * bs));\n\ + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM{0} * bs));\n\ + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM{0} * bs));\n\ + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0)));\n\ + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1)));\n\ + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1)));\n\ + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1)));\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM{0} * bs), vec_gc0);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM{0} * bs), vec_gc1);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM{0} * bs), vec_gc2);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM{0} * bs), vec_gc3);\n\ + }}\n\ + }}\n\ +#endif\n\ +}}\n\ +\n\ +template\n\ +inline int32_t two_tbl_impl{0}(int32_t* c, int8_t* lut, uint8_t* a) {{\n\ +#ifdef __AVX2__\n\ + const __m256i vec_mask = _mm256_set1_epi8(0x0f);\n\ + const int KK = BK2 / 2;\n\ +#pragma unroll\n\ + for (int i = 0; i < BM{0}; i += 32) {{\n\ + __m256i vec_as[KK / 2];\n\ + #pragma unroll\n\ + for (int ai = 0; ai < KK / 2; ai++) {{\n\ + vec_as[ai] = _mm256_loadu_si256(reinterpret_cast<__m256i*>(a + i * KK / 2 + ai * 32));\n\ + }}\n\ +#pragma unroll\n\ + for (int bs = 0; bs < batch_size; bs++) {{\n\ + __m256i vec_c0 = _mm256_setzero_si256();\n\ + __m256i vec_c1 = _mm256_setzero_si256();\n\ +#pragma unroll\n\ + for (int k = 0; k < KK / 8; k++) {{\n\ + #pragma unroll\n\ + for (int j = 0; j < 4; j++) {{\n\ + __m256i vec_a = vec_as[k * 4 + j];\n\ +\n\ + __m128i vec_k1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 0 + K2 / 2 * 32 * bs));\n\ + __m128i vec_k2 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 16 + K2 / 2 * 32 * bs));\n\ + __m128i vec_k3 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 32 + K2 / 2 * 32 * bs));\n\ + __m128i vec_k4 = _mm_loadu_si128(reinterpret_cast<__m128i*>(lut + k * 32 * 8 + j * 64 + 48 + K2 / 2 * 32 * bs));\n\ +\n\ + __m256i vec_v_top = _mm256_and_si256(_mm256_srli_epi16(vec_a, 4), vec_mask);\n\ + __m256i vec_v_top_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k1, vec_k1), vec_v_top);\n\ + __m256i vec_v_top_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k2, vec_k2), vec_v_top);\n\ +\n\ + __m256i vec_v_bot = _mm256_and_si256(vec_a, vec_mask);\n\ + __m256i vec_v_bot_fir = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k3, vec_k3), vec_v_bot);\n\ + __m256i vec_v_bot_sec = _mm256_shuffle_epi8(_mm256_set_m128i(vec_k4, vec_k4), vec_v_bot);\n\ +\n\ + __m256i vec_v_top_lo = _mm256_unpackhi_epi8(vec_v_top_fir, vec_v_top_sec);\n\ + __m256i vec_v_top_hi = _mm256_unpacklo_epi8(vec_v_top_fir, vec_v_top_sec);\n\ + __m256i vec_v_bot_lo = _mm256_unpackhi_epi8(vec_v_bot_fir, vec_v_bot_sec);\n\ + __m256i vec_v_bot_hi = _mm256_unpacklo_epi8(vec_v_bot_fir, vec_v_bot_sec);\n\ + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_top_hi);\n\ + vec_c0 = _mm256_add_epi16(vec_c0, vec_v_bot_hi);\n\ + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_top_lo);\n\ + vec_c1 = _mm256_add_epi16(vec_c1, vec_v_bot_lo); \n\ + }}\n\ + }}\n\ +\n\ + __m256i vec_gc0 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + BM{0} * bs));\n\ + __m256i vec_gc1 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM{0} * bs));\n\ + __m256i vec_gc2 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM{0} * bs));\n\ + __m256i vec_gc3 = _mm256_loadu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM{0} * bs));\n\ +\n\ + vec_gc0 = _mm256_add_epi32(vec_gc0, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c0)));\n\ + vec_gc1 = _mm256_add_epi32(vec_gc1, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c0, 1)));\n\ + vec_gc2 = _mm256_add_epi32(vec_gc2, _mm256_cvtepi16_epi32(_mm256_castsi256_si128(vec_c1)));\n\ + vec_gc3 = _mm256_add_epi32(vec_gc3, _mm256_cvtepi16_epi32(_mm256_extracti128_si256(vec_c1, 1)));\n\ +\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + BM{0} * bs), vec_gc0);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 8 + BM{0} * bs), vec_gc1);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 16 + BM{0} * bs), vec_gc2);\n\ + _mm256_storeu_si256(reinterpret_cast<__m256i*>(c + i + 24 + BM{0} * bs), vec_gc3);\n\ + }}\n\ + }}\n\ +#endif\n\ + return 0;\n\ +}}\n\ +\n\ +template\n\ +int32_t three_qgemm_lut_{0}(void* A, void* sign, void* LUT, void* Scales, void* LUT_Scales, void* C) {{\n\ + alignas(32) uint32_t CBits[BATCH_SIZE * BM{0}];\n\ + memset(&(CBits[0]), 0, BATCH_SIZE * BM{0} * sizeof(int32_t));\n\ +#pragma unroll\n\ + for (int32_t k_outer = 0; k_outer < {1} / BBK{0}; ++k_outer) {{\n\ + three_tbl_impl_{0}((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BBK{0} / 3 * 32)])), (&(((uint8_t*)A)[(k_outer * BBK{0} / 3 / 2 * BM{0})])), (&(((uint8_t*)sign)[(k_outer * BBK{0} / 3 / 8 * BM{0})])));\n\ + }}\n\ +#pragma unroll\n\ + for (int bs = 0; bs < BATCH_SIZE; bs++) {{\n\ +#pragma unroll\n\ + for (int i = 0; i < BM{0}; i++) {{\n\ + ((int32_t*)C)[i] = (int32_t)(((int32_t*)CBits)[i + bs * BM{0}]);\n\ + }}\n\ + }}\n\ + return 0;\n\ +}}\n\ +\n\ +template\n\ +int32_t two_qgemm_lut_{0}(void* A, void* LUT, void* Scales, void* LUT_Scales, void* C) {{\n\ + alignas(32) uint32_t CBits[BATCH_SIZE * BM{0}];\n\ + memset(&(CBits[0]), 0, BATCH_SIZE * BM{0} * sizeof(int32_t));\n\ +#pragma unroll\n\ + for (int32_t k_outer = 0; k_outer < {2} / 32; ++k_outer) {{\n\ + two_tbl_impl{0}((&(((int32_t*)CBits)[0])), (&(((int8_t*)LUT)[(k_outer * BK2 / 2 * 32)])), (&(((uint8_t*)A)[(k_outer * BK2 / 2 / 2 * BM{0})])));\n\ + }}\n\ +#pragma unroll\n\ + for (int bs = 0; bs < BATCH_SIZE; bs++) {{\n\ +#pragma unroll\n\ + for (int i = 0; i < BM{0}; i++) {{\n\ + ((int32_t*)C)[i] += (int32_t)(((int32_t*)CBits)[i + bs * BM{0}]);\n\ + ((float*)C)[i] = (float)(((int32_t*)C)[i]) / ((float*)LUT_Scales)[bs] * ((float*)Scales)[0];\n\ + }}\n\ + }}\n\ + return 0;\n\ +}}\n\ +\n\ +".format(pre, k_list[1], k_list[0])]) + return kernel_code + +def gen_top_api(kernel_shapes, k_list): + + kernel_code = "void ggml_preprocessor(int bs, int m, int three_k, int two_k, void* B, void* LUT_Scales, void* Three_QLUT, void* Two_QLUT) {{\n\ + partial_max_reset(bs, (&(((float*)LUT_Scales)[0])));\n\ + if (m == {0} && two_k == {1} && three_k == {2}) {{\n\ + for (int32_t b = 0; b < bs; b++) {{\n\ + per_tensor_quant(two_k + three_k, (&(((float*)LUT_Scales)[b])), (&(((float*)B)[b * (two_k + three_k)])));\n\ + three_lut_ctor<{2}>((&(((int8_t*)Three_QLUT)[b * three_k / 3 * 32])), (&(((float*)B)[b * (three_k + two_k)])), (&(((float*)LUT_Scales)[b])));\n\ + two_lut_ctor<{1}>((&(((int8_t*)Two_QLUT)[b * two_k / 2 * 32])), (&(((float*)B)[b * (three_k + two_k) + {2}])), (&(((float*)LUT_Scales)[b])));\n\ + }}\n\ + }}\n\ +".format(kernel_shapes[0][0], k_list[0][0], k_list[0][1]) + for i in range(1, len(kernel_shapes)): + kernel_code = "".join([kernel_code, " else if (m == {0} && two_k == {1} && three_k == {2}) {{\n\ + for (int32_t b = 0; b < bs; b++) {{\n\ + per_tensor_quant(two_k + three_k, (&(((float*)LUT_Scales)[b])), (&(((float*)B)[b * (two_k + three_k)])));\n\ + three_lut_ctor<{2}>((&(((int8_t*)Three_QLUT)[b * three_k / 3 * 32])), (&(((float*)B)[b * (three_k + two_k)])), (&(((float*)LUT_Scales)[b])));\n\ + two_lut_ctor<{1}>((&(((int8_t*)Two_QLUT)[b * two_k / 2 * 32])), (&(((float*)B)[b * (three_k + two_k) + {2}])), (&(((float*)LUT_Scales)[b])));\n\ + }}\n\ + }}\n".format(kernel_shapes[i][0], k_list[i][0], k_list[i][1])]) + kernel_code = "".join([kernel_code, "}\n"]) + + + kernel_code = "".join([kernel_code, "void ggml_qgemm_lut(int bs, int m, int k, int BK, void* A, void* sign, void* LUT, void* Scales, void* LUT_Scales, void* C) {{\n\ + if (m == {0} && k == {1}) {{\n\ + if (BK == {2}) {{\n\ + if (bs == 1) {{\n\ + two_qgemm_lut_{4}<1>(A, LUT, Scales, LUT_Scales, C);\n\ + }} else if (bs == 8) {{\n\ + two_qgemm_lut_{4}<8>(A, LUT, Scales, LUT_Scales, C);\n\ + }} else if (bs == 32) {{\n\ + two_qgemm_lut_{4}<32>(A, LUT, Scales, LUT_Scales, C);\n\ + }} else if (bs == 128) {{\n\ + two_qgemm_lut_{4}<128>(A, LUT, Scales, LUT_Scales, C);\n\ + }} else if (bs == 256) {{\n\ + two_qgemm_lut_{4}<256>(A, LUT, Scales, LUT_Scales, C);\n\ + }} else if (bs == 512) {{\n\ + two_qgemm_lut_{4}<512>(A, LUT, Scales, LUT_Scales, C);\n\ + }}\n\ + }}\n\ + else if (BK == {3}) {{\n\ + if (bs == 1) {{\n\ + three_qgemm_lut_{4}<1>(A, sign, LUT, Scales, LUT_Scales, C);\n\ + }}else if (bs == 8) {{\n\ + three_qgemm_lut_{4}<8>(A, sign, LUT, Scales, LUT_Scales, C);\n\ + }}else if (bs == 32) {{\n\ + three_qgemm_lut_{4}<32>(A, sign, LUT, Scales, LUT_Scales, C);\n\ + }}else if (bs == 128) {{\n\ + three_qgemm_lut_{4}<128>(A, sign, LUT, Scales, LUT_Scales, C);\n\ + }}else if (bs == 256) {{\n\ + three_qgemm_lut_{4}<256>(A, sign, LUT, Scales, LUT_Scales, C);\n\ + }}else if (bs == 512) {{\n\ + three_qgemm_lut_{4}<512>(A, sign, LUT, Scales, LUT_Scales, C);\n\ + }}\n\ + }}\n\ + }}\n\ +".format(kernel_shapes[0][0], kernel_shapes[0][1], k_list[0][0], k_list[0][1], "{}_{}".format(kernel_shapes[0][0], kernel_shapes[0][1]))]) + for i in range(1, len(kernel_shapes)): + kernel_code = "".join([kernel_code, " else if (m == {0} && k == {1}) {{\n\ + if (BK == {2}) {{\n\ + if (bs == 1) {{\n\ + two_qgemm_lut_{4}<1>(A, LUT, Scales, LUT_Scales, C);\n\ + }} else if (bs == 8) {{\n\ + two_qgemm_lut_{4}<8>(A, LUT, Scales, LUT_Scales, C);\n\ + }} else if (bs == 32) {{\n\ + two_qgemm_lut_{4}<32>(A, LUT, Scales, LUT_Scales, C);\n\ + }} else if (bs == 128) {{\n\ + two_qgemm_lut_{4}<128>(A, LUT, Scales, LUT_Scales, C);\n\ + }} else if (bs == 256) {{\n\ + two_qgemm_lut_{4}<256>(A, LUT, Scales, LUT_Scales, C);\n\ + }} else if (bs == 512) {{\n\ + two_qgemm_lut_{4}<512>(A, LUT, Scales, LUT_Scales, C);\n\ + }}\n\ + }}\n\ + else if (BK == {3}) {{\n\ + if (bs == 1) {{\n\ + three_qgemm_lut_{4}<1>(A, sign, LUT, Scales, LUT_Scales, C);\n\ + }}else if (bs == 8) {{\n\ + three_qgemm_lut_{4}<8>(A, sign, LUT, Scales, LUT_Scales, C);\n\ + }}else if (bs == 32) {{\n\ + three_qgemm_lut_{4}<32>(A, sign, LUT, Scales, LUT_Scales, C);\n\ + }}else if (bs == 128) {{\n\ + three_qgemm_lut_{4}<128>(A, sign, LUT, Scales, LUT_Scales, C);\n\ + }}else if (bs == 256) {{\n\ + three_qgemm_lut_{4}<256>(A, sign, LUT, Scales, LUT_Scales, C);\n\ + }}else if (bs == 512) {{\n\ + three_qgemm_lut_{4}<512>(A, sign, LUT, Scales, LUT_Scales, C);\n\ + }}\n\ + }}\n\ + }}\n\ +".format(kernel_shapes[i][0], kernel_shapes[i][1], k_list[i][0], k_list[i][1], "{}_{}".format(kernel_shapes[i][0], kernel_shapes[i][1]))]) + kernel_code = "".join([kernel_code, "}\n"]) + return kernel_code + +def gen_transform_code(kernel_shapes): + kernel_code = "\n\ +void ggml_bitnet_transform_tensor(struct ggml_tensor * tensor) {\n\ + if (!(is_type_supported(tensor->type) && tensor->backend == GGML_BACKEND_TYPE_CPU && tensor->extra == nullptr)) {\n\ + return;\n\ + }\n\ +\n\ + int k = tensor->ne[0];\n\ + int m = tensor->ne[1];\n\ + const int lut_scales_size = 1;\n\ + int bk = 0;\n\ + int bm = 0;\n" + + kernel_code = "".join([kernel_code, "\n\ + if (m == {0} && k == {1}) {{\n\ + bm = BM{0}_{1};\n\ + bk = BBK{0}_{1};\n\ + }}\n".format(kernel_shapes[0][0], kernel_shapes[0][1])]) + + for i in range(1, len(kernel_shapes)): + kernel_code = "".join([kernel_code, "else if (m == {0} && k == {1}) {{\n\ + bm = BM{0}_{1};\n\ + bk = BBK{0}_{1};\n\ + }}\n".format(kernel_shapes[i][0], kernel_shapes[i][1])]) + + kernel_code = "".join([kernel_code, "\n\ + const int n_tile_num = m / bm;\n\ + const int BK = bk;\n\ + uint8_t * qweights;\n\ + bitnet_float_type * scales;\n\ +\n\ + scales = (bitnet_float_type *) aligned_malloc(sizeof(bitnet_float_type));\n\ + qweights = (uint8_t *) tensor->data;\n\ + int nbytes = (k - 256) * m / 3 * 5 / 8 + 256 * m / 2 * 4 / 8;\n\ + if (nbytes % 32 != 0) nbytes = 32 - nbytes % 32 + nbytes;\n\ + float * i2_scales = (float * )(qweights + nbytes);\n\ + scales[0] = (bitnet_float_type) i2_scales[0];\n\ +\n\ + tensor->extra = bitnet_tensor_extras + bitnet_tensor_extras_index;\n\ + bitnet_tensor_extras[bitnet_tensor_extras_index++] = {\n\ + /* .lut_scales_size = */ lut_scales_size,\n\ + /* .BK = */ BK,\n\ + /* .n_tile_num = */ n_tile_num,\n\ + /* .qweights = */ qweights,\n\ + /* .scales = */ scales\n\ + };\n\ +}\n"]) + + return kernel_code + +def get_three_k_two_k(K, bk): + bk_num = K // bk + three_k = bk_num * bk + two_k = K - three_k + return two_k, three_k + +if __name__ == "__main__": + ModelShapeDict = { + "bitnet_b1_58-large" : [[1536, 4096], + [1536, 1536], + [4096, 1536]], + "bitnet_b1_58-3B" : [[3200, 8640], + [3200, 3200], + [8640, 3200]], + "Llama3-8B-1.58-100B-tokens" : [[14336, 4096], + [4096, 14336], + [1024, 4096], + [4096, 4096]] + } + + parser = argparse.ArgumentParser(description='gen impl') + parser.add_argument('--model',default="input", type=str, dest="model", + help="choose from bitnet_b1_58-large/bitnet_b1_58-3B/Llama3-8B-1.58-100B-tokens.") + parser.add_argument('--BM',default="input", type=str, + help="block length when cutting one weight (M, K) into M / BM weights (BM, K).") + parser.add_argument('--BK',default="input", type=str, + help="block length when cutting one weight (M, K) into K / BK weights (M, BK).") + parser.add_argument('--bm',default="input", type=str, + help="using simd instructions to compute (bm, 192 / bm) in one block") + args = parser.parse_args() + + kernel_shapes = ModelShapeDict[args.model] + + BM_list = [int(item) for item in args.BM.split(',')] + BK_list = [int(item) for item in args.BK.split(',')] + bm_list = [int(item) for item in args.bm.split(',')] + + tbl_impl_code = [] + k_list = [] + + for i in range(len(kernel_shapes)): + k_list.append(get_three_k_two_k(kernel_shapes[i][1], BK_list[i])) + + for i in range(len(kernel_shapes)): + tbl_impl_code.append( + gen_tbl_impl("{}_{}".format(kernel_shapes[i][0], kernel_shapes[i][1]), BM_list[i], BK_list[i], bm_list[i], k_list[i]) + ) + + assert(len(BM_list) == len(BK_list) == len(bm_list) == len(kernel_shapes)), "number of BM / BK / bm shoud be {}".format(len(kernel_shapes)) + + for i in range(len(kernel_shapes)): + assert kernel_shapes[i][0] % BM_list[i] == 0, "M %% BM should be 0" + assert (kernel_shapes[i][1] % BK_list[i]) % 32 == 0, "K %% BK %% 32 should be 0" + assert bm_list[i] in [32], "choose bm from [32]" + + ctor_code = gen_ctor_code() + api_code = gen_top_api(kernel_shapes, k_list) + trans_code = gen_transform_code(kernel_shapes) + + output_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "include") + + with open(''.join([output_dir, "/bitnet-lut-kernels.h"]), 'w') as f: + f.write(''.join("#if defined(GGML_BITNET_X86_TL2)")) + f.write(''.join(ctor_code)) + for code in tbl_impl_code: + f.write(''.join(code)) + f.write(''.join(api_code)) + f.write(''.join(trans_code)) + f.write(''.join("#endif")) + + config = ConfigParser() + + for i in range(len(kernel_shapes)): + config.add_section('Kernels_{}'.format(i)) + config.set('Kernels_{}'.format(i), 'M'.format(i), str(kernel_shapes[i][0])) + config.set('Kernels_{}'.format(i), 'K'.format(i), str(kernel_shapes[i][1])) + config.set('Kernels_{}'.format(i), 'BM'.format(i), str(BM_list[i])) + config.set('Kernels_{}'.format(i), 'BK'.format(i), str(BK_list[i])) + config.set('Kernels_{}'.format(i), 'bmm'.format(i), str(bm_list[i])) + + with open(''.join([output_dir, "/kernel_config.ini"]), 'w') as configfile: + config.write(configfile) \ No newline at end of file diff --git a/utils/convert-hf-to-gguf-bitnet.py b/utils/convert-hf-to-gguf-bitnet.py new file mode 100644 index 0000000..55b27ae --- /dev/null +++ b/utils/convert-hf-to-gguf-bitnet.py @@ -0,0 +1,1161 @@ +#!/usr/bin/env python3 + +from __future__ import annotations + +import logging +import argparse +import contextlib +import json +import os +import re +import sys +from abc import ABC, abstractmethod +from enum import IntEnum +from pathlib import Path +from hashlib import sha256 +from typing import TYPE_CHECKING, Any, Callable, ContextManager, Iterator, Sequence, TypeVar, cast +import configparser + +import numpy as np +import torch + +if TYPE_CHECKING: + from torch import Tensor + +if 'NO_LOCAL_GGUF' not in os.environ: + sys.path.insert(1, str(Path(__file__).parent / 'gguf-py')) +import gguf + +from convert import LlamaHfVocab, permute + +logger = logging.getLogger("hf-to-gguf") + + +###### MODEL DEFINITIONS ###### + +class SentencePieceTokenTypes(IntEnum): + NORMAL = 1 + UNKNOWN = 2 + CONTROL = 3 + USER_DEFINED = 4 + UNUSED = 5 + BYTE = 6 + + +AnyModel = TypeVar("AnyModel", bound="type[Model]") + + +class Model(ABC): + _model_classes: dict[str, type[Model]] = {} + + def __init__(self, dir_model: Path, ftype: int, fname_out: Path, is_big_endian: bool, use_temp_file: bool): + self.dir_model = dir_model + self.ftype = ftype + self.fname_out = fname_out + self.is_big_endian = is_big_endian + self.endianess = gguf.GGUFEndian.BIG if is_big_endian else gguf.GGUFEndian.LITTLE + self.use_temp_file = use_temp_file + self.is_safetensors = self._is_model_safetensors() + self.num_parts = Model.count_model_parts(self.dir_model, ".safetensors" if self.is_safetensors else ".bin") + self.part_names = self._get_part_names() + self.hparams = Model.load_hparams(self.dir_model) + self.gguf_writer = gguf.GGUFWriter(fname_out, gguf.MODEL_ARCH_NAMES[self.model_arch], endianess=self.endianess, use_temp_file=self.use_temp_file) + self.block_count = self.find_hparam(["n_layers", "num_hidden_layers", "n_layer"]) + self.tensor_map = gguf.get_tensor_name_map(self.model_arch, self.block_count) + + @property + @abstractmethod + def model_arch(self) -> gguf.MODEL_ARCH: + pass + + def find_hparam(self, keys: Sequence[str], optional: bool = False) -> Any: + key = next((k for k in keys if k in self.hparams), None) + if key is not None: + return self.hparams[key] + if optional: + return None + raise KeyError(f"could not find any of: {keys}") + + def set_vocab(self): + self._set_vocab_gpt2() + + def get_tensors(self) -> Iterator[tuple[str, Tensor]]: + for part_name in self.part_names: + logger.info(f"gguf: loading model part '{part_name}'") + ctx: ContextManager[Any] + if self.is_safetensors: + from safetensors import safe_open + ctx = cast(ContextManager[Any], safe_open(self.dir_model / part_name, framework="pt", device="cpu")) + else: + ctx = contextlib.nullcontext(torch.load(str(self.dir_model / part_name), map_location="cpu", mmap=True, weights_only=True)) + + with ctx as model_part: + for name in model_part.keys(): + data = model_part.get_tensor(name) if self.is_safetensors else model_part[name] + yield name, data + + def match_model_tensor_name(self, name: str, key: gguf.MODEL_TENSOR, bid: int | None, suffix: str = ".weight") -> bool: + if key not in gguf.MODEL_TENSORS[self.model_arch]: + return False + key_name: str = gguf.TENSOR_NAMES[key] + if "{bid}" in key_name: + if bid is None: + return False + key_name = key_name.format(bid=bid) + else: + if bid is not None: + return False + return name == (key_name + suffix) + + def map_tensor_name(self, name: str, try_suffixes: Sequence[str] = (".weight", ".bias")) -> str: + new_name = self.tensor_map.get_name(key=name, try_suffixes=try_suffixes) + if new_name is None: + raise ValueError(f"Can not map tensor {name!r}") + return new_name + + def set_gguf_parameters(self): + self.gguf_writer.add_name(self.dir_model.name) + self.gguf_writer.add_block_count(self.block_count) + + if (n_ctx := self.find_hparam(["max_position_embeddings", "n_ctx"], optional=True)) is not None: + self.gguf_writer.add_context_length(n_ctx) + logger.info(f"gguf: context length = {n_ctx}") + + n_embd = self.find_hparam(["hidden_size", "n_embd"]) + self.gguf_writer.add_embedding_length(n_embd) + logger.info(f"gguf: embedding length = {n_embd}") + + if (n_ff := self.find_hparam(["intermediate_size", "n_inner"], optional=True)) is not None: + self.gguf_writer.add_feed_forward_length(n_ff) + logger.info(f"gguf: feed forward length = {n_ff}") + + n_head = self.find_hparam(["num_attention_heads", "n_head"]) + self.gguf_writer.add_head_count(n_head) + logger.info(f"gguf: head count = {n_head}") + + if (n_head_kv := self.hparams.get("num_key_value_heads")) is not None: + self.gguf_writer.add_head_count_kv(n_head_kv) + logger.info(f"gguf: key-value head count = {n_head_kv}") + + if (rope_theta := self.hparams.get("rope_theta")) is not None: + self.gguf_writer.add_rope_freq_base(rope_theta) + logger.info(f"gguf: rope theta = {rope_theta}") + if (f_rms_eps := self.hparams.get("rms_norm_eps")) is not None: + self.gguf_writer.add_layer_norm_rms_eps(f_rms_eps) + logger.info(f"gguf: rms norm epsilon = {f_rms_eps}") + if (f_norm_eps := self.find_hparam(["layer_norm_eps", "layer_norm_epsilon", "norm_epsilon"], optional=True)) is not None: + self.gguf_writer.add_layer_norm_eps(f_norm_eps) + logger.info(f"gguf: layer norm epsilon = {f_norm_eps}") + if (n_experts := self.hparams.get("num_local_experts")) is not None: + self.gguf_writer.add_expert_count(n_experts) + logger.info(f"gguf: expert count = {n_experts}") + if (n_experts_used := self.hparams.get("num_experts_per_tok")) is not None: + self.gguf_writer.add_expert_used_count(n_experts_used) + logger.info(f"gguf: experts used count = {n_experts_used}") + + self.gguf_writer.add_file_type(self.ftype) + logger.info(f"gguf: file type = {self.ftype}") + + def write_tensors(self): + block_count = self.hparams.get("n_layers", self.hparams.get("num_hidden_layers", self.hparams.get("n_layer"))) + tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) + for name, data_torch in self.get_tensors(): + # we don't need these + if name.endswith((".attention.masked_bias", ".attention.bias", ".attention.rotary_emb.inv_freq")): + continue + + old_dtype = data_torch.dtype + + # convert any unsupported data types to float32 + if data_torch.dtype not in (torch.float16, torch.float32): + data_torch = data_torch.to(torch.float32) + + data = data_torch.squeeze().numpy() + + # map tensor names + new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) + if new_name is None: + raise ValueError(f"Can not map tensor {name!r}") + + n_dims = len(data.shape) + data_dtype = data.dtype + + # if f32 desired, convert any float16 to float32 + if self.ftype == 0 and data_dtype == np.float16: + data = data.astype(np.float32) + + # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 + if self.ftype == 1 and data_dtype == np.float16 and (n_dims == 1 or new_name.endswith("_norm.weight")): + data = data.astype(np.float32) + + # if f16 desired, convert any float32 2-dim weight tensors to float16 + if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: + data = data.astype(np.float16) + + logger.info(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") + + self.gguf_writer.add_tensor(new_name, data) + + def write(self): + self.write_tensors() + self.gguf_writer.write_header_to_file() + self.gguf_writer.write_kv_data_to_file() + self.gguf_writer.write_tensors_to_file() + self.gguf_writer.close() + + def write_vocab(self): + self.gguf_writer.write_header_to_file() + self.gguf_writer.write_kv_data_to_file() + self.gguf_writer.close() + + @staticmethod + def count_model_parts(dir_model: Path, prefix: str) -> int: + num_parts = 0 + for filename in os.listdir(dir_model): + if filename.endswith(prefix): + num_parts += 1 + + return num_parts + + @staticmethod + def load_hparams(dir_model): + with open(dir_model / "config.json", "r", encoding="utf-8") as f: + return json.load(f) + + @classmethod + def register(cls, *names: str) -> Callable[[AnyModel], AnyModel]: + assert names + + def func(modelcls: type[Model]): + for name in names: + cls._model_classes[name] = modelcls + return modelcls + return func + + @classmethod + def from_model_architecture(cls, arch): + try: + return cls._model_classes[arch] + except KeyError: + raise NotImplementedError(f'Architecture {arch!r} not supported!') from None + + def _is_model_safetensors(self) -> bool: + return Model.count_model_parts(self.dir_model, ".safetensors") > 0 + + def _get_part_names(self): + if self.is_safetensors: + if self.num_parts == 1: # there's only one .safetensors file + return ("model.safetensors",) + return (f"model-{n:05}-of-{self.num_parts:05}.safetensors" for n in range(1, self.num_parts + 1)) + + if self.num_parts == 1: # there's only one .bin file + return ("pytorch_model.bin",) + return (f"pytorch_model-{n:05}-of-{self.num_parts:05}.bin" for n in range(1, self.num_parts + 1)) + + # used for GPT-2 BPE and WordPiece vocabs + def get_vocab_base(self) -> tuple[list[str], list[int], str]: + tokens: list[str] = [] + toktypes: list[int] = [] + + from transformers import AutoTokenizer + tokenizer = AutoTokenizer.from_pretrained(self.dir_model) + vocab_size = self.hparams.get("vocab_size", len(tokenizer.vocab)) + assert max(tokenizer.vocab.values()) < vocab_size + + tokpre = self.get_vocab_base_pre(tokenizer) + + reverse_vocab = {id_: encoded_tok for encoded_tok, id_ in tokenizer.vocab.items()} + added_vocab = tokenizer.get_added_vocab() + + for i in range(vocab_size): + if i not in reverse_vocab: + tokens.append(f"[PAD{i}]") + toktypes.append(gguf.TokenType.USER_DEFINED) + elif reverse_vocab[i] in added_vocab: + tokens.append(reverse_vocab[i]) + if tokenizer.added_tokens_decoder[i].special: + toktypes.append(gguf.TokenType.CONTROL) + else: + toktypes.append(gguf.TokenType.USER_DEFINED) + else: + tokens.append(reverse_vocab[i]) + toktypes.append(gguf.TokenType.NORMAL) + + return tokens, toktypes, tokpre + + # NOTE: this function is generated by convert-hf-to-gguf-update.py + # do not modify it manually! + # ref: https://github.com/ggerganov/llama.cpp/pull/6920 + def get_vocab_base_pre(self, tokenizer) -> str: + # encoding this string and hashing the resulting tokens would (hopefully) give us a unique identifier that + # is specific for the BPE pre-tokenizer used by the model + # we will use this unique identifier to write a "tokenizer.ggml.pre" entry in the GGUF file which we can + # use in llama.cpp to implement the same pre-tokenizer + + chktxt = '\n \n\n \n\n\n \t \t\t \t\n \n \n \n \n🚀 (normal) 😶\u200d🌫️ (multiple emojis concatenated) ✅ 🦙🦙 3 33 333 3333 33333 333333 3333333 33333333 3.3 3..3 3...3 កាន់តែពិសេសអាច😁 ?我想在apple工作1314151天~ ------======= нещо на Български \'\'\'\'\'\'```````""""......!!!!!!?????? I\'ve been \'told he\'s there, \'RE you sure? \'M not sure I\'ll make it, \'D you like some tea? We\'Ve a\'lL' + + chktok = tokenizer.encode(chktxt) + chkhsh = sha256(str(chktok).encode()).hexdigest() + + logger.debug(f"chktok: {chktok}") + logger.debug(f"chkhsh: {chkhsh}") + + res = None + + # NOTE: if you get an error here, you need to update the convert-hf-to-gguf-update.py script + # or pull the latest version of the model from Huggingface + # don't edit the hashes manually! + if chkhsh == "0ef9807a4087ebef797fc749390439009c3b9eda9ad1a097abbe738f486c01e5": + # ref: https://huggingface.co/meta-llama/Meta-Llama-3-8B + res = "llama-bpe" + if chkhsh == "049ecf7629871e3041641907f3de7c733e4dbfdc736f57d882ba0b0845599754": + # ref: https://huggingface.co/deepseek-ai/deepseek-llm-7b-base + res = "deepseek-llm" + if chkhsh == "347715f544604f9118bb75ed199f68779f423cabb20db6de6f31b908d04d7821": + # ref: https://huggingface.co/deepseek-ai/deepseek-coder-6.7b-base + res = "deepseek-coder" + if chkhsh == "8aeee3860c56296a157a1fe2fad249ec40aa59b1bb5709f4ade11c4e6fe652ed": + # ref: https://huggingface.co/tiiuae/falcon-7b + res = "falcon" + if chkhsh == "0876d13b50744004aa9aeae05e7b0647eac9d801b5ba4668afc01e709c15e19f": + # ref: https://huggingface.co/BAAI/bge-small-en-v1.5 + res = "bert-bge" + if chkhsh == "b6dc8df998e1cfbdc4eac8243701a65afe638679230920b50d6f17d81c098166": + # ref: https://huggingface.co/mosaicml/mpt-7b + res = "mpt" + if chkhsh == "35d91631860c815f952d711435f48d356ebac988362536bed955d43bfa436e34": + # ref: https://huggingface.co/bigcode/starcoder2-3b + res = "starcoder" + if chkhsh == "3ce83efda5659b07b1ad37ca97ca5797ea4285d9b9ab0dc679e4a720c9da7454": + # ref: https://huggingface.co/openai-community/gpt2 + res = "gpt-2" + if chkhsh == "6221ad2852e85ce96f791f476e0b390cf9b474c9e3d1362f53a24a06dc8220ff": + # ref: https://huggingface.co/smallcloudai/Refact-1_6-base + res = "refact" + if chkhsh == "9c2227e4dd922002fb81bde4fc02b0483ca4f12911410dee2255e4987644e3f8": + # ref: https://huggingface.co/CohereForAI/c4ai-command-r-v01 + res = "command-r" + + if res is None: + logger.warning("\n") + logger.warning("**************************************************************************************") + logger.warning("** WARNING: The BPE pre-tokenizer was not recognized!") + logger.warning("** There are 2 possible reasons for this:") + logger.warning("** - the model has not been added to convert-hf-to-gguf-update.py yet") + logger.warning("** - the pre-tokenization config has changed upstream") + logger.warning("** Check your model files and convert-hf-to-gguf-update.py and update them accordingly.") + logger.warning("** ref: https://github.com/ggerganov/llama.cpp/pull/6920") + logger.warning("**") + logger.warning(f"** chkhsh: {chkhsh}") + logger.warning("**************************************************************************************") + logger.warning("\n") + raise NotImplementedError("BPE pre-tokenizer was not recognized - update get_vocab_base_pre()") + + logger.debug(f"tokenizer.ggml.pre: {repr(res)}") + logger.debug(f"chkhsh: {chkhsh}") + + return res + + def _set_vocab_gpt2(self) -> None: + tokens, toktypes, tokpre = self.get_vocab_base() + self.gguf_writer.add_tokenizer_model("gpt2") + self.gguf_writer.add_tokenizer_pre(tokpre) + self.gguf_writer.add_token_list(tokens) + self.gguf_writer.add_token_types(toktypes) + + special_vocab = gguf.SpecialVocab(self.dir_model, load_merges=True) + special_vocab.add_to_gguf(self.gguf_writer) + + def _set_vocab_sentencepiece(self): + from sentencepiece import SentencePieceProcessor + + tokenizer_path = self.dir_model / 'tokenizer.model' + + tokens: list[bytes] = [] + scores: list[float] = [] + toktypes: list[int] = [] + + if not tokenizer_path.is_file(): + raise FileNotFoundError(f"File not found: {tokenizer_path}") + + tokenizer = SentencePieceProcessor(str(tokenizer_path)) + vocab_size = self.hparams.get('vocab_size', tokenizer.vocab_size()) + + for token_id in range(tokenizer.vocab_size()): + piece = tokenizer.id_to_piece(token_id) + text = piece.encode("utf-8") + score = tokenizer.get_score(token_id) + + toktype = SentencePieceTokenTypes.NORMAL + if tokenizer.is_unknown(token_id): + toktype = SentencePieceTokenTypes.UNKNOWN + elif tokenizer.is_control(token_id): + toktype = SentencePieceTokenTypes.CONTROL + elif tokenizer.is_unused(token_id): + toktype = SentencePieceTokenTypes.UNUSED + elif tokenizer.is_byte(token_id): + toktype = SentencePieceTokenTypes.BYTE + + tokens.append(text) + scores.append(score) + toktypes.append(toktype) + + added_tokens_file = self.dir_model / 'added_tokens.json' + if added_tokens_file.is_file(): + with open(added_tokens_file, "r", encoding="utf-8") as f: + added_tokens_json = json.load(f) + + for key in added_tokens_json: + key = key.encode("utf-8") + if key not in tokens: + tokens.append(key) + scores.append(-1000.0) + toktypes.append(SentencePieceTokenTypes.USER_DEFINED) + + if vocab_size > len(tokens): + pad_count = vocab_size - len(tokens) + logger.debug(f"Padding vocab with {pad_count} token(s) - [PAD1] through [PAD{pad_count}]") + for i in range(1, pad_count + 1): + tokens.append(f"[PAD{i}]") + scores.append(-1000.0) + toktypes.append(SentencePieceTokenTypes.UNUSED) + + assert len(tokens) == vocab_size + + self.gguf_writer.add_tokenizer_model("llama") + self.gguf_writer.add_tokenizer_pre("default") + self.gguf_writer.add_token_list(tokens) + self.gguf_writer.add_token_scores(scores) + self.gguf_writer.add_token_types(toktypes) + + special_vocab = gguf.SpecialVocab(self.dir_model, n_vocab=len(tokens)) + special_vocab.add_to_gguf(self.gguf_writer) + + def _set_vocab_llama_hf(self): + vocab = LlamaHfVocab(self.dir_model) + tokens = [] + scores = [] + toktypes = [] + + for text, score, toktype in vocab.all_tokens(): + tokens.append(text) + scores.append(score) + toktypes.append(toktype) + + assert len(tokens) == vocab.vocab_size + + self.gguf_writer.add_tokenizer_model("llama") + self.gguf_writer.add_tokenizer_pre("default") + self.gguf_writer.add_token_list(tokens) + self.gguf_writer.add_token_scores(scores) + self.gguf_writer.add_token_types(toktypes) + + special_vocab = gguf.SpecialVocab(self.dir_model, n_vocab=len(tokens)) + special_vocab.add_to_gguf(self.gguf_writer) + +# TL1 + +def process_tl1(weight, BM, BY, bm, by, M, K): + weight = weight.reshape((M, K // 2)).astype(np.uint8) + weight = weight.reshape((M // BM, BM, K // 2)).transpose(0, 2, 1) + weight = weight.reshape((M // BM, K // BY, BY // 2, BM)).transpose(0, 1, 3, 2) + weight = weight.reshape((M // BM, K // BY, BM // bm, bm, BY // 2)).transpose(0, 1, 2, 4, 3) + weight = weight.reshape((M // BM, K // BY, BM // bm, BY // by, by // 2, bm)).transpose(0, 1, 2, 3, 5, 4) + weight = weight.reshape((M // BM, K // BY, BM // bm, BY // by, bm // 16, 16, by // 2)).transpose(0, 1, 2, 3, 4, 6, 5) + weight = weight.reshape((M // BM, K // BY, BM // bm, BY // by, bm // 16, by // 4, 4 // 2, 16)).transpose(0, 1, 2, 3, 4, 5, 7, 6) + weight = weight.reshape((M * K // 16 // 4, 16, 4 // 2)) + weight_0 = weight[:, :, 0] << 4 + weight_1 = weight[:, :, 1] + weight = weight_0 + weight_1 + return weight + +def preprocess_weights_tl1( + w: np.ndarray, + bits = 2, + g = 4, +) -> Tuple[np.ndarray, np.ndarray]: + from configparser import ConfigParser + config = ConfigParser() + + M, K = w.shape + weight = w + weight = np.where(np.abs(weight) < 1e-6, 0, weight).astype(np.float32) + weight = np.sign(weight) + weight_num = np.prod(weight.shape) + + config.read('include/kernel_config.ini') + BM = -1 + BY = -1 + bm = -1 + + for kernel in config.sections(): + if int(config.get(kernel, 'm')) == M and int(config.get(kernel, 'k')) == K: + BM = int(config.get(kernel, 'bm')) + BY = int(config.get(kernel, 'bk')) + bm = int(config.get(kernel, 'bmm')) + by = 256 // bm + break + + if BM == -1: + raise NotImplementedError + + weight = np.reshape(weight, (weight_num // 2, 2)) + hi_weight = np.multiply(np.split(weight, 2, axis=1)[0], 3) + lo_weight = np.split(weight, 2, axis=1)[1] + + weight = np.reshape((hi_weight + lo_weight), weight_num // 2) + + weight = weight + 4 + weight = np.reshape(weight, (M, K // 2)).astype(np.uint8) + + weight = process_tl1(weight, BM, BY, bm, by, M, K) + + return weight + + +def preprocess_two_weights_tl2(M, K, weight_num, BM, BY, bm, by, weight, final_weight): + weight = np.reshape(weight, (weight_num // 2, 2)) + hi_weight = np.multiply(np.split(weight, 2, axis=1)[0], 3) + lo_weight = np.split(weight, 2, axis=1)[1] + + weight = np.reshape((hi_weight + lo_weight), weight_num // 2) + + weight = weight + 4 + weight = np.reshape(weight, (M, K // 2)).astype(np.uint8) + weight = weight.reshape((M // BM, BM, K // 2)).transpose(0, 2, 1) + weight = weight.reshape((M // BM, K // BY, BY // 2, BM)).transpose(0, 1, 3, 2) + weight = weight.reshape((M // BM, K // BY, BM // bm, bm, BY // 2)).transpose(0, 1, 2, 4, 3) + weight = weight.reshape((M // BM, K // BY, BM // bm, BY // by, by // 2, bm)).transpose(0, 1, 2, 3, 5, 4) + weight = weight.reshape((M // BM, K // BY, BM // bm, BY // by, bm, by // 2)) + weight_0 = weight[:, :, :, :, :, 0] + weight_1 = weight[:, :, :, :, :, 1] + weight_0 = weight_0 << 4 + weight_1 = weight_1 + weight = weight_0 + weight_1 + weight = weight.reshape((M * K // bm // by, bm // 8, 8)) + weight[:, [0, 1, 2, 3], :] = weight[:, [0, 2, 1, 3], :] + weight = weight.reshape(M * K // bm // by, bm) + + for i in range(weight.shape[0]): + final_weight.append(weight[i, :]) + +def preprocess_three_weights_tl2(M, K, weight_num, BM, BY, bm, by, weight, final_weight): + weight = np.reshape(weight, (weight_num // 3, 3)) + split_weights = np.split(weight, 3, axis=1) + first_weight = np.multiply(split_weights[0], 9) + second_weight = np.multiply(split_weights[1], 3) + third_weight = split_weights[2] + + weight = np.reshape((first_weight + second_weight + third_weight), weight_num // 3) + sign_weight = np.sign(weight) + 2 + sign_weight = np.where(sign_weight > 1, 0, sign_weight) + weight = np.abs(weight) + + weight = np.reshape(weight, (M, K // 3)).astype(np.uint8) + sign_weight = np.reshape(sign_weight, (M, K // 3)).astype(np.uint8) + + weight = weight.reshape((M // BM, BM, K // 3)).transpose(0, 2, 1) + weight = weight.reshape((M // BM, K // BY, BY // 3, BM)).transpose(0, 1, 3, 2) + weight = weight.reshape((M // BM, K // BY, BM // bm, bm, BY // 3)).transpose(0, 1, 2, 4, 3) + weight = weight.reshape((M // BM, K // BY, BM // bm, BY // by, by // 3, bm)).transpose(0, 1, 2, 3, 5, 4) + weight = weight.reshape((M // BM, K // BY, BM // bm, BY // by, bm, by // 3)) + weight_0 = weight[:, :, :, :, :, 0] + weight_1 = weight[:, :, :, :, :, 1] + weight_0 = weight_0 << 4 + weight_1 = weight_1 + weight = weight_0 + weight_1 + weight = weight.reshape((M * K // bm // by, bm // 8, 8)) + weight[:, [0, 1, 2, 3], :] = weight[:, [0, 2, 1, 3], :] + weight = weight.reshape(M * K // bm // by, bm) + + for i in range(weight.shape[0]): + final_weight.append(weight[i, :]) + + sign_weight = sign_weight.reshape((M // BM, BM, K // 3)).transpose(0, 2, 1) + sign_weight = sign_weight.reshape((M // BM, K // BY, BY // 3, BM)).transpose(0, 1, 3, 2) + sign_weight = sign_weight.reshape((M // BM, K // BY, BM // bm, bm, BY // 3)).transpose(0, 1, 2, 4, 3) + sign_weight = sign_weight.reshape((M // BM, K // BY, BM // bm, BY // (by * 4), by // 3 * 4, bm)).transpose(0, 1, 2, 3, 5, 4) + sign_weight = sign_weight.reshape((M // BM, K // BY, BM // bm, BY // (by * 4), bm, by // 3 * 4)).transpose(0, 1, 2, 3, 5, 4) + sign_weight = sign_weight.reshape((M // BM, K // BY, BM // bm, BY // (by * 4), by // 3 * 8, bm // 2)).astype(np.uint16) + combine_weight = np.zeros((M // BM, K // BY, BM // bm, BY // (by * 4), bm // 2), dtype=np.uint16) + for i in range(16): + temp_weight = sign_weight[:, :, :, :, i, :] << 15 - i + combine_weight += temp_weight + combine_weight = combine_weight.view(np.uint8) + combine_weight = combine_weight.reshape((M * K // bm // (by * 4)), bm) + + for i in range(combine_weight.shape[0]): + final_weight.append(combine_weight[i, :]) + +def preprocess_weights_tl2( + w: np.ndarray, + bits = 2, + g = 4, +) -> Tuple[np.ndarray, np.ndarray]: + from configparser import ConfigParser + config = ConfigParser() + + M, K = w.shape + weight = w + weight = np.where(np.abs(weight) < 1e-6, 0, weight).astype(np.float32) + weight = np.sign(weight) + weight_num = np.prod(weight.shape) + + config.read('include/kernel_config.ini') + BM = -1 + BY = -1 + bm = -1 + + for kernel in config.sections(): + if int(config.get(kernel, 'm')) == M and int(config.get(kernel, 'k')) == K: + BM = int(config.get(kernel, 'bm')) + BY = int(config.get(kernel, 'bk')) + bm = int(config.get(kernel, 'bmm')) + by = 192 // bm + break + + if BM == -1: + raise NotImplementedError + + if (weight.shape[1] % BY != 0): + slice_k_idx = weight.shape[1] - weight.shape[1] % BY + slice_weights = np.split(weight, [slice_k_idx], axis=1) + three_weight = slice_weights[0] + two_weight = slice_weights[1] + else: + three_weight = weight + + final_weight = [] + + preprocess_three_weights_tl2(three_weight.shape[0], + three_weight.shape[1], + three_weight.shape[0] * three_weight.shape[1], + BM, + BY, + bm, + by, + three_weight, + final_weight) + + if (weight.shape[1] % BY != 0): + preprocess_two_weights_tl2( two_weight.shape[0], + two_weight.shape[1], + two_weight.shape[0] * two_weight.shape[1], + BM, + 32, + 32, + 4, + two_weight, + final_weight) + weight = np.array(final_weight, dtype=np.uint8).reshape(-1) + weight = np.pad(weight, (0, (K - 256) * M // 3 * 5 // 8 + 256 * M // 2 * 4 // 8 - + weight.shape[0]), mode='constant', constant_values=0) + return weight + +def transform_to_tl1(x: np.ndarray): + scale = np.max(np.abs(x)) + # res = np.round(x / scale + 2).astype(np.uint8) + res = preprocess_weights_tl1(x) + return res, scale + +def transform_to_tl2(x: np.ndarray): + scale = np.max(np.abs(x)) + # res = np.round(x / scale + 2).astype(np.uint8) + res = preprocess_weights_tl2(x) + return res, scale + + +def read_model_config(model_dir: str) -> dict[str, Any]: + config = os.path.join(model_dir, "config.json") + if not os.path.exists(config): + raise FileNotFoundError(f"Model config file not found: {config}") + with open(config, "r") as f: + return json.load(f) + +@Model.register("LLaMAForCausalLM", "LlamaForCausalLM", "MistralForCausalLM", "MixtralForCausalLM") +class LlamaModel(Model): + model_arch = gguf.MODEL_ARCH.LLAMA + + def set_vocab(self): + try: + self._set_vocab_sentencepiece() + except FileNotFoundError: + try: + self._set_vocab_llama_hf() + except (FileNotFoundError, TypeError): + # Llama 3 + self._set_vocab_gpt2() + + # Apply to CodeLlama only (and ignore for Llama 3 with a vocab size of 128256) + if self.hparams.get("vocab_size", 32000) == 32016: + special_vocab = gguf.SpecialVocab( + self.dir_model, load_merges=False, + special_token_types = ['prefix', 'suffix', 'middle', 'eot'] + ) + special_vocab._set_special_token("prefix", 32007) + special_vocab._set_special_token("suffix", 32008) + special_vocab._set_special_token("middle", 32009) + special_vocab._set_special_token("eot", 32010) + special_vocab.add_to_gguf(self.gguf_writer) + + def write_tensors(self): + max_name_len = max(len(s) for _, s in self.tensor_map.mapping.values()) + len(".weight,") + + scale_map = dict() + + for name, data_torch in self.get_tensors(): + if name.endswith(("weight_scale")): + data_torch = data_torch.to(torch.float32) + name = name.replace(".weight_scale", "") + scale_map[name] = data_torch + + for name, data_torch in self.get_tensors(): + if name.endswith(("weight_scale")): + continue + # we don't need these + if name.endswith((".attention.masked_bias", ".attention.bias", ".rotary_emb.inv_freq")): + continue + + old_dtype = data_torch.dtype + + # convert any unsupported data types to float32 + if data_torch.dtype not in (torch.float16, torch.float32): + data_torch = data_torch.to(torch.float32) + + if name.replace(".weight", "") in scale_map: + data_torch = data_torch.to(torch.uint8) + origin_shape = data_torch.shape + shift = torch.tensor([0, 2, 4, 6], dtype=torch.uint8).reshape((4, *(1 for _ in range(len(origin_shape))))) + data_torch = data_torch.unsqueeze(0).expand((4, *origin_shape)) >> shift + data_torch = data_torch & 3 + data_torch = (data_torch.float() - 1).reshape((origin_shape[0] * 4, *origin_shape[1:])) + data_torch = data_torch / scale_map[name.replace(".weight", "")].float() + + # use the first number-like part of the tensor name as the block id + bid = None + for part in name.split("."): + if part.isdecimal(): + bid = int(part) + break + + # old gguf bf16 not implenmented + # if data_torch.dtype == torch.bfloat16: + # for new_name, data in ((n, d) for n, d in self.modify_tensors(data_torch, name, bid)): + # shape_str = f"{{{', '.join(str(n) for n in reversed(data.shape))}}}" + # # n_dims is implicit in the shape + # logger.info(f"{f'%-{max_name_len}s' % f'{new_name},'} {old_dtype}, shape = {shape_str}") + # self.gguf_writer.add_tensor(new_name, data, raw_shape=data.shape, raw_dtype=data.dtype) + # continue + + for new_name, data in ((n, d.squeeze().numpy()) for n, d in self.modify_tensors(data_torch, name, bid)): + data: np.ndarray = data # type hint + data_shape = data.shape + n_dims = len(data.shape) + data_dtype = data.dtype + data_qtype: gguf.GGMLQuantizationType | None = None + + # when both are True, f32 should win + # extra_f32 = self.extra_f32_tensors(name, new_name, bid, n_dims) + # extra_f16 = self.extra_f16_tensors(name, new_name, bid, n_dims) + extra_f32 = False + extra_f16 = False + + # Most of the codebase that takes in 1D tensors or norms only handles F32 tensors + # Conditions should closely match those in llama_model_quantize_internal in llama.cpp + extra_f32 = any(cond for cond in ( + extra_f32, + n_dims == 1, + new_name.endswith("_norm.weight"), + )) + + # Some tensor types are always in float32 + tensors_f32 = [ + gguf.MODEL_TENSOR.FFN_GATE_INP, + gguf.MODEL_TENSOR.FFN_GATE_INP, + gguf.MODEL_TENSOR.POS_EMBD, + gguf.MODEL_TENSOR.TOKEN_TYPES, + ] + if not args.quant_embd: + tensors_f32.append(gguf.MODEL_TENSOR.TOKEN_EMBD) + extra_f32 = extra_f32 or any(self.match_model_tensor_name(new_name, key, bid) for key in tensors_f32) + + # if f16 desired, convert any float32 2-dim weight tensors to float16 + extra_f16 = any(cond for cond in ( + extra_f16, + (name.endswith(".weight") and n_dims >= 2), + )) + + suit_i2 = True + if name.endswith('lm_head.weight') or name.endswith('norm.weight') or name.endswith('embed_tokens.weight'): + suit_i2 = False + + i2_scale = None + if self.ftype != gguf.GGMLQuantizationType.F32 and extra_f16 and not extra_f32: + if self.ftype == gguf.GGMLQuantizationType.TL1 and suit_i2: + data, i2_scale = transform_to_tl1(data) + assert data.dtype == np.uint8 + assert i2_scale.dtype == np.float32 + data_qtype = gguf.GGMLQuantizationType.TL1 + elif self.ftype == gguf.GGMLQuantizationType.TL2 and suit_i2: + data, i2_scale = transform_to_tl2(data) + assert data.dtype == np.uint8 + assert i2_scale.dtype == np.float32 + data_qtype = gguf.GGMLQuantizationType.TL2 + else: # default to float16 for quantized tensors + if data_dtype != np.float16: + data = data.astype(np.float16) + data_qtype = gguf.GGMLQuantizationType.F16 + + if data_qtype is None: # by default, convert to float32 + if data_dtype != np.float32: + data = data.astype(np.float32) + data_qtype = gguf.GGMLQuantizationType.F32 + + shape = data_shape + # shape = gguf.quant_shape_from_byte_shape(data.shape, data_qtype) if data.dtype == np.uint8 else data.shape + # reverse shape to make it similar to the internal ggml dimension order + shape_str = f"{{{', '.join(str(n) for n in reversed(shape))}}}" + + # n_dims is implicit in the shape + logger.info(f"{f'%-{max_name_len}s' % f'{new_name},'} {old_dtype} --> {data_qtype.name}, shape = {shape_str}") + + self.gguf_writer.add_tensor(new_name, data, raw_shape=shape, raw_dtype=data_qtype) + if i2_scale is not None: + self.gguf_writer.add_tensor(new_name + "_scale", i2_scale, raw_dtype=gguf.GGMLQuantizationType.F32) + + + def set_gguf_parameters(self): + super().set_gguf_parameters() + hparams = self.hparams + self.gguf_writer.add_vocab_size(hparams["vocab_size"]) + + if "head_dim" in hparams: + rope_dim = hparams["head_dim"] + else: + rope_dim = hparams["hidden_size"] // hparams["num_attention_heads"] + self.gguf_writer.add_rope_dimension_count(rope_dim) + + if self.hparams.get("rope_scaling") is not None and "factor" in self.hparams["rope_scaling"]: + if self.hparams["rope_scaling"].get("type") == "linear": + self.gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.LINEAR) + self.gguf_writer.add_rope_scaling_factor(self.hparams["rope_scaling"]["factor"]) + + tokenizer_config_file = self.dir_model / 'tokenizer_config.json' + if tokenizer_config_file.is_file(): + with open(tokenizer_config_file, "r", encoding="utf-8") as f: + tokenizer_config_json = json.load(f) + if "add_prefix_space" in tokenizer_config_json: + self.gguf_writer.add_add_space_prefix(tokenizer_config_json["add_prefix_space"]) + + # Apply to granite small models only + if self.hparams.get("vocab_size", 32000) == 49152: + self.gguf_writer.add_add_bos_token(False) + + @staticmethod + def permute(weights: Tensor, n_head: int, n_head_kv: int | None): + if n_head_kv is not None and n_head != n_head_kv: + n_head = n_head_kv + return (weights.reshape(n_head, 2, weights.shape[0] // n_head // 2, *weights.shape[1:]) + .swapaxes(1, 2) + .reshape(weights.shape)) + + _experts: list[dict[str, Tensor]] | None = None + + def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]: + n_head = self.hparams["num_attention_heads"] + n_kv_head = self.hparams.get("num_key_value_heads") + + if name.endswith(("q_proj.weight", "q_proj.bias")): + data_torch = LlamaModel.permute(data_torch, n_head, n_head) + if name.endswith(("k_proj.weight", "k_proj.bias")): + data_torch = LlamaModel.permute(data_torch, n_head, n_kv_head) + + # process the experts separately + if name.find("block_sparse_moe.experts") != -1: + n_experts = self.hparams["num_local_experts"] + + assert bid is not None + + if self._experts is None: + self._experts = [{} for _ in range(self.block_count)] + + self._experts[bid][name] = data_torch + + if len(self._experts[bid]) >= n_experts * 3: + tensors: list[tuple[str, Tensor]] = [] + + # merge the experts into a single 3d tensor + for wid in ["w1", "w2", "w3"]: + datas: list[Tensor] = [] + + for xid in range(n_experts): + ename = f"model.layers.{bid}.block_sparse_moe.experts.{xid}.{wid}.weight" + datas.append(self._experts[bid][ename]) + del self._experts[bid][ename] + + data_torch = torch.stack(datas, dim=0) + + merged_name = f"layers.{bid}.feed_forward.experts.{wid}.weight" + + new_name = self.map_tensor_name(merged_name) + + tensors.append((new_name, data_torch)) + return tensors + else: + return [] + + return [(self.map_tensor_name(name), data_torch)] + + def generate_extra_tensors(self) -> Iterable[tuple[str, Tensor]]: + if rope_scaling := self.find_hparam(["rope_scaling"], optional=True): + if rope_scaling.get("rope_type", '').lower() == "llama3": + base = self.hparams.get("rope_theta", 10000.0) + dim = self.hparams.get("head_dim", self.hparams["hidden_size"] // self.hparams["num_attention_heads"]) + freqs = 1.0 / (base ** (torch.arange(0, dim, 2, dtype=torch.float32) / dim)) + + factor = rope_scaling.get("factor", 8.0) + low_freq_factor = rope_scaling.get("low_freq_factor", 1.0) + high_freq_factor = rope_scaling.get("high_freq_factor", 4.0) + old_context_len = self.hparams.get("original_max_position_embeddings", 8192) + + low_freq_wavelen = old_context_len / low_freq_factor + high_freq_wavelen = old_context_len / high_freq_factor + assert low_freq_wavelen != high_freq_wavelen + + rope_factors = [] + for freq in freqs: + wavelen = 2 * math.pi / freq + if wavelen < high_freq_wavelen: + rope_factors.append(1) + elif wavelen > low_freq_wavelen: + rope_factors.append(factor) + else: + smooth = (old_context_len / wavelen - low_freq_factor) / (high_freq_factor - low_freq_factor) + rope_factors.append(1 / ((1 - smooth) / factor + smooth)) + + yield (self.format_tensor_name(gguf.MODEL_TENSOR.ROPE_FREQS), torch.tensor(rope_factors, dtype=torch.float32)) + + def prepare_tensors(self): + super().prepare_tensors() + + if self._experts is not None: + # flatten `list[dict[str, Tensor]]` into `list[str]` + experts = [k for d in self._experts for k in d.keys()] + if len(experts) > 0: + raise ValueError(f"Unprocessed experts: {experts}") + + +@Model.register("BitnetForCausalLM") +class BitnetModel(Model): + model_arch = gguf.MODEL_ARCH.BITNET + + def set_vocab(self): + self._set_vocab_sentencepiece() + + def set_gguf_parameters(self): + super().set_gguf_parameters() + + self.gguf_writer.add_vocab_size(self.hparams["vocab_size"]) + + self.gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.LINEAR) + self.gguf_writer.add_rope_scaling_factor(1.0) + + def weight_quant(self, weight): + dtype = weight.dtype + weight = weight.float() + s = 1 / weight.abs().mean().clamp(min=1e-5) + result = (weight * s).round().clamp(-1, 1) / s + return result.type(dtype) + + def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]: + # quant weight to i2 (in fp16) + if name.endswith(("q_proj.weight", "k_proj.weight", "v_proj.weight", + "down_proj.weight", "up_proj.weight", "gate_proj.weight", + "o_proj.weight")): + data_torch = self.weight_quant(data_torch) + + return [(self.map_tensor_name(name), data_torch)] + + def write_tensors(self): + max_name_len = max(len(s) for _, s in self.tensor_map.mapping.values()) + len(".weight,") + + for name, data_torch in self.get_tensors(): + # we don't need these + if name.endswith((".attention.masked_bias", ".attention.bias", ".rotary_emb.inv_freq")): + continue + + old_dtype = data_torch.dtype + + # convert any unsupported data types to float32 + if data_torch.dtype not in (torch.float16, torch.float32): + data_torch = data_torch.to(torch.float32) + + # use the first number-like part of the tensor name as the block id + bid = None + for part in name.split("."): + if part.isdecimal(): + bid = int(part) + break + + for new_name, data in ((n, d.squeeze().numpy()) for n, d in self.modify_tensors(data_torch, name, bid)): + data: np.ndarray = data # type hint + data_shape = data.shape + n_dims = len(data.shape) + data_dtype = data.dtype + data_qtype: gguf.GGMLQuantizationType | None = None + + # when both are True, f32 should win + # extra_f32 = self.extra_f32_tensors(name, new_name, bid, n_dims) + # extra_f16 = self.extra_f16_tensors(name, new_name, bid, n_dims) + extra_f32 = False + extra_f16 = False + + # Most of the codebase that takes in 1D tensors or norms only handles F32 tensors + # Conditions should closely match those in llama_model_quantize_internal in llama.cpp + extra_f32 = any(cond for cond in ( + extra_f32, + n_dims == 1, + new_name.endswith("_norm.weight"), + )) + + # Some tensor types are always in float32 + tensors_f32 = [ + gguf.MODEL_TENSOR.FFN_GATE_INP, + gguf.MODEL_TENSOR.FFN_GATE_INP, + gguf.MODEL_TENSOR.POS_EMBD, + gguf.MODEL_TENSOR.TOKEN_TYPES, + ] + if not args.quant_embd: + tensors_f32.append(gguf.MODEL_TENSOR.TOKEN_EMBD) + extra_f32 = extra_f32 or any(self.match_model_tensor_name(new_name, key, bid) for key in tensors_f32) + + # if f16 desired, convert any float32 2-dim weight tensors to float16 + extra_f16 = any(cond for cond in ( + extra_f16, + (name.endswith(".weight") and n_dims >= 2), + )) + + suit_i2 = True + if name.endswith('embed_tokens.weight') or name.endswith('norm.weight'): + suit_i2 = False + + i2_scale = None + if self.ftype != gguf.GGMLQuantizationType.F32 and extra_f16 and not extra_f32: + if self.ftype == gguf.GGMLQuantizationType.TL1 and suit_i2: + data, i2_scale = transform_to_tl1(data) + assert data.dtype == np.uint8 + assert i2_scale.dtype == np.float32 + data_qtype = gguf.GGMLQuantizationType.TL1 + elif self.ftype == gguf.GGMLQuantizationType.TL2 and suit_i2: + data, i2_scale = transform_to_tl2(data) + assert data.dtype == np.uint8 + assert i2_scale.dtype == np.float32 + data_qtype = gguf.GGMLQuantizationType.TL2 + else: # default to float16 for quantized tensors + if data_dtype != np.float16: + data = data.astype(np.float16) + data_qtype = gguf.GGMLQuantizationType.F16 + + if data_qtype is None: # by default, convert to float32 + if data_dtype != np.float32: + data = data.astype(np.float32) + data_qtype = gguf.GGMLQuantizationType.F32 + + shape = data_shape + # shape = gguf.quant_shape_from_byte_shape(data.shape, data_qtype) if data.dtype == np.uint8 else data.shape + # reverse shape to make it similar to the internal ggml dimension order + shape_str = f"{{{', '.join(str(n) for n in reversed(shape))}}}" + + # n_dims is implicit in the shape + logger.info(f"{f'%-{max_name_len}s' % f'{new_name},'} {old_dtype} --> {data_qtype.name}, shape = {shape_str}") + + self.gguf_writer.add_tensor(new_name, data, raw_shape=shape, raw_dtype=data_qtype) + if i2_scale is not None: + self.gguf_writer.add_tensor(new_name + "_scale", i2_scale, raw_dtype=gguf.GGMLQuantizationType.F32) + + +###### CONVERSION LOGIC ###### + + +ftype_map = { + "f32": gguf.GGMLQuantizationType.F32, + "f16": gguf.GGMLQuantizationType.F16, + "tl1" : gguf.GGMLQuantizationType.TL1, + "tl2" : gguf.GGMLQuantizationType.TL2, +} + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Convert a huggingface model to a GGML compatible file") + parser.add_argument( + "--vocab-only", action="store_true", + help="extract only the vocab", + ) + parser.add_argument( + "--awq-path", type=Path, default=None, + help="Path to scale awq cache file") + parser.add_argument( + "--outfile", type=Path, + help="path to write to; default: based on input", + ) + parser.add_argument( + "--outtype", type=str, choices=ftype_map.keys(), default="f32", + help="output format - use f32 for float32, f16 for float16", + ) + parser.add_argument("--bigendian", action="store_true", help="model is executed on big endian machine") + parser.add_argument( + "model", type=Path, + help="directory containing model file", + ) + parser.add_argument("--use-temp-file", action="store_true", help="use the tempfile library while processing (helpful when running out of memory, process killed)") + parser.add_argument("--model-name", type=str, default=None, help="name of the model") + parser.add_argument("--verbose", action="store_true", help="increase output verbosity") + parser.add_argument("--quant-embd", action="store_true", help="quantize the embedding layer") + + return parser.parse_args() + + +def main() -> None: + logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO) + + dir_model = args.model + + if not dir_model.is_dir(): + logger.error(f'Error: {args.model} is not a directory') + sys.exit(1) + + if args.outfile is not None: + fname_out = args.outfile + else: + # output in the same directory as the model by default + fname_out = dir_model / f'ggml-model-{args.outtype}.gguf' + + logger.info(f"Loading model: {dir_model.name}") + + hparams = Model.load_hparams(dir_model) + + with torch.inference_mode(): + model_class = Model.from_model_architecture(hparams["architectures"][0]) + model_instance = model_class(dir_model, ftype_map[args.outtype], fname_out, args.bigendian, args.use_temp_file) + + logger.info("Set model parameters") + model_instance.set_gguf_parameters() + + logger.info("Set model tokenizer") + model_instance.set_vocab() + + if args.vocab_only: + logger.info(f"Exporting model vocab to '{fname_out}'") + model_instance.write_vocab() + else: + logger.info(f"Exporting model to '{fname_out}'") + model_instance.write() + + logger.info(f"Model successfully exported to '{fname_out}'") + + +if __name__ == '__main__': + args = parse_args() + + main() diff --git a/utils/convert.py b/utils/convert.py new file mode 100644 index 0000000..5938c42 --- /dev/null +++ b/utils/convert.py @@ -0,0 +1,1711 @@ +#!/usr/bin/env python3 +from __future__ import annotations + +import logging +import argparse +import concurrent.futures +import enum +import faulthandler +import functools +import itertools +import json +import math +import mmap +import os +import pickle +import re +import signal +import struct +import sys +import textwrap +import time +import zipfile +from abc import ABC, abstractmethod +from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor +from dataclasses import dataclass +from pathlib import Path +from typing import TYPE_CHECKING, Any, Callable, ClassVar, IO, Iterable, Literal, Protocol, TypeVar, runtime_checkable, Tuple + +import configparser +import numpy as np +from sentencepiece import SentencePieceProcessor + +if 'NO_LOCAL_GGUF' not in os.environ: + sys.path.insert(1, str(Path(__file__).parent / 'gguf-py')) +import gguf + +if TYPE_CHECKING: + from typing_extensions import Self, TypeAlias + +logger = logging.getLogger("convert") + +if hasattr(faulthandler, 'register') and hasattr(signal, 'SIGUSR1'): + faulthandler.register(signal.SIGUSR1) + +NDArray: TypeAlias = 'np.ndarray[Any, Any]' + +ARCH = gguf.MODEL_ARCH.BITNET + +DEFAULT_CONCURRENCY = 16 + +ADDED_TOKENS_FILE = 'added_tokens.json' +FAST_TOKENIZER_FILE = 'tokenizer.json' + +# +# data types +# + + +@dataclass(frozen=True) +class DataType: + name: str + dtype: np.dtype[Any] + valid_conversions: list[str] + + def elements_to_bytes(self, n_elements: int) -> int: + return n_elements * self.dtype.itemsize + + +@dataclass(frozen=True) +class UnquantizedDataType(DataType): + pass + + +DT_F16 = UnquantizedDataType('F16', dtype = np.dtype(np.float16), valid_conversions = ['F32', 'Q8_0']) +DT_F32 = UnquantizedDataType('F32', dtype = np.dtype(np.float32), valid_conversions = ['F16', 'Q8_0', 'I2']) +DT_I32 = UnquantizedDataType('I32', dtype = np.dtype(np.int16), valid_conversions = []) +DT_BF16 = UnquantizedDataType('BF16', dtype = np.dtype(np.uint16), valid_conversions = ['F32', 'F16', 'Q8_0']) +DT_I2 = UnquantizedDataType('I2', dtype = np.dtype(np.uint8), valid_conversions = ['F32', 'F16', 'Q8_0']) + +@dataclass(frozen=True) +class QuantizedDataType(DataType): + block_size: int + quantized_dtype: np.dtype[Any] + ggml_type: gguf.GGMLQuantizationType + + def quantize(self, arr: NDArray) -> NDArray: + raise NotImplementedError(f'Quantization for {self.name} not implemented') + + def elements_to_bytes(self, n_elements: int) -> int: + assert n_elements % self.block_size == 0, f'Invalid number of elements {n_elements} for {self.name} with block size {self.block_size}' + return self.quantized_dtype.itemsize * (n_elements // self.block_size) + + +@dataclass(frozen=True) +class Q8_0QuantizedDataType(QuantizedDataType): + # Mini Q8_0 quantization in Python! + def quantize(self, arr: NDArray) -> NDArray: + assert arr.size % self.block_size == 0 and arr.size != 0, f'Bad array size {arr.size}' + assert arr.dtype == np.float32, f'Bad array type {arr.dtype}' + n_blocks = arr.size // self.block_size + blocks = arr.reshape((n_blocks, self.block_size)) + # Much faster implementation of block quantization contributed by @Cebtenzzre + + def quantize_blocks_q8_0(blocks: NDArray) -> Iterable[tuple[Any, Any]]: + d = abs(blocks).max(axis = 1) / np.float32(127) + with np.errstate(divide = 'ignore'): + qs = (blocks / d[:, None]).round() + qs[d == 0] = 0 + yield from zip(d, qs) + return np.fromiter(quantize_blocks_q8_0(blocks), count = n_blocks, dtype = self.quantized_dtype) + +# @dataclass(frozen=True) +# class TransformedDataType(DataType): +# transformed_dtype: np.dtype[Any] + +# def transform(self, arr: NDArray) -> NDArray: +# raise NotImplementedError(f'Transformation for {self.name} not implemented') + +# @dataclass(frozen=True) +# class I2TransformedDataType(TransformedDataType): +# # fp32 -> int2 (dtype is uint8) +# def transform(self, arr: NDArray) -> NDArray: +# assert(np.prod(arr.shape) % 4 == 0) +# # Much faster implementation of block quantization contributed by @Cebtenzzre + +# def transform_to_i2(x : NDArray) -> Iterable[tuple[Any, Any]]: +# x_num = np.prod(x.shape) +# x = np.reshape(x, x_num) +# for i in range(x_num): +# if x[i] != 0: +# d = x[i] +# break +# x = np.divide(x, d) +# x = x.astype(np.uint8) +# x = np.reshape(x, [x.shape[0] // 4, 4]) +# keep_bit = {0:192, 1:48, 2:12, 3:3} +# ans = np.zeros([x_num // 4], dtype=np.uint8) +# for i in range(4): +# x_bit_col = x[:, i] +# x_bit_shift = np.left_shift(x_bit_col, 6 - i * 2) +# x_bit_shift = np.bitwise_and(x_bit_shift, keep_bit[i]) +# ans = np.bitwise_or(ans, x_bit_shift) +# return ans +# return transform_to_i2(arr) + +# def elements_to_bytes(self, n_elements: int) -> int: +# return n_elements // 4 + + +DT_Q8_0 = Q8_0QuantizedDataType('Q8_0', + dtype = np.dtype(np.float32), valid_conversions = [], + ggml_type = gguf.GGMLQuantizationType.Q8_0, block_size = 32, + quantized_dtype = np.dtype([('d', ' DataType: + dt = GGML_FILE_TYPE_TO_DATA_TYPE.get(self) + if dt is None: + raise ValueError(self) + # Convert all 1D tensors to F32. Most of the codebase that takes in 1D tensors only handles F32 tensors, and most of the outputs tensors are F32. + # Also The 1d tensors aren't much of a performance/size issue. So instead of having to have separate F32 and F16 implementations of both, just convert everything to F32 for now. + dt = dt if len(tensor.shape) > 1 else DT_F32 + if name == "token_embd.weight" or name == "output.weight": + dt = DT_F32 + return dt + + +GGML_FILE_TYPE_TO_DATA_TYPE: dict[GGMLFileType, DataType] = { + GGMLFileType.AllF32 : DT_F32, + GGMLFileType.MostlyF16 : DT_F16, + GGMLFileType.MostlyI2 : DT_I2, + GGMLFileType.MostlyQ8_0: DT_Q8_0, +} + +# +# hparams loading +# + + +@dataclass +class Params: + n_vocab: int + n_embd: int + n_layer: int + n_ctx: int + n_ff: int + n_head: int + n_head_kv: int + n_experts: int | None = None + n_experts_used: int | None = None + f_norm_eps: float | None = None + + rope_scaling_type: gguf.RopeScalingType | None = None + f_rope_freq_base: float | None = None + f_rope_scale: float | None = None + n_orig_ctx: int | None = None + rope_finetuned: bool | None = None + + ftype: GGMLFileType | None = None + + # path to the directory containing the model files + path_model: Path | None = None + + @staticmethod + def guessed(model: LazyModel) -> Params: + # try transformer naming first + n_vocab, n_embd = model["model.embed_tokens.weight"].shape if "model.embed_tokens.weight" in model else model["tok_embeddings.weight"].shape + + # try transformer naming first + if "model.layers.0.self_attn.q_proj.weight" in model: + n_layer = next(i for i in itertools.count() if f"model.layers.{i}.self_attn.q_proj.weight" not in model) + elif "model.layers.0.self_attn.W_pack.weight" in model: # next: try baichuan naming + n_layer = next(i for i in itertools.count() if f"model.layers.{i}.self_attn.W_pack.weight" not in model) + else: + n_layer = next(i for i in itertools.count() if f"layers.{i}.attention.wq.weight" not in model) + + if n_layer < 1: + msg = """\ + failed to guess 'n_layer'. This model is unknown or unsupported. + Suggestion: provide 'config.json' of the model in the same directory containing model files.""" + raise KeyError(textwrap.dedent(msg)) + + n_head = n_embd // 128 # guessed + n_mult = 256 # guessed + + # TODO: verify this + n_ff = int(2 * (4 * n_embd) / 3) + n_ff = n_mult * ((n_ff + n_mult - 1) // n_mult) + + return Params( + n_vocab = n_vocab, + n_embd = n_embd, + n_layer = n_layer, + n_ctx = -1, + n_ff = n_ff, + n_head = n_head, + n_head_kv = n_head, + f_norm_eps = 1e-5, + ) + + @staticmethod + def loadHFTransformerJson(model: LazyModel, config_path: Path) -> Params: + with open(config_path) as f: + config = json.load(f) + + rope_scaling_type = f_rope_scale = n_orig_ctx = rope_finetuned = None + rope_scaling = config.get("rope_scaling") + + if rope_scaling is not None and (typ := rope_scaling.get("type")): + rope_factor = rope_scaling.get("factor") + f_rope_scale = rope_factor + if typ == "linear": + rope_scaling_type = gguf.RopeScalingType.LINEAR + elif typ == "yarn": + rope_scaling_type = gguf.RopeScalingType.YARN + n_orig_ctx = rope_scaling['original_max_position_embeddings'] + rope_finetuned = rope_scaling['finetuned'] + else: + raise NotImplementedError(f'Unknown rope scaling type: {typ}') + + if "max_sequence_length" in config: + n_ctx = config["max_sequence_length"] + elif "max_position_embeddings" in config: + n_ctx = config["max_position_embeddings"] + else: + msg = """\ + failed to guess 'n_ctx'. This model is unknown or unsupported. + Suggestion: provide 'config.json' of the model in the same directory containing model files.""" + raise KeyError(textwrap.dedent(msg)) + + n_experts = None + n_experts_used = None + + if "num_local_experts" in config: + n_experts = config["num_local_experts"] + n_experts_used = config["num_experts_per_tok"] + + return Params( + n_vocab = config["vocab_size"], + n_embd = config["hidden_size"], + n_layer = config["num_hidden_layers"], + n_ctx = n_ctx, + n_ff = config["intermediate_size"], + n_head = (n_head := config["num_attention_heads"]), + n_head_kv = config.get("num_key_value_heads", n_head), + n_experts = n_experts, + n_experts_used = n_experts_used, + f_norm_eps = config["rms_norm_eps"], + f_rope_freq_base = config.get("rope_theta"), + rope_scaling_type = rope_scaling_type, + f_rope_scale = f_rope_scale, + n_orig_ctx = n_orig_ctx, + rope_finetuned = rope_finetuned, + ) + + # LLaMA v2 70B params.json + # {"dim": 8192, "multiple_of": 4096, "ffn_dim_multiplier": 1.3, "n_heads": 64, "n_kv_heads": 8, "n_layers": 80, "norm_eps": 1e-05, "vocab_size": -1} + @staticmethod + def loadOriginalParamsJson(model: LazyModel, config_path: Path) -> Params: + with open(config_path) as f: + config = json.load(f) + + n_experts = None + n_experts_used = None + f_rope_freq_base = None + + # hack to determine LLaMA v1 vs v2 vs CodeLlama + if config.get("moe"): + # Mixtral + n_ctx = 32768 + elif config.get("rope_theta") == 1000000: + # CodeLlama + n_ctx = 16384 + elif config["norm_eps"] == 1e-05: + # LLaMA v2 + n_ctx = 4096 + else: + # LLaMA v1 + n_ctx = 2048 + + if "layers.0.feed_forward.w1.weight" in model: + n_ff = model["layers.0.feed_forward.w1.weight"].shape[0] + + if config.get("moe"): + n_ff = model["layers.0.feed_forward.experts.0.w1.weight"].shape[0] + n_experts = config["moe"]["num_experts"] + n_experts_used = config["moe"]["num_experts_per_tok"] + f_rope_freq_base = 1e6 + + return Params( + n_vocab = model["tok_embeddings.weight"].shape[0], + n_embd = config["dim"], + n_layer = config["n_layers"], + n_ctx = n_ctx, + n_ff = n_ff, + n_head = (n_head := config["n_heads"]), + n_head_kv = config.get("n_kv_heads", n_head), + n_experts = n_experts, + n_experts_used = n_experts_used, + f_norm_eps = config["norm_eps"], + f_rope_freq_base = config.get("rope_theta", f_rope_freq_base), + ) + + @staticmethod + def load(model_plus: ModelPlus) -> Params: + hf_config_path = model_plus.paths[0].parent / "config.json" + orig_config_path = model_plus.paths[0].parent / "params.json" + + if hf_config_path.exists(): + params = Params.loadHFTransformerJson(model_plus.model, hf_config_path) + elif orig_config_path.exists(): + params = Params.loadOriginalParamsJson(model_plus.model, orig_config_path) + elif model_plus.format != 'none': + params = Params.guessed(model_plus.model) + else: + raise ValueError('Cannot guess params when model format is none') + + params.path_model = model_plus.paths[0].parent + + return params + + +# +# vocab +# + +@runtime_checkable +class BaseVocab(Protocol): + tokenizer_model: ClassVar[str] + name: ClassVar[str] + + +class NoVocab(BaseVocab): + tokenizer_model = "no_vocab" + name = "no_vocab" + + def __repr__(self) -> str: + return "" + + +@runtime_checkable +class Vocab(BaseVocab, Protocol): + vocab_size: int + added_tokens_dict: dict[str, int] + added_tokens_list: list[str] + fname_tokenizer: Path + + def __init__(self, base_path: Path): ... + def all_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: ... + + +class BpeVocab(Vocab): + tokenizer_model = "gpt2" + name = "bpe" + + def __init__(self, base_path: Path): + added_tokens: dict[str, int] = {} + + if (fname_tokenizer := base_path / 'vocab.json').exists(): + # "slow" tokenizer + with open(fname_tokenizer, encoding="utf-8") as f: + self.vocab = json.load(f) + + try: + # FIXME: Verify that added tokens here _cannot_ overlap with the main vocab. + with open(base_path / ADDED_TOKENS_FILE, encoding="utf-8") as f: + added_tokens = json.load(f) + except FileNotFoundError: + pass + else: + # "fast" tokenizer + fname_tokenizer = base_path / FAST_TOKENIZER_FILE + + # if this fails, FileNotFoundError propagates to caller + with open(fname_tokenizer, encoding="utf-8") as f: + tokenizer_json = json.load(f) + + tokenizer_model: dict[str, Any] = tokenizer_json['model'] + if ( + tokenizer_model['type'] != 'BPE' or tokenizer_model.get('byte_fallback', False) + or tokenizer_json['decoder']['type'] != 'ByteLevel' + ): + raise FileNotFoundError('Cannot find GPT-2 BPE tokenizer') + + self.vocab = tokenizer_model["vocab"] + + if (added := tokenizer_json.get('added_tokens')) is not None: + # Added tokens here can be duplicates of the main vocabulary. + added_tokens = {item['content']: item['id'] + for item in added + if item['content'] not in self.vocab} + + vocab_size = len(self.vocab) + expected_ids = list(range(vocab_size, vocab_size + len(added_tokens))) + actual_ids = sorted(added_tokens.values()) + if expected_ids != actual_ids: + expected_end_id = vocab_size + len(actual_ids) - 1 + raise ValueError(f"Expected the {len(actual_ids)} added token ID(s) to be sequential in the range " + f"{vocab_size} - {expected_end_id}; got {actual_ids}") + + items = sorted(added_tokens.items(), key=lambda text_idx: text_idx[1]) + self.added_tokens_dict = added_tokens + self.added_tokens_list = [text for (text, idx) in items] + self.vocab_size_base = vocab_size + self.vocab_size = self.vocab_size_base + len(self.added_tokens_list) + self.fname_tokenizer = fname_tokenizer + + def bpe_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: + reverse_vocab = {id: encoded_tok for encoded_tok, id in self.vocab.items()} + + for i, _ in enumerate(self.vocab): + yield reverse_vocab[i], 0.0, gguf.TokenType.NORMAL + + def added_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: + for text in self.added_tokens_list: + score = -1000.0 + yield text.encode("utf-8"), score, gguf.TokenType.CONTROL + + def all_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: + yield from self.bpe_tokens() + yield from self.added_tokens() + + def __repr__(self) -> str: + return f"" + + +class SentencePieceVocab(Vocab): + tokenizer_model = "llama" + name = "spm" + + def __init__(self, base_path: Path): + added_tokens: dict[str, int] = {} + if (fname_tokenizer := base_path / 'tokenizer.model').exists(): + # normal location + try: + with open(base_path / ADDED_TOKENS_FILE, encoding="utf-8") as f: + added_tokens = json.load(f) + except FileNotFoundError: + pass + elif not (fname_tokenizer := base_path.parent / 'tokenizer.model').exists(): + # not found in alternate location either + raise FileNotFoundError('Cannot find tokenizer.model') + + self.sentencepiece_tokenizer = SentencePieceProcessor(str(fname_tokenizer)) + vocab_size = self.sentencepiece_tokenizer.vocab_size() + + new_tokens = {id: piece for piece, id in added_tokens.items() if id >= vocab_size} + expected_new_ids = list(range(vocab_size, vocab_size + len(new_tokens))) + actual_new_ids = sorted(new_tokens.keys()) + + if expected_new_ids != actual_new_ids: + raise ValueError(f"Expected new token IDs {expected_new_ids} to be sequential; got {actual_new_ids}") + + # Token pieces that were added to the base vocabulary. + self.added_tokens_dict = added_tokens + self.added_tokens_list = [new_tokens[id] for id in actual_new_ids] + self.vocab_size_base = vocab_size + self.vocab_size = self.vocab_size_base + len(self.added_tokens_list) + self.fname_tokenizer = fname_tokenizer + + def sentencepiece_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: + tokenizer = self.sentencepiece_tokenizer + for i in range(tokenizer.vocab_size()): + piece = tokenizer.id_to_piece(i) + text = piece.encode("utf-8") + score: float = tokenizer.get_score(i) + + toktype = gguf.TokenType.NORMAL + if tokenizer.is_unknown(i): + toktype = gguf.TokenType.UNKNOWN + if tokenizer.is_control(i): + toktype = gguf.TokenType.CONTROL + + # NOTE: I think added_tokens are user defined. + # ref: https://github.com/google/sentencepiece/blob/master/src/sentencepiece_model.proto + # if tokenizer.is_user_defined(i): toktype = gguf.TokenType.USER_DEFINED + + if tokenizer.is_unused(i): + toktype = gguf.TokenType.UNUSED + if tokenizer.is_byte(i): + toktype = gguf.TokenType.BYTE + + yield text, score, toktype + + def added_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: + for text in self.added_tokens_list: + score = -1000.0 + yield text.encode("utf-8"), score, gguf.TokenType.USER_DEFINED + + def all_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: + yield from self.sentencepiece_tokens() + yield from self.added_tokens() + + def __repr__(self) -> str: + return f"" + + +class LlamaHfVocab(Vocab): + tokenizer_model = "llama" + name = "hfft" + + def __init__(self, base_path: Path): + fname_tokenizer = base_path / FAST_TOKENIZER_FILE + # if this fails, FileNotFoundError propagates to caller + with open(fname_tokenizer, encoding='utf-8') as f: + tokenizer_json = json.load(f) + + # pre-check so we know if we need transformers + tokenizer_model: dict[str, Any] = tokenizer_json['model'] + is_llama3 = ( + tokenizer_model['type'] == 'BPE' and tokenizer_model.get('ignore_merges', False) + and not tokenizer_model.get('byte_fallback', True) + ) + if is_llama3: + raise TypeError('Llama 3 must be converted with BpeVocab') + + if not is_llama3 and ( + tokenizer_model['type'] != 'BPE' or not tokenizer_model.get('byte_fallback', False) + or tokenizer_json['decoder']['type'] != 'Sequence' + ): + raise FileNotFoundError('Cannot find Llama BPE tokenizer') + + try: + from transformers import AutoTokenizer + except ImportError as e: + raise ImportError( + "To use LlamaHfVocab, please install the `transformers` package. " + "You can install it with `pip install transformers`." + ) from e + + # Allow the tokenizer to default to slow or fast versions. + # Explicitly set tokenizer to use local paths. + self.tokenizer = AutoTokenizer.from_pretrained( + base_path, + cache_dir=base_path, + local_files_only=True, + ) + assert self.tokenizer.is_fast # assume tokenizer.json is used + + # Initialize lists and dictionaries for added tokens + self.added_tokens_list = [] + self.added_tokens_dict = dict() + self.added_tokens_ids = set() + + # Process added tokens + for tok, tokidx in sorted( + self.tokenizer.get_added_vocab().items(), key=lambda x: x[1] + ): + # Only consider added tokens that are not in the base vocabulary + if tokidx >= self.tokenizer.vocab_size: + self.added_tokens_list.append(tok) + self.added_tokens_dict[tok] = tokidx + self.added_tokens_ids.add(tokidx) + + # Store special tokens and their IDs + self.specials = { + tok: self.tokenizer.get_vocab()[tok] + for tok in self.tokenizer.all_special_tokens + } + self.special_ids = set(self.tokenizer.all_special_ids) + + # Set vocabulary sizes + self.vocab_size_base = self.tokenizer.vocab_size + self.vocab_size = self.vocab_size_base + len(self.added_tokens_list) + + self.fname_tokenizer = fname_tokenizer + + def hf_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: + reverse_vocab = { + id: encoded_tok for encoded_tok, id in self.tokenizer.get_vocab().items() + } + + for token_id in range(self.vocab_size_base): + # Skip processing added tokens here + if token_id in self.added_tokens_ids: + continue + + # Convert token text to bytes + token_text = reverse_vocab[token_id].encode("utf-8") + + # Yield token text, score, and type + yield token_text, self.get_token_score(token_id), self.get_token_type( + token_id, token_text, self.special_ids # Reuse already stored special IDs + ) + + def get_token_type(self, token_id: int, token_text: bytes, special_ids: set[int]) -> gguf.TokenType: + # Special case for byte tokens + if re.fullmatch(br"<0x[0-9A-Fa-f]{2}>", token_text): + return gguf.TokenType.BYTE + + # Determine token type based on whether it's a special token + return gguf.TokenType.CONTROL if token_id in special_ids else gguf.TokenType.NORMAL + + def get_token_score(self, token_id: int) -> float: + # Placeholder for actual logic to determine the token's score + # This needs to be implemented based on specific requirements + return -1000.0 # Default score + + def added_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: + for text in self.added_tokens_list: + if text in self.specials: + toktype = self.get_token_type(self.specials[text], b'', self.special_ids) + score = self.get_token_score(self.specials[text]) + else: + toktype = gguf.TokenType.USER_DEFINED + score = -1000.0 + + yield text.encode("utf-8"), score, toktype + + def has_newline_token(self): + return "<0x0A>" in self.tokenizer.vocab or "\n" in self.tokenizer.vocab + + def all_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: + yield from self.hf_tokens() + yield from self.added_tokens() + + def __repr__(self) -> str: + return f"" + + +# +# data loading +# TODO: reuse (probably move to gguf.py?) +# + + +def permute(weights: NDArray, n_head: int, n_head_kv: int) -> NDArray: + if n_head_kv is not None and n_head != n_head_kv: + n_head = n_head_kv + return (weights.reshape(n_head, 2, weights.shape[0] // n_head // 2, *weights.shape[1:]) + .swapaxes(1, 2) + .reshape(weights.shape)) + + +class Tensor(ABC): + ndarray: NDArray + data_type: DataType + + @abstractmethod + def astype(self, data_type: DataType) -> Self: ... + @abstractmethod + def permute(self, n_head: int, n_head_kv: int) -> Self: ... + @abstractmethod + def permute_part(self, n_part: int, n_head: int, n_head_kv: int) -> Self: ... + @abstractmethod + def part(self, n_part: int) -> Self: ... + @abstractmethod + def to_ggml(self) -> GGMLCompatibleTensor: ... + + +def bf16_to_fp32(bf16_arr: np.ndarray[Any, np.dtype[np.uint16]]) -> NDArray: + assert bf16_arr.dtype == np.uint16, f"Input array should be of dtype uint16, but got {bf16_arr.dtype}" + fp32_arr = bf16_arr.astype(np.uint32) << 16 + return fp32_arr.view(np.float32) + +def preprocess_weights( + w: np.ndarray, + bits = 2, + g = 4, +) -> Tuple[np.ndarray, np.ndarray]: + M, K = w.shape + + cf=configparser.ConfigParser() + cf.read("./build/kcfg.ini") + secs=cf.sections() + for sec in secs: + sec_splits = str(sec).split('_') + if sec_splits[-4] == "m" + str(M*2) and sec_splits[-3] == "k" + str(K): + bm = int(cf.get(sec, 'bm')) + kfactor = int(cf.get(sec, 'kfactor')) + simd_n_in = int(cf.get(sec, 'simd_n_in')) + simd_n_out = int(cf.get(sec, 'simd_n_out')) + break + + M = M * bits + ngroups_per_elem = 8 // g + + # (M // bits, K, bits) + w = np.stack([(w >> ib) & 1 for ib in range(bits)], axis=-1) + # print(w) + # (M // bits, K, bits) -> (M // bits, bits, K) -> (M // bits, bits, K) -> (M // bits, bits, K // g, g) + w = w.transpose(0, 2, 1).reshape(M // bits, bits, K // g, g) + w = sum([(w[:, :, :, ig] << ig) for ig in range(g)]) + # print(w) + # 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23, 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31 + # for bits=3 + # bit0: [0, 8), bit1: [8, 16), bit2: [16, 24), bit0: [24, 32) + # (M // bits // simd_n_float16, bits, simd_n_float16, K // g) + w = w.reshape(M // bits // simd_n_out, simd_n_out, bits, K // g).transpose(0, 2, 1, 3) + mgroup = ngroups_per_elem * simd_n_in + w = w.reshape(M // mgroup, ngroups_per_elem, simd_n_in, K // g).transpose(0, 2, 1, 3) + # 0 1 2 3 4 5 + w = w.reshape(M // bm, bm // mgroup, simd_n_in, ngroups_per_elem, K // g // kfactor, kfactor).transpose(0, 4, 1, 5, 2, 3) + w = sum([(w[:, :, :, :, :, ng] << (ng * g)) for ng in range(ngroups_per_elem)]) + w = w.reshape(M // bm, K // g // kfactor, bm // mgroup, kfactor, simd_n_in) + # input size of current TVM API + w = w.reshape(M // bm, K // g, bm // ngroups_per_elem) + + return w + +def transform_to_i2(x : NDArray): + x_num = np.prod(x.shape) + tile_x = np.reshape(x, x_num) + scale = 1 + for i in range(x_num): + if tile_x[i] != 0: + scale = tile_x[i] + break + tile_x = np.divide(tile_x, scale) + tile_x = (tile_x.astype(np.int8) + 2).astype(np.uint8) + ans = np.reshape(tile_x, x.shape) + return ans, scale + +class UnquantizedTensor(Tensor): + def __init__(self, ndarray: NDArray, i2_scale: NDArray = None): + assert isinstance(ndarray, np.ndarray) + self.ndarray = ndarray + self.data_type = NUMPY_TYPE_TO_DATA_TYPE[ndarray.dtype] + self.i2_scale = i2_scale + + def astype(self, data_type: DataType) -> UnquantizedTensor: + dtype = data_type.dtype + if self.data_type == DT_BF16: + self.ndarray = bf16_to_fp32(self.ndarray) + if dtype == np.uint8: + self.ndarray, self.i2_scale = transform_to_i2(self.ndarray) + return UnquantizedTensor(self.ndarray.astype(dtype), self.i2_scale) + + def to_ggml(self) -> Self: + return self + + def permute_part(self, n_part: int, n_head: int, n_head_kv: int) -> UnquantizedTensor: + r = self.ndarray.shape[0] // 3 + return UnquantizedTensor(permute(self.ndarray[r * n_part : r * n_part + r, ...], n_head, n_head_kv)) + + def part(self, n_part: int) -> UnquantizedTensor: + r = self.ndarray.shape[0] // 3 + return UnquantizedTensor(self.ndarray[r * n_part : r * n_part + r, ...]) + + def permute(self, n_head: int, n_head_kv: int) -> UnquantizedTensor: + return UnquantizedTensor(permute(self.ndarray, n_head, n_head_kv)) + + +def load_unquantized(lazy_tensor: LazyTensor, expected_dtype: Any = None, convert: bool = False) -> NDArray: + tensor = lazy_tensor.load() + assert isinstance(tensor, UnquantizedTensor) + + # double-check: + actual_shape = list(tensor.ndarray.shape) + assert actual_shape == lazy_tensor.shape, (actual_shape, lazy_tensor.shape) + if expected_dtype is not None and expected_dtype != tensor.ndarray.dtype: + if convert: + tensor.ndarray = tensor.ndarray.astype(expected_dtype) + else: + raise ValueError(f'expected this tensor to have dtype {expected_dtype}, got {tensor.ndarray.dtype}') + + return tensor.ndarray + + +GGMLCompatibleTensor = UnquantizedTensor + + +@dataclass +class LazyTensor: + _load: Callable[[], Tensor] + shape: list[int] + data_type: DataType + description: str + + def load(self) -> Tensor: + ret = self._load() + # Should be okay if it maps to the same numpy type? + assert ret.data_type == self.data_type or (self.data_type.dtype == ret.data_type.dtype), \ + (self.data_type, ret.data_type, self.description) + return ret + + def astype(self, data_type: DataType) -> LazyTensor: + self.validate_conversion_to(data_type) + + def load() -> Tensor: + return self.load().astype(data_type) + return LazyTensor(load, self.shape, data_type, f'convert({data_type}) {self.description}') + + def validate_conversion_to(self, data_type: DataType) -> None: + if data_type != self.data_type and data_type.name not in self.data_type.valid_conversions: + raise ValueError(f'Cannot validate conversion from {self.data_type} to {data_type}.') + + +LazyModel: TypeAlias = 'dict[str, LazyTensor]' + + +@dataclass +class ModelPlus: + model: LazyModel + paths: list[Path] # Where this was read from. + format: Literal['ggml', 'torch', 'safetensors', 'none'] + vocab: BaseVocab | None # For GGML models (which have vocab built in), the vocab. + + +def merge_sharded(models: list[LazyModel]) -> LazyModel: + # Original LLaMA models have each file contain one part of each tensor. + # Use a dict instead of a set to preserve order. + names = {name: None for model in models for name in model} + + def convert(name: str) -> LazyTensor: + lazy_tensors = [model[name] for model in models] + if len(lazy_tensors) == 1: + # only one file; don't go through this procedure since there might + # be quantized tensors + return lazy_tensors[0] + if len(lazy_tensors[0].shape) == 1: + # the tensor is just duplicated in every file + return lazy_tensors[0] + if name.startswith('tok_embeddings.') or \ + name.endswith('.attention.wo.weight') or \ + name.endswith('.feed_forward.w2.weight'): + # split by columns + axis = 1 + else: + # split by rows + axis = 0 + concatenated_shape = list(lazy_tensors[0].shape) + concatenated_shape[axis] = sum(tensor.shape[axis] for tensor in lazy_tensors) + + def load() -> UnquantizedTensor: + ndarrays = [load_unquantized(tensor) for tensor in lazy_tensors] + concatenated = np.concatenate(ndarrays, axis=axis) + return UnquantizedTensor(concatenated) + description = 'concatenated[[' + '] | ['.join(lt.description for lt in lazy_tensors) + ']]' + return LazyTensor(load, concatenated_shape, lazy_tensors[0].data_type, description) + return {name: convert(name) for name in names} + + +def merge_multifile_models(models_plus: list[ModelPlus]) -> ModelPlus: + formats = set(mp.format for mp in models_plus) + assert len(formats) == 1, "different formats?" + format = formats.pop() + paths = [path for mp in models_plus for path in mp.paths] + # Use the first non-None vocab, if any. + try: + vocab = next(mp.vocab for mp in models_plus if mp.vocab is not None) + except StopIteration: + vocab = None + + if any("model.embed_tokens.weight" in mp.model for mp in models_plus): + # Transformers models put different tensors in different files, but + # don't split individual tensors between files. + model: LazyModel = {} + for mp in models_plus: + model.update(mp.model) + else: + model = merge_sharded([mp.model for mp in models_plus]) + + return ModelPlus(model, paths, format, vocab) # pytype: disable=wrong-arg-types + + +def permute_lazy(lazy_tensor: LazyTensor, n_head: int, n_head_kv: int) -> LazyTensor: + def load() -> Tensor: + return lazy_tensor.load().permute(n_head, n_head_kv) + return LazyTensor(load, lazy_tensor.shape, lazy_tensor.data_type, f'permute({n_head}, {n_head_kv}) ' + lazy_tensor.description) + + +def permute_part_lazy(lazy_tensor: LazyTensor, n_part: int, n_head: int, n_head_kv: int) -> LazyTensor: + def load() -> Tensor: + return lazy_tensor.load().permute_part(n_part, n_head, n_head_kv) + s = lazy_tensor.shape.copy() + s[0] = s[0] // 3 + return LazyTensor(load, s, lazy_tensor.data_type, f'permute({n_head}, {n_head_kv}) ' + lazy_tensor.description) + + +def part_lazy(lazy_tensor: LazyTensor, n_part: int) -> LazyTensor: + def load() -> Tensor: + return lazy_tensor.load().part(n_part) + s = lazy_tensor.shape.copy() + s[0] = s[0] // 3 + return LazyTensor(load, s, lazy_tensor.data_type, 'part ' + lazy_tensor.description) + + +def pack_experts_lazy(lazy_tensors: list[LazyTensor]) -> LazyTensor: + def load() -> Tensor: + tensors = [lazy_tensor.load() for lazy_tensor in lazy_tensors] + return UnquantizedTensor(np.array([tensor.ndarray for tensor in tensors])) + s = lazy_tensors[0].shape.copy() + s.insert(0, len(lazy_tensors)) + return LazyTensor(load, s, lazy_tensors[0].data_type, 'pack_experts ' + ' | '.join(lt.description for lt in lazy_tensors)) + + +# Functionality that simulates `torch.load` but where individual tensors are +# only loaded into memory on demand, not all at once. +# PyTorch can't do this natively as of time of writing: +# - https://github.com/pytorch/pytorch/issues/64327 +# This allows us to de-shard without multiplying RAM usage, and also +# conveniently drops the PyTorch dependency (though we still need numpy). + + +@dataclass +class LazyStorageKind: + data_type: DataType + + +@dataclass +class LazyStorage: + load: Callable[[int, int], NDArray] + kind: LazyStorageKind + description: str + + +class LazyUnpickler(pickle.Unpickler): + def __init__(self, fp: IO[bytes], data_base_path: str, zip_file: zipfile.ZipFile): + super().__init__(fp) + self.data_base_path = data_base_path + self.zip_file = zip_file + + def persistent_load(self, pid: Any) -> Any: + assert pid[0] == 'storage' + assert isinstance(pid[1], LazyStorageKind) + data_type = pid[1].data_type + filename_stem = pid[2] + filename = f'{self.data_base_path}/{filename_stem}' + info = self.zip_file.getinfo(filename) + + def load(offset: int, elm_count: int) -> NDArray: + dtype = data_type.dtype + with self.zip_file.open(info) as fp: + fp.seek(offset * dtype.itemsize) + size = elm_count * dtype.itemsize + data = fp.read(size) + assert len(data) == size + return np.frombuffer(data, dtype) + description = f'storage data_type={data_type} path-in-zip={filename} path={self.zip_file.filename}' + return LazyStorage(load=load, kind=pid[1], description=description) + + @staticmethod + def lazy_rebuild_tensor_v2(storage: Any, storage_offset: Any, size: Any, stride: Any, + requires_grad: Any, backward_hooks: Any, metadata: Any = None) -> LazyTensor: + assert isinstance(storage, LazyStorage) + + def load() -> UnquantizedTensor: + elm_count = stride[0] * size[0] + return UnquantizedTensor(storage.load(storage_offset, elm_count).reshape(size)) + description = f'pickled storage_offset={storage_offset} in {storage.description}' + return LazyTensor(load, list(size), storage.kind.data_type, description) + + @staticmethod + def rebuild_from_type_v2(func, new_type, args, state): + return func(*args) + + CLASSES = { + # getattr used here as a workaround for mypy not being smart enough to determine + # the staticmethods have a __func__ attribute. + ('torch._tensor', '_rebuild_from_type_v2'): getattr(rebuild_from_type_v2, '__func__'), + ('torch._utils', '_rebuild_tensor_v2'): getattr(lazy_rebuild_tensor_v2, '__func__'), + ('torch', 'BFloat16Storage'): LazyStorageKind(DT_BF16), + ('torch', 'HalfStorage'): LazyStorageKind(DT_F16), + ('torch', 'FloatStorage'): LazyStorageKind(DT_F32), + ('torch', 'IntStorage'): LazyStorageKind(DT_I32), + ('torch', 'Tensor'): LazyTensor, + } + + def find_class(self, module: str, name: str) -> Any: + if not module.startswith('torch'): + return super().find_class(module, name) + return self.CLASSES[(module, name)] + + +def lazy_load_torch_file(outer_fp: IO[bytes], path: Path) -> ModelPlus: + zf = zipfile.ZipFile(outer_fp) + pickle_paths = [name for name in zf.namelist() if name.endswith('.pkl')] + assert len(pickle_paths) == 1, pickle_paths + pickle_fp = zf.open(pickle_paths[0], 'r') + unpickler = LazyUnpickler(pickle_fp, + data_base_path=pickle_paths[0][:-4], + zip_file=zf) + model = unpickler.load() + if 'model' in model: model = model['model'] + as_dict = dict(model.items()) + return ModelPlus(model=as_dict, paths=[path], format='torch', vocab=None) + + +def lazy_load_safetensors_file(fp: IO[bytes], path: Path) -> ModelPlus: + header_size, = struct.unpack(' LazyTensor: + data_type = SAFETENSORS_DATA_TYPES[info['dtype']] + numpy_dtype = data_type.dtype + shape: list[int] = info['shape'] + begin, end = info['data_offsets'] + assert 0 <= begin <= end <= len(byte_buf) + assert end - begin == math.prod(shape) * numpy_dtype.itemsize + buf = byte_buf[begin:end] + + def load() -> UnquantizedTensor: + return UnquantizedTensor(np.frombuffer(buf, dtype=numpy_dtype).reshape(shape)) + description = f'safetensors begin={begin} end={end} type={data_type} path={path}' + return LazyTensor(load, shape, data_type, description) + model = {name: convert(info) for (name, info) in header.items() if name != '__metadata__'} + return ModelPlus(model=model, paths=[path], format='safetensors', vocab=None) + + +def must_read(fp: IO[bytes], length: int) -> bytes: + ret = fp.read(length) + if len(ret) < length: + raise EOFError("unexpectedly reached end of file") + return ret + + +@functools.lru_cache(maxsize=None) +def lazy_load_file(path: Path) -> ModelPlus: + fp = open(path, 'rb') + first8 = fp.read(8) + fp.seek(0) + if first8[:2] == b'PK': + # A zip file, i.e. PyTorch format + return lazy_load_torch_file(fp, path) + elif struct.unpack(' Iterable[Out]: + '''Parallel map, but with backpressure. If the caller doesn't call `next` + fast enough, this will stop calling `func` at some point rather than + letting results pile up in memory. Specifically, there is a max of one + output value buffered per thread.''' + if concurrency < 2: + yield from map(func, iterable) + # Not reached. + iterable = iter(iterable) + executor_class: type[ThreadPoolExecutor] | type[ProcessPoolExecutor] + if use_processpool_executor: + executor_class = ProcessPoolExecutor + else: + executor_class = ThreadPoolExecutor + with executor_class(max_workers=max_workers) as executor: + futures: list[concurrent.futures.Future[Out]] = [] + done = False + for _ in range(concurrency): + try: + futures.append(executor.submit(func, next(iterable))) + except StopIteration: + done = True + break + + while futures: + result = futures.pop(0).result() + while not done and len(futures) < concurrency: + try: + futures.append(executor.submit(func, next(iterable))) + except StopIteration: + done = True + break + yield result + + +def check_vocab_size(params: Params, vocab: BaseVocab, pad_vocab: bool = False) -> None: + # Handle special case where the model's vocab size is not set + if params.n_vocab == -1: + raise ValueError( + "The model's vocab size is set to -1 in params.json. Please update it manually." + + (f" Maybe {vocab.vocab_size}?" if isinstance(vocab, Vocab) else ""), + ) + if not isinstance(vocab, Vocab): + return # model has no vocab + + # Check for a vocab size mismatch + if params.n_vocab == vocab.vocab_size: + logger.warning("Ignoring added_tokens.json since model matches vocab size without it.") + return + + if pad_vocab and params.n_vocab > vocab.vocab_size: + pad_count = params.n_vocab - vocab.vocab_size + logger.debug( + f"Padding vocab with {pad_count} token(s) - through " + ) + for i in range(1, pad_count + 1): + vocab.added_tokens_dict[f""] = -1 + vocab.added_tokens_list.append(f"") + vocab.vocab_size = params.n_vocab + return + + msg = f"Vocab size mismatch (model has {params.n_vocab}, but {vocab.fname_tokenizer} has {vocab.vocab_size})." + if vocab.vocab_size < params.n_vocab < vocab.vocab_size + 20: + msg += f" Most likely you are missing added_tokens.json (should be in {vocab.fname_tokenizer.parent})." + if vocab.vocab_size < params.n_vocab: + msg += " Add the --pad-vocab option and try again." + + raise ValueError(msg) + + +class OutputFile: + def __init__(self, fname_out: Path, endianess:gguf.GGUFEndian = gguf.GGUFEndian.LITTLE): + self.gguf = gguf.GGUFWriter(fname_out, gguf.MODEL_ARCH_NAMES[ARCH], endianess=endianess) + + def add_meta_arch(self, params: Params) -> None: + name = "LLaMA" + + # TODO: better logic to determine model name + if params.n_ctx == 4096: + name = "LLaMA v2" + elif params.path_model is not None: + name = str(params.path_model.parent).split('/')[-1] + + self.gguf.add_name (name) + self.gguf.add_vocab_size (params.n_vocab) + self.gguf.add_context_length (params.n_ctx) + self.gguf.add_embedding_length (params.n_embd) + self.gguf.add_block_count (params.n_layer) + self.gguf.add_feed_forward_length (params.n_ff) + self.gguf.add_rope_dimension_count(params.n_embd // params.n_head) + self.gguf.add_head_count (params.n_head) + self.gguf.add_head_count_kv (params.n_head_kv) + + if params.n_experts: + self.gguf.add_expert_count(params.n_experts) + + if params.n_experts_used: + self.gguf.add_expert_used_count(params.n_experts_used) + + if params.f_norm_eps: + self.gguf.add_layer_norm_rms_eps(params.f_norm_eps) + else: + raise ValueError('f_norm_eps is None') + + if params.f_rope_freq_base is not None: + self.gguf.add_rope_freq_base(params.f_rope_freq_base) + + if params.rope_scaling_type: + assert params.f_rope_scale is not None + self.gguf.add_rope_scaling_type(params.rope_scaling_type) + self.gguf.add_rope_scaling_factor(params.f_rope_scale) + + if params.n_orig_ctx is not None: + self.gguf.add_rope_scaling_orig_ctx_len(params.n_orig_ctx) + + if params.rope_finetuned is not None: + self.gguf.add_rope_scaling_finetuned(params.rope_finetuned) + + if params.ftype is not None: + self.gguf.add_file_type(params.ftype) + + def extract_vocabulary_from_model(self, vocab: Vocab) -> tuple[list[bytes], list[float], list[gguf.TokenType]]: + tokens = [] + scores = [] + toktypes = [] + + # NOTE: `all_tokens` returns the base vocabulary and added tokens + for text, score, toktype in vocab.all_tokens(): + tokens.append(text) + scores.append(score) + toktypes.append(toktype) + + assert len(tokens) == vocab.vocab_size + + return tokens, scores, toktypes + + def add_meta_vocab(self, vocab: Vocab) -> None: + # Ensure that tokenizer_model is added to the GGUF model + self.gguf.add_tokenizer_model(vocab.tokenizer_model) + + # Extract model vocabulary for model conversion + tokens, scores, toktypes = self.extract_vocabulary_from_model(vocab) + + # Add extracted token information for model conversion + self.gguf.add_token_list(tokens) + self.gguf.add_token_scores(scores) + self.gguf.add_token_types(toktypes) + + def add_meta_special_vocab(self, svocab: gguf.SpecialVocab) -> None: + svocab.add_to_gguf(self.gguf) + + def add_tensor_info(self, name: str, tensor: LazyTensor) -> None: + n_elements = int(np.prod(tensor.shape)) + raw_dtype = getattr(tensor.data_type, 'ggml_type', None) + data_type = getattr(tensor.data_type, 'quantized_type', None) or tensor.data_type.dtype + data_nbytes = tensor.data_type.elements_to_bytes(n_elements) + if tensor.data_type.name == "I2": + # i2 * n + scale (fp32) + # print(tensor.shape) + # print(data_nbytes) + data_nbytes = data_nbytes // 4 + 32 + # print(data_nbytes) + # scale_name = name.replace('.weight', '_scale.weight') + # scale_shape = [1] + # scale_data_type = np.float32 + # scale_nbytes = 4 + # self.gguf.add_tensor_info(scale_name, scale_shape, scale_data_type, scale_nbytes, raw_dtype=None) + self.gguf.add_tensor_info(name, tensor.shape, data_type, data_nbytes, raw_dtype=raw_dtype) + + def write_meta(self) -> None: + self.gguf.write_header_to_file() + self.gguf.write_kv_data_to_file() + + def write_tensor_info(self) -> None: + self.gguf.write_ti_data_to_file() + + def write_tensor_data(self, ftype: GGMLFileType, model: LazyModel, concurrency: int) -> None: + ndarrays_inner = bounded_parallel_map(OutputFile.do_item, model.items(), concurrency=concurrency) + if ftype == GGMLFileType.MostlyQ8_0: + ndarrays = bounded_parallel_map( + OutputFile.maybe_do_quantize, ndarrays_inner, concurrency=concurrency, max_workers=concurrency, + use_processpool_executor=True, + ) + # elif ftype == GGMLFileType.MostlyI2: + # # ndarrays = bounded_parallel_map( + # # OutputFile.maybe_do_transform, ndarrays_inner, concurrency=concurrency, max_workers=concurrency, use_processpool_executor=True,) + # ndarrays = map(OutputFile.maybe_do_transform, ndarrays_inner) + else: + ndarrays = map(OutputFile.maybe_do_quantize, ndarrays_inner) + + start = time.time() + for i, ((name, lazy_tensor), ndarray) in enumerate(zip(model.items(), ndarrays)): + ndarray, i2_scale = ndarray + elapsed = time.time() - start + size = ' x '.join(f"{dim:6d}" for dim in lazy_tensor.shape) + padi = len(str(len(model))) + logger.info( + f"[{i + 1:{padi}d}/{len(model)}] Writing tensor {name:38s} | size {size:16} | type {lazy_tensor.data_type.name:4} | T+{int(elapsed):4}" + ) + + if i2_scale is not None: + i2_scale = np.tile(i2_scale, 8) + ndarray = preprocess_weights(ndarray) + self.gguf.write_tensor_data(ndarray) + self.gguf.write_tensor_data(i2_scale) + else: + self.gguf.write_tensor_data(ndarray) + + def close(self) -> None: + self.gguf.close() + + @staticmethod + def write_vocab_only( + fname_out: Path, params: Params, vocab: Vocab, svocab: gguf.SpecialVocab, + endianess: gguf.GGUFEndian = gguf.GGUFEndian.LITTLE, pad_vocab: bool = False, + ) -> None: + check_vocab_size(params, vocab, pad_vocab=pad_vocab) + + of = OutputFile(fname_out, endianess=endianess) + + # meta data + of.add_meta_arch(params) + of.add_meta_vocab(vocab) + of.add_meta_special_vocab(svocab) + + of.write_meta() + + of.close() + + @staticmethod + def do_item(item: tuple[str, LazyTensor]) -> tuple[DataType, NDArray]: + name, lazy_tensor = item + tensor = lazy_tensor.load().to_ggml() + return (lazy_tensor.data_type, tensor.ndarray, tensor.i2_scale) + + @staticmethod + def maybe_do_quantize(item: tuple[DataType, NDArray]) -> NDArray: + dt, arr, i2_scale = item + if not isinstance(dt, QuantizedDataType): + return arr, i2_scale + return dt.quantize(arr) + + @staticmethod + def write_all( + fname_out: Path, ftype: GGMLFileType, params: Params, model: LazyModel, vocab: BaseVocab, svocab: gguf.SpecialVocab, + concurrency: int = DEFAULT_CONCURRENCY, endianess: gguf.GGUFEndian = gguf.GGUFEndian.LITTLE, + pad_vocab: bool = False, + ) -> None: + check_vocab_size(params, vocab, pad_vocab=pad_vocab) + + of = OutputFile(fname_out, endianess=endianess) + + # meta data + of.add_meta_arch(params) + if isinstance(vocab, Vocab): + of.add_meta_vocab(vocab) + of.add_meta_special_vocab(svocab) + else: # NoVocab + of.gguf.add_tokenizer_model(vocab.tokenizer_model) + + # tensor info + for name, lazy_tensor in model.items(): + of.add_tensor_info(name, lazy_tensor) + + of.write_meta() + of.write_tensor_info() + + # tensor data + of.write_tensor_data(ftype, model, concurrency) + + of.close() + + +def pick_output_type(model: LazyModel, output_type_str: str | None) -> GGMLFileType: + wq_type = model[gguf.TENSOR_NAMES[gguf.MODEL_TENSOR.ATTN_Q].format(bid=0) + ".weight"].data_type + + if output_type_str == "f32" or (output_type_str is None and wq_type in (DT_F32, DT_BF16)): + return GGMLFileType.AllF32 + if output_type_str == "f16" or (output_type_str is None and wq_type == DT_F16): + return GGMLFileType.MostlyF16 + if output_type_str == "q8_0": + return GGMLFileType.MostlyQ8_0 + if output_type_str == "i2": + return GGMLFileType.MostlyI2 + + name_to_type = {name: lazy_tensor.data_type for (name, lazy_tensor) in model.items()} + + raise ValueError(f"Unexpected combination of types: {name_to_type}") + + +def convert_to_output_type(model: LazyModel, output_type: GGMLFileType) -> LazyModel: + # for (name, tensor) in model.items(): + # print(name) + # print(tensor) + # print(output_type.type_for_tensor(name, tensor)) + # print(tensor.astype(output_type.type_for_tensor(name, tensor))) + return {name: tensor.astype(output_type.type_for_tensor(name, tensor)) + for (name, tensor) in model.items()} + + +def convert_model_names(model: LazyModel, params: Params, skip_unknown: bool) -> LazyModel: + tmap = gguf.TensorNameMap(ARCH, params.n_layer) + should_skip = set(gguf.MODEL_TENSOR_SKIP.get(ARCH, [])) + + tmp = model + + # merge experts into one tensor + if params.n_experts and params.n_experts > 0: + for i_l in range(params.n_layer): + for w in range(1, 4): + experts = [] + for e in range(params.n_experts): + if f"layers.{i_l}.feed_forward.experts.{e}.w{w}.weight" in model: + experts.append(model[f"layers.{i_l}.feed_forward.experts.{e}.w{w}.weight"]) + del tmp[f"layers.{i_l}.feed_forward.experts.{e}.w{w}.weight"] + elif f"model.layers.{i_l}.block_sparse_moe.experts.{e}.w{w}.weight" in model: + experts.append(model[f"model.layers.{i_l}.block_sparse_moe.experts.{e}.w{w}.weight"]) + del tmp[f"model.layers.{i_l}.block_sparse_moe.experts.{e}.w{w}.weight"] + else: + raise ValueError(f"Expert tensor not found: layers.{i_l}.feed_forward.experts.{e}.w{w}.weight") + tmp[f"layers.{i_l}.feed_forward.experts.w{w}.weight"] = pack_experts_lazy(experts) + + # HF models permut or pack some of the tensors, so we need to undo that + for i in itertools.count(): + if f"model.layers.{i}.self_attn.q_proj.weight" in model: + logger.debug(f"Permuting layer {i}") + tmp[f"model.layers.{i}.self_attn.q_proj.weight"] = permute_lazy(model[f"model.layers.{i}.self_attn.q_proj.weight"], params.n_head, params.n_head) + tmp[f"model.layers.{i}.self_attn.k_proj.weight"] = permute_lazy(model[f"model.layers.{i}.self_attn.k_proj.weight"], params.n_head, params.n_head_kv) + # tmp[f"model.layers.{i}.self_attn.v_proj.weight"] = model[f"model.layers.{i}.self_attn.v_proj.weight"] + elif f"model.layers.{i}.self_attn.W_pack.weight" in model: + logger.debug(f"Unpacking and permuting layer {i}") + tmp[f"model.layers.{i}.self_attn.q_proj.weight"] = permute_part_lazy(model[f"model.layers.{i}.self_attn.W_pack.weight"], 0, params.n_head, params.n_head) + tmp[f"model.layers.{i}.self_attn.k_proj.weight"] = permute_part_lazy(model[f"model.layers.{i}.self_attn.W_pack.weight"], 1, params.n_head, params.n_head_kv) + tmp[f"model.layers.{i}.self_attn.v_proj.weight"] = part_lazy (model[f"model.layers.{i}.self_attn.W_pack.weight"], 2) + del tmp[f"model.layers.{i}.self_attn.W_pack.weight"] + else: + break + + # check if is bitnet + if ARCH == 33: + del tmp['output.weight'] + + out: LazyModel = {} + for name, lazy_tensor in model.items(): + tensor_type, name_new = tmap.get_type_and_name(name, try_suffixes = (".weight", ".bias")) or (None, None) + if name_new is None: + if skip_unknown: + logger.warning(f"Unexpected tensor name: {name} - skipping") + continue + raise ValueError(f"Unexpected tensor name: {name}. Use --skip-unknown to ignore it (e.g. LLaVA)") + + if tensor_type in should_skip: + logger.debug(f"skipping tensor {name_new}") + continue + + logger.debug(f"{name:48s} -> {name_new:40s} | {lazy_tensor.data_type.name:6s} | {lazy_tensor.shape}") + out[name_new] = lazy_tensor + + return out + + +def nth_multifile_path(path: Path, n: int) -> Path | None: + '''Given any path belonging to a multi-file model (e.g. foo.bin.1), return + the nth path in the model. + ''' + # Support the following patterns: + patterns = [ + # - x.00.pth, x.01.pth, etc. + (r'\.[0-9]{2}\.pth$', f'.{n:02}.pth'), + # - x-00001-of-00002.bin, x-00002-of-00002.bin, etc. + (r'-[0-9]{5}-of-(.*)$', fr'-{n:05}-of-\1'), + # x.bin, x.bin.1, etc. + (r'(\.[0-9]+)?$', r'\1' if n == 0 else fr'\1.{n}') + ] + for regex, replacement in patterns: + if re.search(regex, path.name): + new_path = path.with_name(re.sub(regex, replacement, path.name)) + if new_path.exists(): + return new_path + return None + + +def find_multifile_paths(path: Path) -> list[Path]: + '''Given any path belonging to a multi-file model (e.g. foo.bin.1), return + the whole list of paths in the model. + ''' + ret: list[Path] = [] + for i in itertools.count(): + nth_path = nth_multifile_path(path, i) + if nth_path is None: + break + ret.append(nth_path) + if not ret: + # No matches. This should only happen if the file was named, e.g., + # foo.0, and there was no file named foo. Oh well, try to process it + # as a single file. + return [path] + return ret + + +def load_some_model(path: Path) -> ModelPlus: + '''Load a model of any supported format.''' + # Be extra-friendly and accept either a file or a directory: + if path.is_dir(): + # Check if it's a set of safetensors files first + globs = ["model-00001-of-*.safetensors", "model.safetensors", "consolidated.safetensors", "model-int2.pth"] + files = [file for glob in globs for file in path.glob(glob)] + if not files: + # Try the PyTorch patterns too, with lower priority + globs = ["consolidated.00.pth", "pytorch_model-00001-of-*.bin", "*.pt", "pytorch_model.bin"] + files = [file for glob in globs for file in path.glob(glob)] + if not files: + raise FileNotFoundError(f"Can't find model in directory {path}") + if len(files) > 1: + raise ValueError(f"Found multiple models in {path}, not sure which to pick: {files}") + path = files[0] + + paths = find_multifile_paths(path) + models_plus: list[ModelPlus] = [] + for path in paths: + logger.info(f"Loading model file {path}") + models_plus.append(lazy_load_file(path)) + + model_plus = merge_multifile_models(models_plus) + return model_plus + + +class VocabFactory: + _VOCAB_CLASSES: list[type[Vocab]] = [SentencePieceVocab, BpeVocab, LlamaHfVocab] + + def __init__(self, path: Path): + self.path = path + + def _create_special_vocab(self, vocab: BaseVocab, model_parent_path: Path) -> gguf.SpecialVocab: + load_merges = vocab.name == "bpe" + n_vocab = vocab.vocab_size if isinstance(vocab, Vocab) else None + return gguf.SpecialVocab( + model_parent_path, + load_merges=load_merges, + special_token_types=None, # Predetermined or passed as a parameter + n_vocab=n_vocab, + ) + + def _create_vocab_by_path(self, vocab_types: list[str]) -> Vocab: + vocab_classes: dict[str, type[Vocab]] = {cls.name: cls for cls in self._VOCAB_CLASSES} + selected_vocabs: dict[str, type[Vocab]] = {} + for vtype in vocab_types: + try: + selected_vocabs[vtype] = vocab_classes[vtype] + except KeyError: + raise ValueError(f"Unsupported vocabulary type {vtype}") from None + + for vtype, cls in selected_vocabs.items(): + try: + vocab = cls(self.path) + break + except FileNotFoundError: + pass # ignore unavailable tokenizers + else: + raise FileNotFoundError(f"Could not find a tokenizer matching any of {vocab_types}") + + logger.info(f"Loaded vocab file {vocab.fname_tokenizer!r}, type {vocab.name!r}") + return vocab + + def load_vocab(self, vocab_types: list[str] | None, model_parent_path: Path) -> tuple[BaseVocab, gguf.SpecialVocab]: + vocab: BaseVocab + if vocab_types is None: + vocab = NoVocab() + else: + vocab = self._create_vocab_by_path(vocab_types) + # FIXME: Respect --vocab-dir? + special_vocab = self._create_special_vocab( + vocab, + model_parent_path, + ) + return vocab, special_vocab + + +def default_outfile(model_paths: list[Path], file_type: GGMLFileType) -> Path: + namestr = { + GGMLFileType.AllF32: "f32", + GGMLFileType.MostlyF16: "f16", + GGMLFileType.MostlyQ8_0:"q8_0", + GGMLFileType.MostlyI2: "i2", + }[file_type] + ret = model_paths[0].parent / f"ggml-model-{namestr}.gguf" + if ret in model_paths: + logger.error( + f"Error: Default output path ({ret}) would overwrite the input. " + "Please explicitly specify a path using --outfile.") + sys.exit(1) + return ret + + +def do_dump_model(model_plus: ModelPlus) -> None: + print(f"model_plus.paths = {model_plus.paths!r}") # noqa: NP100 + print(f"model_plus.format = {model_plus.format!r}") # noqa: NP100 + print(f"model_plus.vocab = {model_plus.vocab!r}") # noqa: NP100 + for name, lazy_tensor in model_plus.model.items(): + print(f"{name}: shape={lazy_tensor.shape} type={lazy_tensor.data_type}; {lazy_tensor.description}") # noqa: NP100 + + +def main(args_in: list[str] | None = None) -> None: + output_choices = ["f32", "f16", "i2"] + if np.uint32(1) == np.uint32(1).newbyteorder("<"): + # We currently only support Q8_0 output on little endian systems. + output_choices.append("q8_0") + parser = argparse.ArgumentParser(description="Convert a LLaMA model to a GGML compatible file") + parser.add_argument("--dump", action="store_true", help="don't convert, just show what's in the model") + parser.add_argument("--dump-single", action="store_true", help="don't convert, just show what's in a single model file") + parser.add_argument("--vocab-only", action="store_true", help="extract only the vocab") + parser.add_argument("--no-vocab", action="store_true", help="store model without the vocab") + parser.add_argument("--outtype", choices=output_choices, help="output format - note: q8_0 may be very slow (default: f16 or f32 based on input)") + parser.add_argument("--vocab-dir", type=Path, help="directory containing tokenizer.model, if separate from model file") + parser.add_argument("--vocab-type", help="vocab types to try in order, choose from 'spm', 'bpe', 'hfft' (default: spm,hfft)", default="spm,hfft") + parser.add_argument("--outfile", type=Path, help="path to write to; default: based on input") + parser.add_argument("model", type=Path, help="directory containing model file, or model file itself (*.pth, *.pt, *.bin)") + parser.add_argument("--ctx", type=int, help="model training context (default: based on input)") + parser.add_argument("--concurrency", type=int, help=f"concurrency used for conversion (default: {DEFAULT_CONCURRENCY})", default=DEFAULT_CONCURRENCY) + parser.add_argument("--big-endian", action="store_true", help="model is executed on big endian machine") + parser.add_argument("--pad-vocab", action="store_true", help="add pad tokens when model vocab expects more than tokenizer metadata provides") + parser.add_argument("--skip-unknown", action="store_true", help="skip unknown tensor names instead of failing") + parser.add_argument("--verbose", action="store_true", help="increase output verbosity") + + args = parser.parse_args(args_in) + + if args.verbose: + logging.basicConfig(level=logging.DEBUG) + elif args.dump_single or args.dump: + # Avoid printing anything besides the dump output + logging.basicConfig(level=logging.WARNING) + else: + logging.basicConfig(level=logging.INFO) + + if args.no_vocab and args.vocab_only: + raise ValueError("--vocab-only does not make sense with --no-vocab") + + if args.dump_single: + model_plus = lazy_load_file(args.model) + do_dump_model(model_plus) + return + + if not args.vocab_only: + model_plus = load_some_model(args.model) + else: + model_plus = ModelPlus(model = {}, paths = [args.model / 'dummy'], format = 'none', vocab = None) + + if args.dump: + do_dump_model(model_plus) + return + + endianess = gguf.GGUFEndian.LITTLE + if args.big_endian: + endianess = gguf.GGUFEndian.BIG + + params = Params.load(model_plus) + if params.n_ctx == -1: + if args.ctx is None: + msg = """\ + The model doesn't have a context size, and you didn't specify one with --ctx + Please specify one with --ctx: + - LLaMA v1: --ctx 2048 + - LLaMA v2: --ctx 4096""" + parser.error(textwrap.dedent(msg)) + params.n_ctx = args.ctx + + if args.outtype: + params.ftype = { + "f32": GGMLFileType.AllF32, + "f16": GGMLFileType.MostlyF16, + "i2" : GGMLFileType.MostlyI2, + "q8_0": GGMLFileType.MostlyQ8_0, + }[args.outtype] + + logger.info(f"params = {params}") + + model_parent_path = model_plus.paths[0].parent + vocab_path = Path(args.vocab_dir or args.model or model_parent_path) + vocab_factory = VocabFactory(vocab_path) + vocab_types = None if args.no_vocab else args.vocab_type.split(",") + vocab, special_vocab = vocab_factory.load_vocab(vocab_types, model_parent_path) + + if args.vocab_only: + assert isinstance(vocab, Vocab) + if not args.outfile: + raise ValueError("need --outfile if using --vocab-only") + outfile = args.outfile + OutputFile.write_vocab_only(outfile, params, vocab, special_vocab, + endianess=endianess, pad_vocab=args.pad_vocab) + logger.info(f"Wrote {outfile}") + return + + if model_plus.vocab is not None and args.vocab_dir is None and not args.no_vocab: + vocab = model_plus.vocab + + logger.info(f"Vocab info: {vocab}") + logger.info(f"Special vocab info: {special_vocab}") + model = model_plus.model + model = convert_model_names(model, params, args.skip_unknown) + ftype = pick_output_type(model, args.outtype) + model = convert_to_output_type(model, ftype) + outfile = args.outfile or default_outfile(model_plus.paths, ftype) + + params.ftype = ftype + logger.info(f"Writing {outfile}, format {ftype}") + + OutputFile.write_all(outfile, ftype, params, model, vocab, special_vocab, + concurrency=args.concurrency, endianess=endianess, pad_vocab=args.pad_vocab) + logger.info(f"Wrote {outfile}") + + +if __name__ == '__main__': + main() diff --git a/utils/e2e_benchmark.py b/utils/e2e_benchmark.py new file mode 100644 index 0000000..4789aac --- /dev/null +++ b/utils/e2e_benchmark.py @@ -0,0 +1,52 @@ +import os +import sys +import logging +import argparse +import subprocess + +def run_command(command, shell=False, log_step=None): + """Run a system command and ensure it succeeds.""" + if log_step: + log_file = os.path.join(args.log_dir, log_step + ".log") + with open(log_file, "w") as f: + try: + subprocess.run(command, shell=shell, check=True, stdout=f, stderr=f) + except subprocess.CalledProcessError as e: + logging.error(f"Error occurred while running command: {e}, check details in {log_file}") + sys.exit(1) + else: + try: + subprocess.run(command, shell=shell, check=True) + except subprocess.CalledProcessError as e: + logging.error(f"Error occurred while running command: {e}") + sys.exit(1) + +def run_benchmark(): + bench_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "build/bin/llama-bench") + if not os.path.exists(bench_path): + logging.error(f"Benchmark binary not found, please build first.") + sys.exit(1) + command = [ + f'{bench_path}', + '-m', args.model, + '-n', str(args.n_token), + '-ngl', '0', + '-b', '1', + '-t', str(args.threads), + '-p', str(args.n_prompt), + '-r', '5' + ] + run_command(command) + +def parse_args(): + parser = argparse.ArgumentParser(description='Setup the environment for running the inference') + parser.add_argument("-m", "--model", type=str, help="Path to model file", required=True) + parser.add_argument("-n", "--n-token", type=int, help="Number of generated tokens", required=False, default=128) + parser.add_argument("-p", "--n-prompt", type=int, help="Prompt to generate text from", required=False, default=512) + parser.add_argument("-t", "--threads", type=int, help="Number of threads to use", required=False, default=2) + return parser.parse_args() + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO) + args = parse_args() + run_benchmark() \ No newline at end of file diff --git a/utils/generate-dummy-bitnet-model.py b/utils/generate-dummy-bitnet-model.py new file mode 100644 index 0000000..be3f6cd --- /dev/null +++ b/utils/generate-dummy-bitnet-model.py @@ -0,0 +1,1048 @@ +#!/usr/bin/env python3 + +# dummy model generation script based on convert-hf-to-gguf-bitnet.py +from __future__ import annotations +import sys +from pathlib import Path + +import numpy as np +import configparser +import logging +import argparse +import contextlib +import json +import os +import re +import sys +from abc import ABC, abstractmethod +from enum import IntEnum +from pathlib import Path +from hashlib import sha256 +from typing import TYPE_CHECKING, Any, Callable, ContextManager, Iterator, Sequence, TypeVar, cast, Tuple, Iterable + +# Necessary to load the local gguf package +sys.path.insert(0, str(Path(__file__).parent.parent)) + +from gguf import GGUFWriter, GGUFReader, RopeScalingType, TokenType, GGMLQuantizationType # noqa: E402 +if TYPE_CHECKING: + from torch import Tensor + +import torch +import gguf +logger = logging.getLogger("generate-dummy-bitnet-model") + +###### MODEL HPARAMS CONFIGURATION ###### + +model_config = { + "125M": { + "hidden_size": 768, + "intermediate_size": 3072, + "num_hidden_layers": 11, + "num_attention_heads": 12 + }, + "350M": { + "hidden_size": 1024, + "intermediate_size": 3072, + "num_hidden_layers": 24, + "num_attention_heads": 16 + }, + "1B": { + "hidden_size": 2048, + "intermediate_size": 3584, + "num_hidden_layers": 24, + "num_attention_heads": 32 + }, + "1.5B": { + "hidden_size": 1536, + "intermediate_size": 9216, + "num_hidden_layers": 28, + "num_attention_heads": 32 + }, + "2.7B": { + "hidden_size": 3072, + "intermediate_size": 7680, + "num_hidden_layers": 24, + "num_attention_heads": 32 + }, + "3.8B": { + "hidden_size": 3840, + "intermediate_size": 8192, + "num_hidden_layers": 24, + "num_attention_heads": 32 + }, + "7B": { + "hidden_size": 4096, + "intermediate_size": 12032, + "num_hidden_layers": 32, + "num_attention_heads": 32 + }, + "13B": { + "hidden_size": 5120, + "intermediate_size": 13824, + "num_hidden_layers": 40, + "num_attention_heads": 40 + }, + "30B": { + "hidden_size": 6656, + "intermediate_size": 16384, + "num_hidden_layers": 60, + "num_attention_heads": 52 + }, + "70B": { + "hidden_size": 8192, + "intermediate_size": 24576, + "num_hidden_layers": 80, + "num_attention_heads": 64 + }, + "100B": { + "hidden_size": 8192, + "intermediate_size": 45568, + "num_hidden_layers": 72, + "num_attention_heads": 64 + } +} + + +###### MODEL DEFINITIONS ###### + +class SentencePieceTokenTypes(IntEnum): + NORMAL = 1 + UNKNOWN = 2 + CONTROL = 3 + USER_DEFINED = 4 + UNUSED = 5 + BYTE = 6 + + +AnyModel = TypeVar("AnyModel", bound="type[Model]") + + +class Model(ABC): + _model_classes: dict[str, type[Model]] = {} + + def __init__(self, dir_model: Path, ftype: int, fname_out: Path, is_big_endian: bool, use_temp_file: bool): + self.dir_model = dir_model + self.ftype = ftype + self.fname_out = fname_out + self.is_big_endian = is_big_endian + self.endianess = gguf.GGUFEndian.BIG if is_big_endian else gguf.GGUFEndian.LITTLE + self.use_temp_file = use_temp_file + self.is_safetensors = self._is_model_safetensors() + self.num_parts = Model.count_model_parts(self.dir_model, ".safetensors" if self.is_safetensors else ".bin") + self.part_names = self._get_part_names() + self.hparams = Model.load_hparams(self.dir_model) + self.gguf_writer = gguf.GGUFWriter(fname_out, gguf.MODEL_ARCH_NAMES[self.model_arch], endianess=self.endianess, use_temp_file=self.use_temp_file) + self.block_count = self.find_hparam(["n_layers", "num_hidden_layers", "n_layer"]) + self.tensor_map = gguf.get_tensor_name_map(self.model_arch, self.block_count) + + @property + @abstractmethod + def model_arch(self) -> gguf.MODEL_ARCH: + pass + + def find_hparam(self, keys: Sequence[str], optional: bool = False) -> Any: + key = next((k for k in keys if k in self.hparams), None) + if key is not None: + return self.hparams[key] + if optional: + return None + raise KeyError(f"could not find any of: {keys}") + + def set_vocab(self): + self._set_vocab_gpt2() + + def get_tensors(self) -> Iterator[tuple[str, Tensor]]: + for part_name in self.part_names: + logger.info(f"gguf: loading model part '{part_name}'") + ctx: ContextManager[Any] + if self.is_safetensors: + from safetensors import safe_open + ctx = cast(ContextManager[Any], safe_open(self.dir_model / part_name, framework="pt", device="cpu")) + else: + ctx = contextlib.nullcontext(torch.load(str(self.dir_model / part_name), map_location="cpu", mmap=True, weights_only=True)) + + with ctx as model_part: + for name in model_part.keys(): + data = model_part.get_tensor(name) if self.is_safetensors else model_part[name] + yield name, data + + def match_model_tensor_name(self, name: str, key: gguf.MODEL_TENSOR, bid: int | None, suffix: str = ".weight") -> bool: + if key not in gguf.MODEL_TENSORS[self.model_arch]: + return False + key_name: str = gguf.TENSOR_NAMES[key] + if "{bid}" in key_name: + if bid is None: + return False + key_name = key_name.format(bid=bid) + else: + if bid is not None: + return False + return name == (key_name + suffix) + + def map_tensor_name(self, name: str, try_suffixes: Sequence[str] = (".weight", ".bias")) -> str: + new_name = self.tensor_map.get_name(key=name, try_suffixes=try_suffixes) + if new_name is None: + raise ValueError(f"Can not map tensor {name!r}") + return new_name + + def set_gguf_parameters(self): + self.gguf_writer.add_name(self.dir_model.name) + self.gguf_writer.add_block_count(self.block_count) + + if (n_ctx := self.find_hparam(["max_position_embeddings", "n_ctx"], optional=True)) is not None: + self.gguf_writer.add_context_length(n_ctx) + logger.info(f"gguf: context length = {n_ctx}") + + n_embd = self.find_hparam(["hidden_size", "n_embd"]) + self.gguf_writer.add_embedding_length(n_embd) + logger.info(f"gguf: embedding length = {n_embd}") + + if (n_ff := self.find_hparam(["intermediate_size", "n_inner"], optional=True)) is not None: + self.gguf_writer.add_feed_forward_length(n_ff) + logger.info(f"gguf: feed forward length = {n_ff}") + + n_head = self.find_hparam(["num_attention_heads", "n_head"]) + self.gguf_writer.add_head_count(n_head) + logger.info(f"gguf: head count = {n_head}") + + if (n_head_kv := self.hparams.get("num_key_value_heads")) is not None: + self.gguf_writer.add_head_count_kv(n_head_kv) + logger.info(f"gguf: key-value head count = {n_head_kv}") + + if (rope_theta := self.hparams.get("rope_theta")) is not None: + self.gguf_writer.add_rope_freq_base(rope_theta) + logger.info(f"gguf: rope theta = {rope_theta}") + if (f_rms_eps := self.hparams.get("rms_norm_eps")) is not None: + self.gguf_writer.add_layer_norm_rms_eps(f_rms_eps) + logger.info(f"gguf: rms norm epsilon = {f_rms_eps}") + if (f_norm_eps := self.find_hparam(["layer_norm_eps", "layer_norm_epsilon", "norm_epsilon"], optional=True)) is not None: + self.gguf_writer.add_layer_norm_eps(f_norm_eps) + logger.info(f"gguf: layer norm epsilon = {f_norm_eps}") + if (n_experts := self.hparams.get("num_local_experts")) is not None: + self.gguf_writer.add_expert_count(n_experts) + logger.info(f"gguf: expert count = {n_experts}") + if (n_experts_used := self.hparams.get("num_experts_per_tok")) is not None: + self.gguf_writer.add_expert_used_count(n_experts_used) + logger.info(f"gguf: experts used count = {n_experts_used}") + + self.gguf_writer.add_file_type(self.ftype) + logger.info(f"gguf: file type = {self.ftype}") + + def write_tensors(self): + block_count = self.hparams.get("n_layers", self.hparams.get("num_hidden_layers", self.hparams.get("n_layer"))) + tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) + for name, data_torch in self.get_tensors(): + # we don't need these + if name.endswith((".attention.masked_bias", ".attention.bias", ".attention.rotary_emb.inv_freq")): + continue + + old_dtype = data_torch.dtype + + # convert any unsupported data types to float32 + if data_torch.dtype not in (torch.float16, torch.float32): + data_torch = data_torch.to(torch.float32) + + data = data_torch.squeeze().numpy() + + # map tensor names + new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) + if new_name is None: + raise ValueError(f"Can not map tensor {name!r}") + + n_dims = len(data.shape) + data_dtype = data.dtype + + # if f32 desired, convert any float16 to float32 + if self.ftype == 0 and data_dtype == np.float16: + data = data.astype(np.float32) + + # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 + if self.ftype == 1 and data_dtype == np.float16 and (n_dims == 1 or new_name.endswith("_norm.weight")): + data = data.astype(np.float32) + + # if f16 desired, convert any float32 2-dim weight tensors to float16 + if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: + data = data.astype(np.float16) + + logger.info(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") + + self.gguf_writer.add_tensor(new_name, data) + + def write(self): + self.write_tensors() + self.gguf_writer.write_header_to_file() + self.gguf_writer.write_kv_data_to_file() + self.gguf_writer.write_tensors_to_file() + self.gguf_writer.close() + + def write_vocab(self): + self.gguf_writer.write_header_to_file() + self.gguf_writer.write_kv_data_to_file() + self.gguf_writer.close() + + @staticmethod + def count_model_parts(dir_model: Path, prefix: str) -> int: + num_parts = 0 + for filename in os.listdir(dir_model): + if filename.endswith(prefix): + num_parts += 1 + + return num_parts + + @staticmethod + def load_hparams(dir_model): + with open(dir_model / "config.json", "r", encoding="utf-8") as f: + return json.load(f) + + @classmethod + def register(cls, *names: str) -> Callable[[AnyModel], AnyModel]: + assert names + + def func(modelcls: type[Model]): + for name in names: + cls._model_classes[name] = modelcls + return modelcls + return func + + @classmethod + def from_model_architecture(cls, arch): + try: + return cls._model_classes[arch] + except KeyError: + raise NotImplementedError(f'Architecture {arch!r} not supported!') from None + + def _is_model_safetensors(self) -> bool: + return Model.count_model_parts(self.dir_model, ".safetensors") > 0 + + def _get_part_names(self): + if self.is_safetensors: + if self.num_parts == 1: # there's only one .safetensors file + return ("model.safetensors",) + return (f"model-{n:05}-of-{self.num_parts:05}.safetensors" for n in range(1, self.num_parts + 1)) + + if self.num_parts == 1: # there's only one .bin file + return ("pytorch_model.bin",) + return (f"pytorch_model-{n:05}-of-{self.num_parts:05}.bin" for n in range(1, self.num_parts + 1)) + + # used for GPT-2 BPE and WordPiece vocabs + def get_vocab_base(self) -> tuple[list[str], list[int], str]: + tokens: list[str] = [] + toktypes: list[int] = [] + + from transformers import AutoTokenizer + tokenizer = AutoTokenizer.from_pretrained(self.dir_model) + vocab_size = self.hparams.get("vocab_size", len(tokenizer.vocab)) + assert max(tokenizer.vocab.values()) < vocab_size + + tokpre = self.get_vocab_base_pre(tokenizer) + + reverse_vocab = {id_: encoded_tok for encoded_tok, id_ in tokenizer.vocab.items()} + added_vocab = tokenizer.get_added_vocab() + + for i in range(vocab_size): + if i not in reverse_vocab: + tokens.append(f"[PAD{i}]") + toktypes.append(gguf.TokenType.USER_DEFINED) + elif reverse_vocab[i] in added_vocab: + tokens.append(reverse_vocab[i]) + if tokenizer.added_tokens_decoder[i].special: + toktypes.append(gguf.TokenType.CONTROL) + else: + toktypes.append(gguf.TokenType.USER_DEFINED) + else: + tokens.append(reverse_vocab[i]) + toktypes.append(gguf.TokenType.NORMAL) + + return tokens, toktypes, tokpre + + # NOTE: this function is generated by convert-hf-to-gguf-update.py + # do not modify it manually! + # ref: https://github.com/ggerganov/llama.cpp/pull/6920 + def get_vocab_base_pre(self, tokenizer) -> str: + # encoding this string and hashing the resulting tokens would (hopefully) give us a unique identifier that + # is specific for the BPE pre-tokenizer used by the model + # we will use this unique identifier to write a "tokenizer.ggml.pre" entry in the GGUF file which we can + # use in llama.cpp to implement the same pre-tokenizer + + chktxt = '\n \n\n \n\n\n \t \t\t \t\n \n \n \n \n🚀 (normal) 😶\u200d🌫️ (multiple emojis concatenated) ✅ 🦙🦙 3 33 333 3333 33333 333333 3333333 33333333 3.3 3..3 3...3 កាន់តែពិសេសអាច😁 ?我想在apple工作1314151天~ ------======= нещо на Български \'\'\'\'\'\'```````""""......!!!!!!?????? I\'ve been \'told he\'s there, \'RE you sure? \'M not sure I\'ll make it, \'D you like some tea? We\'Ve a\'lL' + + chktok = tokenizer.encode(chktxt) + chkhsh = sha256(str(chktok).encode()).hexdigest() + + logger.debug(f"chktok: {chktok}") + logger.debug(f"chkhsh: {chkhsh}") + + res = None + + # NOTE: if you get an error here, you need to update the convert-hf-to-gguf-update.py script + # or pull the latest version of the model from Huggingface + # don't edit the hashes manually! + if chkhsh == "0ef9807a4087ebef797fc749390439009c3b9eda9ad1a097abbe738f486c01e5": + # ref: https://huggingface.co/meta-llama/Meta-Llama-3-8B + res = "llama-bpe" + if chkhsh == "049ecf7629871e3041641907f3de7c733e4dbfdc736f57d882ba0b0845599754": + # ref: https://huggingface.co/deepseek-ai/deepseek-llm-7b-base + res = "deepseek-llm" + if chkhsh == "347715f544604f9118bb75ed199f68779f423cabb20db6de6f31b908d04d7821": + # ref: https://huggingface.co/deepseek-ai/deepseek-coder-6.7b-base + res = "deepseek-coder" + if chkhsh == "8aeee3860c56296a157a1fe2fad249ec40aa59b1bb5709f4ade11c4e6fe652ed": + # ref: https://huggingface.co/tiiuae/falcon-7b + res = "falcon" + if chkhsh == "0876d13b50744004aa9aeae05e7b0647eac9d801b5ba4668afc01e709c15e19f": + # ref: https://huggingface.co/BAAI/bge-small-en-v1.5 + res = "bert-bge" + if chkhsh == "b6dc8df998e1cfbdc4eac8243701a65afe638679230920b50d6f17d81c098166": + # ref: https://huggingface.co/mosaicml/mpt-7b + res = "mpt" + if chkhsh == "35d91631860c815f952d711435f48d356ebac988362536bed955d43bfa436e34": + # ref: https://huggingface.co/bigcode/starcoder2-3b + res = "starcoder" + if chkhsh == "3ce83efda5659b07b1ad37ca97ca5797ea4285d9b9ab0dc679e4a720c9da7454": + # ref: https://huggingface.co/openai-community/gpt2 + res = "gpt-2" + if chkhsh == "6221ad2852e85ce96f791f476e0b390cf9b474c9e3d1362f53a24a06dc8220ff": + # ref: https://huggingface.co/smallcloudai/Refact-1_6-base + res = "refact" + if chkhsh == "9c2227e4dd922002fb81bde4fc02b0483ca4f12911410dee2255e4987644e3f8": + # ref: https://huggingface.co/CohereForAI/c4ai-command-r-v01 + res = "command-r" + + if res is None: + logger.warning("\n") + logger.warning("**************************************************************************************") + logger.warning("** WARNING: The BPE pre-tokenizer was not recognized!") + logger.warning("** There are 2 possible reasons for this:") + logger.warning("** - the model has not been added to convert-hf-to-gguf-update.py yet") + logger.warning("** - the pre-tokenization config has changed upstream") + logger.warning("** Check your model files and convert-hf-to-gguf-update.py and update them accordingly.") + logger.warning("** ref: https://github.com/ggerganov/llama.cpp/pull/6920") + logger.warning("**") + logger.warning(f"** chkhsh: {chkhsh}") + logger.warning("**************************************************************************************") + logger.warning("\n") + raise NotImplementedError("BPE pre-tokenizer was not recognized - update get_vocab_base_pre()") + + logger.debug(f"tokenizer.ggml.pre: {repr(res)}") + logger.debug(f"chkhsh: {chkhsh}") + + return res + + def _set_vocab_sentencepiece(self): + from sentencepiece import SentencePieceProcessor + + tokenizer_path = self.dir_model / 'tokenizer.model' + + tokens: list[bytes] = [] + scores: list[float] = [] + toktypes: list[int] = [] + + if not tokenizer_path.is_file(): + raise FileNotFoundError(f"File not found: {tokenizer_path}") + + tokenizer = SentencePieceProcessor(str(tokenizer_path)) + vocab_size = self.hparams.get('vocab_size', tokenizer.vocab_size()) + + for token_id in range(tokenizer.vocab_size()): + piece = tokenizer.id_to_piece(token_id) + text = piece.encode("utf-8") + score = tokenizer.get_score(token_id) + + toktype = SentencePieceTokenTypes.NORMAL + if tokenizer.is_unknown(token_id): + toktype = SentencePieceTokenTypes.UNKNOWN + elif tokenizer.is_control(token_id): + toktype = SentencePieceTokenTypes.CONTROL + elif tokenizer.is_unused(token_id): + toktype = SentencePieceTokenTypes.UNUSED + elif tokenizer.is_byte(token_id): + toktype = SentencePieceTokenTypes.BYTE + + tokens.append(text) + scores.append(score) + toktypes.append(toktype) + + added_tokens_file = self.dir_model / 'added_tokens.json' + if added_tokens_file.is_file(): + with open(added_tokens_file, "r", encoding="utf-8") as f: + added_tokens_json = json.load(f) + + for key in added_tokens_json: + key = key.encode("utf-8") + if key not in tokens: + tokens.append(key) + scores.append(-1000.0) + toktypes.append(SentencePieceTokenTypes.USER_DEFINED) + + if vocab_size > len(tokens): + pad_count = vocab_size - len(tokens) + logger.debug(f"Padding vocab with {pad_count} token(s) - [PAD1] through [PAD{pad_count}]") + for i in range(1, pad_count + 1): + tokens.append(f"[PAD{i}]") + scores.append(-1000.0) + toktypes.append(SentencePieceTokenTypes.UNUSED) + + assert len(tokens) == vocab_size + + self.gguf_writer.add_tokenizer_model("llama") + self.gguf_writer.add_tokenizer_pre("default") + self.gguf_writer.add_token_list(tokens) + self.gguf_writer.add_token_scores(scores) + self.gguf_writer.add_token_types(toktypes) + + special_vocab = gguf.SpecialVocab(self.dir_model, n_vocab=len(tokens)) + special_vocab.add_to_gguf(self.gguf_writer) + +# TL1 + +def process_tl1(weight, BM, BY, bm, by, M, K): + final_weight = [] + + # split in row with size of BM (160) + outer_BM_weights = np.split(weight, (M // BM), axis=0) + for outer_BM_weight in outer_BM_weights: + # split in col with size of by (16index * 2 == 32nums) + outer_BY_weights = np.split(outer_BM_weight, (K // BY), axis=1) + for outer_BY_weight in outer_BY_weights: + # split in row with size of bm (32) + inner_bm_weights = np.split(outer_BY_weight, (BM // bm), axis=0) + for inner_bm_weight in inner_bm_weights: + # split in col with size of by (2index * 2 == 4nums) + inner_by_weights = np.split(inner_bm_weight, (BY // by), axis=1) + for inner_by_weight in inner_by_weights: + # 16 * 6 minor + minor_bm_weights = np.split(inner_by_weight, (bm // 16), axis=0) + for minor_bm_weight in minor_bm_weights: + minor_by_weights = np.split(minor_bm_weight, (by // 4), axis=1) + for minor in minor_by_weights: + minor_weight = np.split(minor, 2, axis=1) + hi_weight = minor_weight[0].astype(np.uint8) << 4 + lo_weight = minor_weight[1].astype(np.uint8) + func_weight = lo_weight + hi_weight + final_weight.append(func_weight) + + weight = np.array(final_weight, dtype=np.uint8) + return weight + +# based on t_mac.utils.preprocess_weights +def preprocess_weights_tl1( + w: np.ndarray, + bits = 2, + g = 4, +) -> Tuple[np.ndarray, np.ndarray]: + M, K = w.shape + weight = w + weight = np.where(np.abs(weight) < 1e-6, 0, weight).astype(np.float32) + weight = np.sign(weight) + weight_num = np.prod(weight.shape) + model_size = args.model_size + + KEMD = model_config[model_size]['hidden_size'] + # outer loop + BMEMD = 256 + BYEMD = 256 + + # inner loop (32row 32num/16index) + bmEMD = 32 + byEMD = 8 + + KGQA = model_config[model_size]['intermediate_size'] + + BMGQA = 256 + BYGQA = 256 + + bmGQA = 32 + byGQA = 8 + + weight = np.reshape(weight, (weight_num // 2, 2)) + hi_weight = np.multiply(np.split(weight, 2, axis=1)[0], 3) + lo_weight = np.split(weight, 2, axis=1)[1] + + weight = np.reshape((hi_weight + lo_weight), weight_num // 2) + + # row-major index + weight = weight + 4 + weight = np.reshape(weight, (M, K // 2)).astype(np.uint8) + + if K == KEMD: + weight = process_tl1(weight, BMEMD, BYEMD, bmEMD, byEMD, M, K) + elif K == KGQA: + weight = process_tl1(weight, BMGQA, BYGQA, bmGQA, byGQA, M, K) + else: + raise NotImplementedError + + return weight + + +def preprocess_two_weights_tl2(M, K, weight_num, BM, BY, bm, by, weight, final_weight): + weight = np.reshape(weight, (weight_num // 2, 2)) + hi_weight = np.multiply(np.split(weight, 2, axis=1)[0], 3) + lo_weight = np.split(weight, 2, axis=1)[1] + + weight = np.reshape((hi_weight + lo_weight), weight_num // 2) + + # row-major index + weight = weight + 4 + weight = np.reshape(weight, (M, K // 2)).astype(np.uint8) + + outer_BM_weights = np.split(weight, (M // BM), axis=0) + for outer_BM_weight in outer_BM_weights: + # split in col with size of by (32index * 3 == 96nums) + outer_BY_weights = np.split(outer_BM_weight, (K // BY), axis=1) + for outer_BY_weight in outer_BY_weights: + # split in row with size of bm (32) + inner_bm_weights = np.split(outer_BY_weight, (BM // bm), axis=0) + for inner_bm_weight in inner_bm_weights: + # split in col with size of by (2index * 2 == 4nums) + inner_by_weights = np.split(inner_bm_weight, (BY // by), axis=1) + for inner_by_weight in inner_by_weights: + func_weights = np.split(inner_by_weight, 2, axis=1) + + left_weight = func_weights[0] + left_sub_weights = np.split(left_weight, 4, axis=0) + new_left_weight = np.reshape( + np.concatenate([left_sub_weights[0], left_sub_weights[2], + left_sub_weights[1], left_sub_weights[3]], axis=0, dtype=np.uint8), + (bm)) + + right_weight = func_weights[1] + right_sub_weights = np.split(right_weight, 4, axis=0) + new_right_weight = np.reshape( + np.concatenate([right_sub_weights[0], right_sub_weights[2], + right_sub_weights[1], right_sub_weights[3]], axis=0, dtype=np.uint8), + (bm)) + hi_weight = new_left_weight.astype(np.uint8) << 4 + lo_weight = new_right_weight + func_weight = hi_weight + lo_weight + func_weight = np.reshape(func_weight, bm * by // 4) + final_weight.append(func_weight) + +def preprocess_three_weights_tl2(M, K, weight_num, BM, BY, bm, by, weight, final_weight): + weight = np.reshape(weight, (weight_num // 3, 3)) + split_weights = np.split(weight, 3, axis=1) + first_weight = np.multiply(split_weights[0], 9) + second_weight = np.multiply(split_weights[1], 3) + third_weight = split_weights[2] + + weight = np.reshape((first_weight + second_weight + third_weight), weight_num // 3) + sign_weight = np.sign(weight) + 2 + sign_weight = np.where(sign_weight > 1, 0, sign_weight) + weight = np.abs(weight) + + # row-major index + weight = np.reshape(weight, (M, K // 3)).astype(np.uint8) + sign_weight = np.reshape(sign_weight, (M, K // 3)).astype(np.uint8) + # print(weight) + + # split in row with size of BM (160) + outer_BM_weights = np.split(weight, (M // BM), axis=0) + for outer_BM_weight in outer_BM_weights: + # split in col with size of by (32index * 3 == 96nums) + outer_BY_weights = np.split(outer_BM_weight, (K // BY), axis=1) + for outer_BY_weight in outer_BY_weights: + # split in row with size of bm (32) + inner_bm_weights = np.split(outer_BY_weight, (BM // bm), axis=0) + for inner_bm_weight in inner_bm_weights: + # split in col with size of by (2index * 3 == 6nums) + inner_by_weights = np.split(inner_bm_weight, (BY // by), axis=1) + for inner_by_weight in inner_by_weights: + func_weights = np.split(inner_by_weight, 2, axis=1) + + left_weight = func_weights[0] + left_sub_weights = np.split(left_weight, 4, axis=0) + new_left_weight = np.reshape( + np.concatenate([left_sub_weights[0], left_sub_weights[2], + left_sub_weights[1], left_sub_weights[3]], axis=0, dtype=np.uint8), + (bm)) + + right_weight = func_weights[1] + right_sub_weights = np.split(right_weight, 4, axis=0) + + new_right_weight = np.reshape( + np.concatenate([right_sub_weights[0], right_sub_weights[2], + right_sub_weights[1], right_sub_weights[3]], axis=0, dtype=np.uint8), + (bm)) + hi_weight = new_left_weight.astype(np.uint8) << 4 + lo_weight = new_right_weight + func_weight = hi_weight + lo_weight + func_weight = np.reshape(func_weight, bm * by // 6) + final_weight.append(func_weight) + + sign_weight_list = [] + sign_outer_BM_weights = np.split(sign_weight, (M // BM), axis=0) + for sign_outer_BM_weight in sign_outer_BM_weights: + # split in col with size of by (32index * 3 == 96nums) + sign_outer_BY_weights = np.split(sign_outer_BM_weight, (K // BY), axis=1) + for sign_outer_BY_weight in sign_outer_BY_weights: + # split in row with size of bm (32) + sign_inner_bm_weights = np.split(sign_outer_BY_weight, (BM // bm), axis=0) + for sign_inner_bm_weight in sign_inner_bm_weights: + # split in col with size of by (4index * 3 == 12nums) + sign_inner_by_weights = np.split(sign_inner_bm_weight, (BY // (by * 4)), axis=1) + for sign_inner_by_weight in sign_inner_by_weights: + func_weight = np.split(sign_inner_by_weight, 8, axis=1) + combine_weight = np.zeros((16, 1), dtype=np.uint16) + for i in range(len(func_weight)): + min_weight = np.split(func_weight[i], 2) + min_top_weight = min_weight[0].astype(np.uint16) << 15 - (2 * i) + min_bot_weight = min_weight[1].astype(np.uint16) << 15 - (2 * i + 1) + combine_weight += min_top_weight + combine_weight += min_bot_weight + combine_weight = combine_weight.view(np.uint8) + # combine_weight = combine_weight[:, [1, 0]] + combine_weight = np.reshape(combine_weight, bm) + sign_weight_list.append(combine_weight) + final_weight.extend(sign_weight_list) + final_weight.extend(sign_weight_list) + + +def preprocess_weights_tl2( + w: np.ndarray, + bits = 2, + g = 4, +) -> Tuple[np.ndarray, np.ndarray]: + M, K = w.shape + weight = w + weight = np.where(np.abs(weight) < 1e-6, 0, weight).astype(np.float32) + weight = np.sign(weight) + weight_num = np.prod(weight.shape) + + # for three num 6 bit -> + + # outer loop + KEMD = 1536 + BMEMD = 256 + BYEMD = 96 + + KGQA = 4096 + BMGQA = 128 + BYGQA = 96 + + # inner loop (32row 32num/16index) + bm3 = 32 + by3 = 6 + + if K == KEMD: + BM3 = BMEMD + BY3 = BYEMD + elif K == KGQA: + BM3 = BMGQA + BY3 = BYGQA + else: + raise NotImplementedError + + BM2 = BM3 + BY2 = 32 + # inner loop (32row 32num/16index) + bm2 = 32 + by2 = 4 + + if (weight.shape[1] % BY3 != 0): + slice_k_idx = weight.shape[1] - weight.shape[1] % BY3 + slice_weights = np.split(weight, [slice_k_idx], axis=1) + three_weight = slice_weights[0] + two_weight = slice_weights[1] + else: + three_weight = weight + + final_weight = [] + + preprocess_three_weights_tl2(three_weight.shape[0], + three_weight.shape[1], + three_weight.shape[0] * three_weight.shape[1], + BM3, + BY3, + bm3, + by3, + three_weight, + final_weight) + + if (weight.shape[1] % BY3 != 0): + preprocess_two_weights_tl2( two_weight.shape[0], + two_weight.shape[1], + two_weight.shape[0] * two_weight.shape[1], + BM2, + BY2, + bm2, + by2, + two_weight, + final_weight) + + weight = np.array(final_weight, dtype=np.uint8) + + return weight + + +@Model.register("BitnetForCausalLM") +class BitnetModel(Model): + model_arch = gguf.MODEL_ARCH.BITNET + params: str = "" + + def set_params(self, params: str): + self.params = params + hp_config = model_config[self.params] + self.hparams["hidden_size"] = hp_config["hidden_size"] + self.hparams["intermediate_size"] = hp_config["intermediate_size"] + self.hparams["num_hidden_layers"] = hp_config["num_hidden_layers"] + self.hparams["num_attention_heads"] = hp_config["num_attention_heads"] + self.hparams["num_key_value_heads"] = hp_config["num_attention_heads"] + self.block_count = self.find_hparam(["n_layers", "num_hidden_layers", "n_layer"]) + self.tensor_map = gguf.get_tensor_name_map(self.model_arch, self.block_count) + + + def set_vocab(self): + self._set_vocab_sentencepiece() + + def set_gguf_parameters(self): + super().set_gguf_parameters() + + self.gguf_writer.add_vocab_size(self.hparams["vocab_size"]) + + self.gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.LINEAR) + self.gguf_writer.add_rope_scaling_factor(1.0) + + def weight_quant(self, weight): + dtype = weight.dtype + weight = weight.float() + s = 1 / weight.abs().mean().clamp(min=1e-5) + result = (weight * s).round().clamp(-1, 1) / s + return result.type(dtype) + + def transform_to_tl1(self, x: np.ndarray): + scale = np.max(np.abs(x)) + # res = np.round(x / scale + 2).astype(np.uint8) + res = preprocess_weights_tl1(x) + return res, scale + + def transform_to_tl2(self, x: np.ndarray): + scale = np.max(np.abs(x)) + # res = np.round(x / scale + 2).astype(np.uint8) + res = preprocess_weights_tl2(x) + return res, scale + + # generate dummy model + def generate_tensors(self) -> Iterator[tuple[str, np.ndarray]]: + hp_config = model_config[self.params] + hidden_size = hp_config["hidden_size"] + intermediate_size = hp_config["intermediate_size"] + num_hidden_layers = hp_config["num_hidden_layers"] + num_attention_heads = hp_config["num_attention_heads"] + + # generate dummy tensors + tensor = torch.randn((32002, hidden_size), dtype=torch.float32) + yield ("model.embed_tokens.weight", tensor) + for i in range(num_hidden_layers): + yield f"model.layers.{i}.input_layernorm.weight", torch.randn((hidden_size,), dtype=torch.float32) + yield f"model.layers.{i}.mlp.down_proj.weight", torch.randn((hidden_size, intermediate_size), dtype=torch.float32) + yield f"model.layers.{i}.mlp.ffn_layernorm.weight", torch.randn((intermediate_size,), dtype=torch.float32) + yield f"model.layers.{i}.mlp.gate_proj.weight", torch.randn((intermediate_size, hidden_size), dtype=torch.float32) + yield f"model.layers.{i}.mlp.up_proj.weight", torch.randn((intermediate_size, hidden_size), dtype=torch.float32) + yield f"model.layers.{i}.post_attention_layernorm.weight", torch.randn((hidden_size), dtype=torch.float32) + yield f"model.layers.{i}.self_attn.inner_attn_ln.weight", torch.randn((hidden_size,), dtype=torch.float32) + yield f"model.layers.{i}.self_attn.k_proj.weight", torch.randn((hidden_size, hidden_size), dtype=torch.float32) + yield f"model.layers.{i}.self_attn.o_proj.weight", torch.randn((hidden_size, hidden_size), dtype=torch.float32) + yield f"model.layers.{i}.self_attn.q_proj.weight", torch.randn((hidden_size, hidden_size), dtype=torch.float32) + yield f"model.layers.{i}.self_attn.rotary_emb.inv_freq", torch.randn((hidden_size // (num_attention_heads * 2),), dtype=torch.float32) + yield f"model.layers.{i}.self_attn.v_proj.weight", torch.randn((hidden_size, hidden_size), dtype=torch.float32) + tensor = torch.randn((hidden_size,), dtype=torch.float32) + yield("model.norm.weight", tensor) + + + + def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]: + # quant weight to i2 (in fp16) + if name.endswith(("q_proj.weight", "k_proj.weight", "v_proj.weight", + "down_proj.weight", "up_proj.weight", "gate_proj.weight", + "o_proj.weight")): + data_torch = self.weight_quant(data_torch) + + return [(self.map_tensor_name(name), data_torch)] + + def write_tensors(self): + max_name_len = max(len(s) for _, s in self.tensor_map.mapping.values()) + len(".weight,") + + for name, data_torch in self.generate_tensors(): + # we don't need these + if name.endswith((".attention.masked_bias", ".attention.bias", ".rotary_emb.inv_freq")): + continue + + old_dtype = data_torch.dtype + + # convert any unsupported data types to float32 + if data_torch.dtype not in (torch.float16, torch.float32): + data_torch = data_torch.to(torch.float32) + + # use the first number-like part of the tensor name as the block id + bid = None + for part in name.split("."): + if part.isdecimal(): + bid = int(part) + break + + for new_name, data in ((n, d.squeeze().numpy()) for n, d in self.modify_tensors(data_torch, name, bid)): + data: np.ndarray = data # type hint + data_shape = data.shape + n_dims = len(data.shape) + data_dtype = data.dtype + data_qtype: gguf.GGMLQuantizationType | None = None + + # when both are True, f32 should win + # extra_f32 = self.extra_f32_tensors(name, new_name, bid, n_dims) + # extra_f16 = self.extra_f16_tensors(name, new_name, bid, n_dims) + extra_f32 = False + extra_f16 = False + + # Most of the codebase that takes in 1D tensors or norms only handles F32 tensors + # Conditions should closely match those in llama_model_quantize_internal in llama.cpp + extra_f32 = any(cond for cond in ( + extra_f32, + n_dims == 1, + new_name.endswith("_norm.weight"), + )) + + # Some tensor types are always in float32 + extra_f32 = extra_f32 or any(self.match_model_tensor_name(new_name, key, bid) for key in ( + gguf.MODEL_TENSOR.FFN_GATE_INP, + gguf.MODEL_TENSOR.POS_EMBD, + gguf.MODEL_TENSOR.TOKEN_TYPES, + # for debug / delete when inference + gguf.MODEL_TENSOR.TOKEN_EMBD, + )) + + # if f16 desired, convert any float32 2-dim weight tensors to float16 + extra_f16 = any(cond for cond in ( + extra_f16, + (name.endswith(".weight") and n_dims >= 2), + )) + + suit_i2 = True + if name.endswith('embed_tokens.weight') or name.endswith('norm.weight'): + suit_i2 = False + + i2_scale = None + if self.ftype != gguf.GGMLQuantizationType.F32 and extra_f16 and not extra_f32: + if self.ftype == gguf.GGMLQuantizationType.TL1 and suit_i2: + data, i2_scale = self.transform_to_tl1(data) + assert data.dtype == np.uint8 + assert i2_scale.dtype == np.float32 + data_qtype = gguf.GGMLQuantizationType.TL1 + elif self.ftype == gguf.GGMLQuantizationType.TL2 and suit_i2: + data, i2_scale = self.transform_to_tl2(data) + assert data.dtype == np.uint8 + assert i2_scale.dtype == np.float32 + data_qtype = gguf.GGMLQuantizationType.TL2 + else: # default to float16 for quantized tensors + if data_dtype != np.float16: + data = data.astype(np.float16) + data_qtype = gguf.GGMLQuantizationType.F16 + + if data_qtype is None: # by default, convert to float32 + if data_dtype != np.float32: + data = data.astype(np.float32) + data_qtype = gguf.GGMLQuantizationType.F32 + + shape = data_shape + # shape = gguf.quant_shape_from_byte_shape(data.shape, data_qtype) if data.dtype == np.uint8 else data.shape + # reverse shape to make it similar to the internal ggml dimension order + shape_str = f"{{{', '.join(str(n) for n in reversed(shape))}}}" + + # n_dims is implicit in the shape + logger.info(f"{f'%-{max_name_len}s' % f'{new_name},'} {old_dtype} --> {data_qtype.name}, shape = {shape_str}") + + self.gguf_writer.add_tensor(new_name, data, raw_shape=shape, raw_dtype=data_qtype) + if i2_scale is not None: + self.gguf_writer.add_tensor(new_name + "_scale", i2_scale, raw_dtype=gguf.GGMLQuantizationType.F32) + +ftype_map = { + "f32": gguf.GGMLQuantizationType.F32, + "f16": gguf.GGMLQuantizationType.F16, + "tl1" : gguf.GGMLQuantizationType.TL1, + "tl2" : gguf.GGMLQuantizationType.TL2, +} + +def main() -> None: + dir_model = args.model + fname_out = args.outfile + model_size = args.model_size + + hparams = Model.load_hparams(dir_model) + + with torch.inference_mode(): + model_class = Model.from_model_architecture(hparams["architectures"][0]) + model_instance = model_class(dir_model, ftype_map[args.outtype], fname_out, args.bigendian, args.use_temp_file) + model_instance.set_params(model_size) + + logger.info("Set model parameters") + model_instance.set_gguf_parameters() + + logger.info("Set model tokenizer") + model_instance.set_vocab() + + if args.vocab_only: + logger.info(f"Exporting model vocab to '{fname_out}'") + model_instance.write_vocab() + else: + logger.info(f"Exporting model to '{fname_out}'") + model_instance.write() + + logger.info(f"Model successfully exported to '{fname_out}'") + +def read_gguf_file(gguf_file_path): + """ + Reads and prints key-value pairs and tensor information from a GGUF file in an improved format. + + Parameters: + - gguf_file_path: Path to the GGUF file. + """ + + reader = GGUFReader(gguf_file_path) + + # List all key-value pairs in a columnized format + print("Key-Value Pairs:") # noqa: NP100 + max_key_length = max(len(key) for key in reader.fields.keys()) + for key, field in reader.fields.items(): + value = field.parts[field.data[0]] + print(f"{key:{max_key_length}} : {value}") # noqa: NP100 + print("----") # noqa: NP100 + + # List all tensors + print("Tensors:") # noqa: NP100 + tensor_info_format = "{:<30} | Shape: {:<15} | Size: {:<12} | Quantization: {}" + print(tensor_info_format.format("Tensor Name", "Shape", "Size", "Quantization")) # noqa: NP100 + print("-" * 80) # noqa: NP100 + for tensor in reader.tensors: + shape_str = "x".join(map(str, tensor.shape)) + size_str = str(tensor.n_elements) + quantization_str = tensor.tensor_type.name + print(tensor_info_format.format(tensor.name, shape_str, size_str, quantization_str)) # noqa: NP100 + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Generate a dummy bitnet model with GGUF format") + parser.add_argument( + "--vocab-only", action="store_true", + help="extract only the vocab", + ) + parser.add_argument( + "--outfile", type=Path, + help="path to write to; default: based on input", + ) + parser.add_argument( + "--outtype", type=str, choices=ftype_map.keys(), default="f16", + help="output format - use f32 for float32, f16 for float16", + ) + parser.add_argument("--bigendian", action="store_true", help="model is executed on big endian machine") + parser.add_argument( + "model", type=Path, + help="directory containing model file", + ) + parser.add_argument("--use-temp-file", action="store_true", help="use the tempfile library while processing (helpful when running out of memory, process killed)") + parser.add_argument("--model-name", type=str, default=None, help="name of the model") + parser.add_argument("--model-size", type=str, default="7B", help="size of the model") + parser.add_argument("--verbose", action="store_true", help="increase output verbosity") + + return parser.parse_args() + +if __name__ == '__main__': + args = parse_args() + main() \ No newline at end of file diff --git a/utils/kernel_tuning.py b/utils/kernel_tuning.py new file mode 100644 index 0000000..e69de29