Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Nested build directory
/build*
/build-*
/bin

# vscode configurations
/.vscode
100 changes: 100 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
##===- CMakeLists.txt - buddy-examples cmake root ------------*- cmake -*-===//
##
## Configure the buddy-examples build.
##
##===----------------------------------------------------------------------===//
cmake_minimum_required(VERSION 3.10)

#-------------------------------------------------------------------------------
# Project setup and globals
#-------------------------------------------------------------------------------
project(buddy-examples LANGUAGES CXX C)

set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED YES)

#-------------------------------------------------------------------------------
# BUDDY configuration
#-------------------------------------------------------------------------------
set(BuddyMLIR_DIR ${BUDDY_MLIR_BUILD_DIR}/cmake)
find_package(BuddyMLIR REQUIRED CONFIG)

# BUDDY project.
set(BUDDY_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(BUDDY_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/bin)
set(BUDDY_MLIR_BINARY_DIR ${BUDDY_MLIR_BUILD_DIR}/bin)

set(BUILD_TESTS OFF CACHE BOOL "Build tests")
set(BUILD_VALIDATION OFF CACHE BOOL "Build validations")
set(BUILD_CORRECTNESS OFF CACHE BOOL "Build correctness checking")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BUDDY_BINARY_DIR})

# MLIR binary directory.
set(LLVM_MLIR_BINARY_DIR ${BUDDY_MLIR_BUILD_DIR}/../llvm/build/bin)
set(LLVM_MLIR_LIBRARY_DIR ${BUDDY_MLIR_BUILD_DIR}/../llvm/build/lib)

if(CROSS_COMPILE_RVV)
set(RISCV_GNU_TOOLCHAIN ${BUDDY_MLIR_BUILD_DIR}/thirdparty/riscv-gnu-toolchain)
set(RISCV_GNU_TOOLCHAIN_SYSROOT ${RISCV_GNU_TOOLCHAIN}/sysroot)
set(BUDDY_OPT_ATTR +v,+m CACHE STRING "Target Architecture.")
set(BUDDY_OPT_TRIPLE riscv64 CACHE STRING "Target Triple.")
set(BUDDY_LIB_DIR ${BUDDY_MLIR_BUILD_CROSS_DIR}/lib)
set(OMP_SHARED_DIR ${RISCV_OMP_SHARED})
else()
set(BUDDY_OPT_ATTR avx512f CACHE STRING "Target Architecture.")
set(BUDDY_OPT_TRIPLE x86_64-unknown-linux-gnu CACHE STRING "Target Triple.")
set(BUDDY_LIB_DIR ${BUDDY_MLIR_BUILD_DIR}/lib)
set(OMP_SHARED_DIR ${LLVM_MLIR_LIBRARY_DIR})
endif()

# Add BUDDY files to the include path
include_directories(${BUDDY_MAIN_INCLUDE_DIR})
include_directories(${BUDDY_MLIR_INTERFACE_DIR})
include_directories(${BUDDY_THIRDPARTY_INCLUDE_DIR})

# Helper functions.
include(${BUDDY_SOURCE_DIR}/cmake/buddy-examples.cmake)

# -------------------------------------------------------------------------------
# Deploy google/benchmark
# -------------------------------------------------------------------------------
message(STATUS "Configuring benchmarks: google")

include(ExternalProject)

ExternalProject_Add(project_googlebenchmark
GIT_REPOSITORY https://github.com/google/benchmark.git
GIT_TAG "v1.6.0"
GIT_SHALLOW 1
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/vendor/benchmark
TIMEOUT 10
BUILD_BYPRODUCTS <INSTALL_DIR>/lib/${CMAKE_STATIC_LIBRARY_PREFIX}benchmark${CMAKE_STATIC_LIBRARY_SUFFIX}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/vendor/benchmark
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
-DBENCHMARK_ENABLE_TESTING=OFF
-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
-DCMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
UPDATE_COMMAND ""
TEST_COMMAND "")

ExternalProject_Get_Property(project_googlebenchmark INSTALL_DIR)

file(MAKE_DIRECTORY ${INSTALL_DIR}/include)
add_library(GoogleBenchmark STATIC IMPORTED)
target_include_directories(GoogleBenchmark INTERFACE ${INSTALL_DIR}/include)
set_property(TARGET GoogleBenchmark PROPERTY IMPORTED_LOCATION
"${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}benchmark${CMAKE_STATIC_LIBRARY_SUFFIX}")

add_dependencies(GoogleBenchmark project_googlebenchmark)

find_package(Threads)
target_link_libraries(GoogleBenchmark INTERFACE Threads::Threads)

# -------------------------------------------------------------------------------
# Subdirectory
# -------------------------------------------------------------------------------
add_subdirectory(DeepSeekR1)
130 changes: 130 additions & 0 deletions DeepSeekR1/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
add_custom_command(
OUTPUT
${CMAKE_CURRENT_BINARY_DIR}/forward.mlir
${CMAKE_CURRENT_BINARY_DIR}/subgraph0.mlir
${CMAKE_CURRENT_BINARY_DIR}/arg0-deepseek-r1.data
COMMAND
python3 ${CMAKE_CURRENT_SOURCE_DIR}/import-deepseek-r1.py
--output-dir ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating forward.mlir, subgraph0.mlir and arg0.data..."
)

