@@ -22,6 +22,10 @@ set(CMAKE_CXX_STANDARD 17)
2222set (CMAKE_CXX_STANDARD_REQUIRED ON )
2323set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
2424
25+ # Optional: OneDNN BRGeMM micro-kernel support (x86-64 only).
26+ # Enable with: cmake -DGEMMA_ONEDNN_BRGEMM=ON ...
27+ option (GEMMA_ONEDNN_BRGEMM "Enable OneDNN BRGeMM micro-kernel for MatMul (x86-64)" OFF )
28+
2529if (EMSCRIPTEN)
2630 add_compile_options ("-sMEMORY64" )
2731 add_compile_options ("-msimd128" )
@@ -85,6 +89,23 @@ if(EMSCRIPTEN)
8589 target_compile_options (benchmark PRIVATE -Wno-c2y-extensions )
8690endif ()
8791
92+ # OneDNN BRGeMM micro-kernel support (optional, x86-64 only).
93+ if (GEMMA_ONEDNN_BRGEMM)
94+ set (DNNL_BUILD_TESTS OFF CACHE BOOL "" FORCE )
95+ set (DNNL_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE )
96+ set (DNNL_CPU_RUNTIME "SEQ" CACHE STRING "" FORCE )
97+ set (DNNL_GPU_RUNTIME "NONE" CACHE STRING "" FORCE )
98+ set (DNNL_LIBRARY_TYPE "STATIC" CACHE STRING "" FORCE )
99+ set (DNNL_EXPERIMENTAL_UKERNEL ON CACHE BOOL "" FORCE )
100+ FetchContent_Declare (onednn
101+ GIT_REPOSITORY https://github.com/uxlfoundation/oneDNN.git
102+ GIT_TAG v3.11
103+ EXCLUDE_FROM_ALL
104+ )
105+ FetchContent_MakeAvailable (onednn)
106+ message (STATUS "OneDNN BRGeMM micro-kernel support enabled" )
107+ endif ()
108+
88109# Base source files
89110set (SOURCES
90111 compression/compress-inl.h
@@ -141,6 +162,8 @@ set(SOURCES
141162 ops/matmul-inl.h
142163 ops/matmul.cc
143164 ops/matmul.h
165+ ops/brgemm.h
166+ ops/brgemm-inl.h
144167 ops/ops-inl.h
145168 ops/ops.h
146169 ops/sum-inl.h
@@ -191,6 +214,10 @@ target_link_libraries(libgemma hwy hwy_contrib sentencepiece-static)
191214target_include_directories (libgemma PUBLIC ${sentencepiece_SOURCE_DIR} )
192215target_compile_definitions (libgemma PRIVATE $<$<PLATFORM_ID :Windows >:_CRT_SECURE_NO_WARNINGS NOMINMAX >)
193216target_compile_options (libgemma PRIVATE $<$<PLATFORM_ID :Windows >:-Wno -deprecated -declarations >)
217+ if (GEMMA_ONEDNN_BRGEMM)
218+ target_compile_definitions (libgemma PUBLIC GEMMA_ONEDNN_BRGEMM=1 DNNL_EXPERIMENTAL_UKERNEL )
219+ target_link_libraries (libgemma dnnl )
220+ endif ()
194221install (TARGETS libgemma DESTINATION lib)
195222
196223# Shared library target for C# interop
@@ -215,6 +242,10 @@ target_compile_definitions(gemma_shared
215242 $<$<PLATFORM_ID :Windows >:_CRT_SECURE_NO_WARNINGS NOMINMAX >
216243)
217244target_compile_options (gemma_shared PRIVATE $<$<PLATFORM_ID :Windows >:-Wno -deprecated -declarations >)
245+ if (GEMMA_ONEDNN_BRGEMM)
246+ target_compile_definitions (gemma_shared PUBLIC GEMMA_ONEDNN_BRGEMM=1 DNNL_EXPERIMENTAL_UKERNEL )
247+ target_link_libraries (gemma_shared PRIVATE dnnl )
248+ endif ()
218249install (TARGETS gemma_shared DESTINATION lib)
219250install (FILES gemma/c_api.h DESTINATION include/gemma)
220251install (FILES gemma/GemmaInterop.cs DESTINATION include/gemma)
0 commit comments