Skip to content

Commit

Permalink
Add oneDNN(DNNL) backend (new simplified version)
Browse files Browse the repository at this point in the history
* Backend logic is based on BLAS backend
* Implemented support for MUL_MAT operation
* Implemented MUL_MAT fusing with subsequential ADD as bias-add
* Implemented weights 'pre-packing'(reordering) for MUL_MAT operation

Notes:
* This it is the second version of the DNNL-backend based on refactored ggml backend support implemented together with BLAS-backend
* It is recommended to enable GGML_OPENMP when oneDNN compiled with DNNL_CPU_RUNTIME=OMP(default)
  • Loading branch information
rfsaliev committed Jun 28, 2024
1 parent e002d05 commit a5d602d
Show file tree
Hide file tree
Showing 5 changed files with 493 additions and 0 deletions.
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ option(GGML_BLAS "ggml: use BLAS"
set(GGML_BLAS_VENDOR ${GGML_BLAS_VENDOR_DEFAULT} CACHE STRING
"ggml: BLAS library vendor")
option(GGML_LLAMAFILE "ggml: use ggml SGEMM" OFF)
option(GGML_DNNL "ggml: use OneDNN" OFF)

option(GGML_CUDA "ggml: use CUDA" OFF)
option(GGML_CUDA_FORCE_DMMV "ggml: use dmmv instead of mmvq CUDA kernels" OFF)
Expand Down
13 changes: 13 additions & 0 deletions examples/gpt-2/main-sched.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@
#include "ggml-blas.h"
#endif

#ifdef GGML_USE_DNNL
#include "ggml-dnnl.h"
#endif

#include "common.h"
#include "common-ggml.h"

Expand Down Expand Up @@ -145,6 +149,15 @@ void init_backends(gpt2_model & model, const gpt_params & params) {
}
#endif

#ifdef GGML_USE_DNNL
ggml_backend_t dnnl_backend = ggml_backend_dnnl_init();
if (!dnnl_backend) {
fprintf(stderr, "%s: failed to initialize DNNL backend\n", __func__);
} else {
model.backends.push_back(dnnl_backend);
}
#endif

// always add the CPU backend as a fallback
ggml_backend_t cpu_backend = ggml_backend_cpu_init();
ggml_backend_cpu_set_n_threads(cpu_backend, params.n_threads);
Expand Down
16 changes: 16 additions & 0 deletions include/ggml-dnnl.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#pragma once

#include "ggml.h"
#include "ggml-backend.h"

#ifdef __cplusplus
extern "C" {
#endif

// backend API
GGML_API GGML_CALL ggml_backend_t ggml_backend_dnnl_init();
GGML_API GGML_CALL bool ggml_backend_is_dnnl(ggml_backend_t backend);

#ifdef __cplusplus
}
#endif
19 changes: 19 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,24 @@ if (GGML_LLAMAFILE)
set(GGML_SOURCES_LLAMAFILE sgemm.cpp)
endif()

if (GGML_DNNL)
find_package(dnnl)
if (dnnl_FOUND)
message(STATUS "OneDNN found")

add_compile_definitions(GGML_USE_DNNL)

set(GGML_HEADERS_DNNL ../include/ggml-dnnl.h)
set(GGML_SOURCES_DNNL ggml-dnnl.cpp)

set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} DNNL::dnnl)
list(APPEND GGML_CDEF_PUBLIC GGML_USE_DNNL)

else()
message(WARNING "OneDNN not found")
endif()
endif()

if (GGML_CUDA)
cmake_minimum_required(VERSION 3.18) # for CMAKE_CUDA_ARCHITECTURES

Expand Down Expand Up @@ -1151,6 +1169,7 @@ add_library(ggml
${GGML_SOURCES_ROCM} ${GGML_HEADERS_ROCM}
${GGML_SOURCES_BLAS} ${GGML_HEADERS_BLAS}
${GGML_SOURCES_LLAMAFILE} ${GGML_HEADERS_LLAMAFILE}
${GGML_SOURCES_DNNL} ${GGML_HEADERS_DNNL}
)

if (EMSCRIPTEN)
Expand Down
Loading

0 comments on commit a5d602d

Please sign in to comment.