/
vuron
/
adept
Обзор
Документация
Войти
/
vuron
/
adept
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
CMakeLists.txt
256 строк
8 KB
lexasub
introduce optional usage openblas
09 апр 2025, 11:01
09 апр 2025, 11:01
3f09613
Код
Авторство
О чём код?
cmake_minimum_required(VERSION 3.22) project(adept VERSION 0.0.1 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_PREFIX_PATH third_party/libs) option(BUILD_CPP_APPS "Build sample c++ applications" ON) option(BUILD_TESTS "Build tests" ON) option(BUILD_PYTHON_BINDINGS "Build python bindings" OFF) option(WITH_ASAN "Build apps and tests with address sanitizer" OFF) option(WITH_VULKAN "Build with Vulkan GPU backend" CPU) option(WITH_CPU "Build with CPU backend" ON) find_package(TBB REQUIRED) if (WITH_CPU) add_compile_definitions(WITH_CPU) find_package(OpenBLAS REQUIRED) find_package(hwy REQUIRED) endif() if (WITH_VULKAN) find_package(kompute REQUIRED) endif() include(cmake/vulkan_compiler.cmake) add_compile_options( -Wall -Wextra -Wno-unused-parameter -march=native $<$<CONFIG:RELEASE>:-Ofast> $<$<CONFIG:RELEASE>:-g> $<$<CONFIG:DEBUG>:-O0> $<$<CONFIG:DEBUG>:-ggdb3> ) set(LIB_SOURCES src/backends/memory_pool.cpp) if (WITH_CPU) list(APPEND LIB_SOURCES src/backends/cpu/tensor_factory.cpp src/backends/cpu/tensor_arithmetics.cpp src/backends/cpu/tensor_mat_tr.cpp src/backends/cpu/tensor_matmul.cpp src/backends/cpu/stack.cpp src/backends/cpu/log_softmax.cpp src/backends/cpu/nll_loss.cpp src/backends/cpu/init.cpp src/backends/cpu/batchnorm2d.cpp src/backends/cpu/conv2d.cpp src/backends/cpu/avgpool2d.cpp src/backends/cpu/maxpool2d.cpp src/backends/cpu/pool_utils.cpp src/backends/cpu/cpu_backend_init.cpp src/backends/cpu/activations.cpp ) endif() list(APPEND LIB_SOURCES src/serialize/fileoutput.cpp src/serialize/fileinput.cpp src/autograd/variable.cpp src/autograd/grad_guard.cpp src/nn/MSE.cpp src/nn/cross_entropy.cpp src/nn/module.cpp src/nn/linear.cpp src/nn/conv2d.cpp src/nn/avgpool2d.cpp src/nn/maxpool2d.cpp src/nn/batchnorm2d.cpp src/nn/adam.cpp src/nn/init.cpp src/nn/activations.cpp src/data/dataloader.cpp src/data/mnistdataset.cpp src/dispatch/dispatcher_init.cpp src/tensor.cpp src/index_utils.cpp ) if (WITH_VULKAN) list(APPEND LIB_SOURCES src/backends/gpu/vulkan/vulkan_backend_init.cpp src/backends/gpu/vulkan/manager.cpp src/backends/gpu/vulkan/tensorimpl.cpp ) vulkan_compile(addf) set(SHADER_SOURCES src/backends/gpu/vulkan/shaders/addf.hpp) add_library(vulkan_shaders INTERFACE ${SHADER_SOURCES}) endif() add_library(adept OBJECT ${LIB_SOURCES}) target_include_directories(adept PRIVATE ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/third_party ${CMAKE_SOURCE_DIR}/third_party/libs/include ${OpenBLAS_INCLUDE_DIRS}) if (BUILD_PYTHON_BINDINGS) target_compile_definitions(adept PRIVATE USE_PYBIND11=1) endif() if (BUILD_CPP_APPS) add_executable(mlp apps/cpp/mlp.cpp) target_include_directories(mlp PRIVATE ${CMAKE_SOURCE_DIR}/include) target_link_libraries(mlp adept TBB::tbb) if (WITH_CPU) target_link_libraries(mlp hwy::hwy OpenBLAS::OpenBLAS) endif() add_executable(convnet apps/cpp/convnet.cpp) target_include_directories(convnet PRIVATE ${CMAKE_SOURCE_DIR}/third_party ${CMAKE_SOURCE_DIR}/include) target_link_libraries(convnet adept TBB::tbb) if (WITH_CPU) target_link_libraries(convnet hwy::hwy OpenBLAS::OpenBLAS) endif() if (WITH_VULKAN) target_link_libraries(mlp kompute::kompute) target_link_libraries(convnet kompute::kompute) endif() if (WITH_ASAN) target_compile_options(convnet PRIVATE $<$<CONFIG:DEBUG>:-fsanitize=address> ) target_link_options(convnet PRIVATE $<$<CONFIG:DEBUG>:-fsanitize=address> ) endif() endif(BUILD_CPP_APPS) if (BUILD_TESTS) include(CTest if) set(TEST_SOURCES tests/tests.cpp tests/mempool_tests.cpp tests/index_utils_tests.cpp ) if (WITH_CPU) list(APPEND TEST_SOURCES tests/create_tests.cpp tests/print_tests.cpp tests/arithmetic_tests.cpp tests/broadcast_tests.cpp tests/transpose_tests.cpp tests/matmul_tests.cpp tests/stats_tests.cpp tests/node_tests.cpp tests/serialize_tests.cpp tests/grad_mode_tests.cpp tests/linear_tests.cpp tests/conv2d_tests.cpp tests/avgpool2d_tests.cpp tests/maxpool2d_tests.cpp tests/batchnorm2d_tests.cpp tests/irange_tests.cpp tests/activation_tests.cpp tests/adam_tests.cpp ) endif() if (WITH_VULKAN) list(APPEND TEST_SOURCES tests/vulkan_tests.cpp ) endif() add_executable(tests ${TEST_SOURCES}) target_include_directories(tests PRIVATE ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/third_party ${CMAKE_SOURCE_DIR}/third_party/libs/include) target_link_libraries(tests PRIVATE adept TBB::tbb) if (WITH_CPU) target_link_libraries(tests PRIVATE OpenBLAS::OpenBLAS) endif() if (WITH_VULKAN) target_link_libraries(tests PRIVATE kompute::kompute vulkan_shaders) endif() if (WITH_ASAN) target_compile_options(tests PRIVATE $<$<CONFIG:RELEASE>:-fsanitize=address> $<$<CONFIG:DEBUG>:-fsanitize=address> ) target_link_options(tests PRIVATE $<$<CONFIG:RELEASE>:-fsanitize=address> $<$<CONFIG:DEBUG>:-fsanitize=address> ) endif() add_test(NAME all-tests COMMAND tests) add_test(NAME create_tests COMMAND tests [create]) add_test(NAME arithmetic_tests COMMAND tests [arithmetics]) add_test(NAME matmul-tests COMMAND tests [matmul]) add_test(NAME linear-tests COMMAND tests [linear]) add_test(NAME vulkan-tests COMMAND tests [vulkan]) endif(BUILD_TESTS) if (BUILD_PYTHON_BINDINGS) set(PYBIND11_FINDPYTHON ON) add_subdirectory(third_party/pybind11) set(PYBIND_SOURCES python/cpp_bindings/adeptmodule.cpp python/cpp_bindings/shape_py.cpp python/cpp_bindings/tensor_props_py.cpp python/cpp_bindings/tensor_py.cpp python/cpp_bindings/variable_py.cpp python/cpp_bindings/module_py.cpp python/cpp_bindings/linear_py.cpp python/cpp_bindings/conv2d_py.cpp python/cpp_bindings/avgpool2d_py.cpp python/cpp_bindings/maxpool2d_py.cpp python/cpp_bindings/sgd_py.cpp python/cpp_bindings/dataset_py.cpp python/cpp_bindings/mnistdataset_py.cpp python/cpp_bindings/dataloader_py.cpp python/cpp_bindings/losses_py.cpp python/cpp_bindings/fileinput_py.cpp python/cpp_bindings/fileoutput_py.cpp python/cpp_bindings/grad_guard_py.cpp python/cpp_bindings/activations_py.cpp python/cpp_bindings/batchnorm2d_py.cpp python/cpp_bindings/adam_py.cpp ) pybind11_add_module(adeptpy ${PYBIND_SOURCES}) target_include_directories(adeptpy PRIVATE ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/third_party/ ${CMAKE_SOURCE_DIR}/third_party/libs/include ${CMAKE_SOURCE_DIR}/third_party/pybind11/include) #target_link_libraries(adeptpy PRIVATE adept hwy::hwy OpenBLAS::OpenBLAS TBB::tbb) if (WITH_VULKAN) target_link_libraries(adeptpy PRIVATE kompute::kompute) endif() target_compile_definitions(adeptpy PRIVATE USE_PYBIND11=1) target_compile_options(adeptpy PRIVATE -fPIC) target_compile_options(adept PRIVATE -fPIC) install(TARGETS adeptpy DESTINATION ${CMAKE_SOURCE_DIR}/python/src/adept) add_custom_command(TARGET adeptpy POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:adeptpy> ${CMAKE_SOURCE_DIR}/python/src/adept/) endif(BUILD_PYTHON_BINDINGS)