From 05bef0f0e9bac95df37a866033dd27b6a057effd Mon Sep 17 00:00:00 2001 From: Vulcan <93451215+trholding@users.noreply.github.com> Date: Wed, 3 May 2023 01:20:32 +0530 Subject: [PATCH] build : CLBlast support as in llama.cpp (#862) * ggml : CLBlast support as in llama.cpp Building with CLBlast speeds up whisper.cpp ~2x on low end / older AMD APUs (CPU with integrated GPU) such as the A9. Usage: WHISPER_CLBLAST=1 make * CMake/Makefile : CLBlast support as in llama.cpp Building with CLBlast speeds up whisper.cpp ~2x on low end / older AMD APUs (CPU with integrated GPU) such as the A9. Usage: ``` Makefile: cd whisper.cpp WHISPER_CLBLAST=1 make CMake: cd whisper.cpp ; mkdir build ; cd build cmake -DWHISPER_CLBLAST=ON .. make ``` --- CMakeLists.txt | 17 +++++++++++++++++ Makefile | 9 +++++++++ 2 files changed, 26 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index c4c7aa88..f17bb24b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,6 +64,7 @@ if (APPLE) else() option(WHISPER_OPENBLAS "whisper: support for OpenBLAS" OFF) option(WHISPER_CUBLAS "whisper: support for cuBLAS" OFF) + option(WHISPER_CLBLAST "whisper: use CLBlast" OFF) endif() option(WHISPER_PERF "whisper: enable perf timings" OFF) @@ -167,6 +168,21 @@ if (WHISPER_CUBLAS) endif() endif() +if (WHISPER_CLBLAST) + find_package(CLBlast) + if (CLBlast_FOUND) + message(STATUS "CLBlast found") + + set(GGML_OPENCL_SOURCES ggml-opencl.c ggml-opencl.h) + + add_compile_definitions(GGML_USE_CLBLAST) + + set(WHISPER_EXTRA_LIBS ${WHISPER_EXTRA_LIBS} clblast) + else() + message(WARNING "CLBlast not found") + endif() +endif() + # compiler flags if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) @@ -274,6 +290,7 @@ add_library(${TARGET} ggml.h ggml.c ${GGML_CUDA_SOURCES} + ${GGML_OPENCL_SOURCES} whisper.h whisper.cpp ) diff --git a/Makefile b/Makefile index 87ce8c41..07871362 100644 --- a/Makefile +++ b/Makefile @@ -171,6 +171,15 @@ ggml-cuda.o: ggml-cuda.cu ggml-cuda.h $(NVCC) $(NVCCFLAGS) $(CXXFLAGS) -Wno-pedantic -c $< -o $@ endif +ifdef WHISPER_CLBLAST + CFLAGS += -DGGML_USE_CLBLAST + LDFLAGS += -lclblast -lOpenCL + WHISPER_OBJ += ggml-opencl.o + +ggml-opencl.o: ggml-opencl.c ggml-opencl.h + $(CC) $(CFLAGS) -c $< -o $@ +endif + ifdef WHISPER_GPROF CFLAGS += -pg CXXFLAGS += -pg