Skip to content

Commit bcad631

Browse files
committed
opencl: update doc
1 parent f423981 commit bcad631

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

docs/build.md

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,94 @@ KleidiAI's microkernels implement optimized tensor operations using Arm CPU feat
456456

457457
Depending on your build target, other higher priority backends may be enabled by default. To ensure the CPU backend is used, you must disable the higher priority backends either at compile time, e.g. -DGGML_METAL=OFF, or during run-time using the command line option `--device none`.
458458

459+
## OpenCL
460+
This provides GPU acceleration through OpenCL on recent Adreno GPU.
461+
462+
### Android
463+
464+
Assume NDK is available in `$ANDROID_NDK`. First, install OpenCL headers and ICD loader library if not available,
465+
466+
```sh
467+
mkdir -p ~/dev/llm
468+
cd ~/dev/llm
469+
470+
git clone https://github.com/KhronosGroup/OpenCL-Headers && \
471+
cd OpenCL-Headers && \
472+
cp -r CL $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include
473+
474+
cd ~/dev/llm
475+
476+
git clone https://github.com/KhronosGroup/OpenCL-ICD-Loader && \
477+
cd OpenCL-ICD-Loader && \
478+
mkdir build_ndk && cd build_ndk && \
479+
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release \
480+
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
481+
-DOPENCL_ICD_LOADER_HEADERS_DIR=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include \
482+
-DANDROID_ABI=arm64-v8a \
483+
-DANDROID_PLATFORM=24 \
484+
-DANDROID_STL=c++_shared && \
485+
ninja && \
486+
cp libOpenCL.so $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android
487+
```
488+
489+
Then build llama.cpp with OpenCL enabled,
490+
491+
```sh
492+
cd ~/dev/llm
493+
494+
git clone https://github.com/ggml-org/llama.cpp && \
495+
cd llama.cpp && \
496+
mkdir build-android && cd build-android
497+
498+
cmake .. -G Ninja \
499+
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
500+
-DANDROID_ABI=arm64-v8a \
501+
-DANDROID_PLATFORM=android-28 \
502+
-DBUILD_SHARED_LIBS=OFF \
503+
-DGGML_OPENCL=ON
504+
505+
ninja
506+
```
507+
508+
### Windows Arm64
509+
510+
First, install OpenCL headers and ICD loader library if not available,
511+
512+
```powershell
513+
mkdir -p ~/dev/llm
514+
515+
cd ~/dev/llm
516+
git clone https://github.com/KhronosGroup/OpenCL-Headers && cd OpenCL-Headers
517+
mkdir build && cd build
518+
cmake .. -G Ninja `
519+
-DBUILD_TESTING=OFF `
520+
-DOPENCL_HEADERS_BUILD_TESTING=OFF `
521+
-DOPENCL_HEADERS_BUILD_CXX_TESTS=OFF `
522+
-DCMAKE_INSTALL_PREFIX="$HOME/dev/llm/opencl"
523+
cmake --build . --target install
524+
525+
cd ~/dev/llm
526+
git clone https://github.com/KhronosGroup/OpenCL-ICD-Loader && cd OpenCL-ICD-Loader
527+
mkdir build && cd build
528+
cmake .. -G Ninja `
529+
-DCMAKE_BUILD_TYPE=Release `
530+
-DCMAKE_PREFIX_PATH="$HOME/dev/llm/opencl" `
531+
-DCMAKE_INSTALL_PREFIX="$HOME/dev/llm/opencl"
532+
cmake --build . --target install
533+
```
534+
535+
Then build llama.cpp with OpenCL enabled,
536+
537+
```powershell
538+
cmake .. -G Ninja `
539+
-DCMAKE_TOOLCHAIN_FILE="$HOME/dev/llm/llama.cpp/cmake/arm64-windows-llvm.cmake" `
540+
-DCMAKE_BUILD_TYPE=Release `
541+
-DCMAKE_PREFIX_PATH="$HOME/dev/llm/opencl" `
542+
-DBUILD_SHARED_LIBS=OFF `
543+
-DGGML_OPENCL=ON
544+
ninja
545+
```
546+
459547
## Android
460548

461549
To read documentation for how to build on Android, [click here](./android.md)

0 commit comments

Comments
 (0)