set(BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}/../bin)
add_custom_command(
OUTPUT
${BIN_DIR}/arg0-deepseek-r1.data
${BIN_DIR}/vocab-deepseek-r1.txt
COMMAND ${CMAKE_COMMAND} -E rename
${CMAKE_CURRENT_BINARY_DIR}/arg0-deepseek-r1.data
${BIN_DIR}/arg0-deepseek-r1.data
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/vocab-deepseek-r1.txt
${BIN_DIR}/
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/vocab-deepseek-r1.txt
${CMAKE_CURRENT_BINARY_DIR}/arg0-deepseek-r1.data
COMMENT "Preparing arg0-deepseek-r1.data and vocab-deepseek-r1.txt..."
)
add_custom_target(deepseek_data
DEPENDS
${BIN_DIR}/arg0-deepseek-r1.data
${BIN_DIR}/vocab-deepseek-r1.txt
)

add_executable(deepseek-r1
Main.cpp
)
add_dependencies(deepseek-r1
deepseek_data
)
target_link_libraries(deepseek-r1
GoogleBenchmark
${LLVM_LIBRARY_DIR}
)

separate_arguments(CLANG_FLAGS_LIST UNIX_COMMAND "${CMAKE_C_FLAGS}")

################################################################################
#
# Build buddy optimization target.
#
################################################################################
add_custom_command(
OUTPUT forward_buddy.o
COMMAND
cat ${CMAKE_CURRENT_BINARY_DIR}/forward.mlir |
sed -e {s/@forward/@forward_buddy/} |
sed -e {s/@subgraph0/@subgraph0_buddy/} |
${LLVM_MLIR_BINARY_DIR}/mlir-opt
-expand-strided-metadata
-finalize-memref-to-llvm
-llvm-request-c-wrappers
-convert-func-to-llvm
-reconcile-unrealized-casts |
${LLVM_MLIR_BINARY_DIR}/mlir-translate -mlir-to-llvmir -o forward_buddy.ll
COMMAND
${LLVM_MLIR_BINARY_DIR}/clang -O3 ${CLANG_FLAGS_LIST} forward_buddy.ll
-c -save-temps -o ${CMAKE_CURRENT_BINARY_DIR}/forward_buddy.o
DEPENDS
${CMAKE_CURRENT_BINARY_DIR}/forward.mlir
COMMENT "Building forward_buddy.o"
VERBATIM
)

add_custom_command(
OUTPUT subgraph0_buddy.o
COMMAND
cat ${CMAKE_CURRENT_BINARY_DIR}/subgraph0.mlir |
sed -e {s/@subgraph0/@subgraph0_buddy/} |
${LLVM_MLIR_BINARY_DIR}/mlir-opt
-pass-pipeline
"builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" |
${BUDDY_MLIR_BINARY_DIR}/buddy-opt
-convert-elementwise-to-linalg
-arith-expand
-eliminate-empty-tensors
-empty-tensor-to-alloc-tensor
-one-shot-bufferize
-matmul-parallel-vectorization-optimize
-batchmatmul-optimize
-convert-linalg-to-affine-loops
-affine-loop-fusion
-affine-parallelize
-lower-affine
-convert-scf-to-openmp
-func-bufferize-dynamic-offset
-tensor-bufferize
-arith-bufferize
-buffer-deallocation
-finalizing-bufferize
-convert-vector-to-scf
-expand-strided-metadata
-cse
-convert-vector-to-llvm
-memref-expand
-arith-expand
-convert-arith-to-llvm
-finalize-memref-to-llvm
-convert-scf-to-cf
-llvm-request-c-wrappers
-convert-openmp-to-llvm
-convert-arith-to-llvm
-convert-math-to-llvm
-convert-math-to-libm
-convert-func-to-llvm
-reconcile-unrealized-casts |
${LLVM_MLIR_BINARY_DIR}/mlir-translate -mlir-to-llvmir -o subgraph0_buddy.ll
COMMAND ${LLVM_MLIR_BINARY_DIR}/clang -O3 ${CLANG_FLAGS_LIST} subgraph0_buddy.ll
-c -save-temps -o ${CMAKE_CURRENT_BINARY_DIR}/subgraph0_buddy.o
DEPENDS
${CMAKE_CURRENT_BINARY_DIR}/subgraph0.mlir
COMMENT "Building subgraph0_buddy.o"
VERBATIM
)
add_library(deepseekr1_buddy STATIC subgraph0_buddy.o forward_buddy.o)
set_target_properties(deepseekr1_buddy PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(deepseek-r1
deepseekr1_buddy
${BUDDY_LIB_DIR}/libStaticMLIRCRunnerUtils.a
${OMP_SHARED_DIR}/libomp.so
)
Loading