diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b7658016c49b8dde263d9556f5c1b9f45dc4328a..0da8d648cddbdb8803dfe7b9a5463b2b33f8578a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -30,7 +30,7 @@ build-clang: interruptible: true stage: build script: - - cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DKLEIDIAI_BUILD_TESTS=ON -S . -B build/ + - cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DKAI_BUILD_TESTS=ON -S . -B build/ - cmake --build ./build artifacts: expire_in: 1 day @@ -43,7 +43,7 @@ build-clang-cov: interruptible: true stage: build script: - - cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DKLEIDIAI_BUILD_TESTS=ON -DCMAKE_C_FLAGS="--coverage" -DCMAKE_CXX_FLAGS="--coverage" -S . -B build + - cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DKAI_BUILD_TESTS=ON -DCMAKE_C_FLAGS="--coverage" -DCMAKE_CXX_FLAGS="--coverage" -S . -B build - cmake --build ./build artifacts: expire_in: 1 day @@ -56,7 +56,7 @@ build-gcc: interruptible: true stage: build script: - - cmake -G Ninja -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_BUILD_TYPE=Release -DKLEIDIAI_BUILD_TESTS=ON -S . -B build/ + - cmake -G Ninja -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_BUILD_TYPE=Release -DKAI_BUILD_TESTS=ON -S . -B build/ - cmake --build ./build clang-tidy-checks: @@ -65,7 +65,7 @@ clang-tidy-checks: interruptible: true stage: build script: - - cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DKLEIDIAI_BUILD_TESTS=ON -DKLEIDIAI_ENABLE_CLANG_TIDY=ON -S . -B build/ + - cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DKAI_BUILD_TESTS=ON -DKAI_ENABLE_CLANG_TIDY=ON -S . -B build/ - cmake --build ./build pre-commit-hooks: @@ -86,7 +86,7 @@ test-linux-aarch64: dependencies: - build-clang script: - - ./build/kleidiai_test --gtest_filter=*:-*sme* + - ./build/kai_test --gtest_filter=*:-*sme* test-linux-aarch64-cov: extends: @@ -96,7 +96,7 @@ test-linux-aarch64-cov: dependencies: - build-clang-cov script: - - ./build/kleidiai_test --gtest_filter=*:-*sme* + - ./build/kai_test --gtest_filter=*:-*sme* - mkdir -p build/coverage - gcovr --gcov-executable="llvm-cov gcov" --exclude-unreachable-branches --exclude=build --exclude=test --exclude-lines-by-pattern=".*KAI_(?:ASSERT|ASSUME|ERROR).*" --exclude-branches-by-pattern=".*KAI_(?:ASSERT|ASSUME).*" --json=build/coverage/linux-aarch64.json -j --root . build artifacts: @@ -122,7 +122,7 @@ test-linux-aarch64-cov-fvp: cd '$PWD' mkdir -p artifacts - GCOV_PREFIX=artifacts ./build/kleidiai_test --gtest_filter=*sme* && echo 'FINISHED WITHOUT ERROR' + GCOV_PREFIX=artifacts ./build/kai_test --gtest_filter=*sme* && echo 'FINISHED WITHOUT ERROR' tar cf artifacts.tar -C artifacts . sync @@ -131,7 +131,7 @@ test-linux-aarch64-cov-fvp: echo '==================================================' " >> startup - e2cp -O 0 -G 0 -P 755 startup linux-rootfs.img:/root/startup - - e2cp -a -O 0 -G 0 -P 755 build/kleidiai_test linux-rootfs.img:"$PWD/build/kleidiai_test" + - e2cp -a -O 0 -G 0 -P 755 build/kai_test linux-rootfs.img:"$PWD/build/kai_test" - > /opt/devtools/fvp_base_aemva/models/Linux64_armv8l_GCC-9.3/FVP_Base_RevC-2xAEMvA \ -C cache_state_modelled=0 \ diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f8c772938990f89eec476e52bd951ec2c670af6..48ef2a53a709f81579766a4ba035915885be97e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,18 +19,17 @@ set(CMAKE_CXX_STANDARD_REQUIRED OFF) set(CMAKE_CXX_EXTENSIONS OFF) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") -include(FetchGTest) -option(KLEIDIAI_BUILD_TESTS "Build unit tests." ON) -option(KLEIDIAI_ENABLE_CLANG_TIDY "Build with Clang-Tidy checks." OFF) -option(KLEIDIAI_BUILD_BENCHMARK "Build the benchmark tool." OFF) +option(KAI_BUILD_TESTS "Build unit tests." ON) +option(KAI_ENABLE_CLANG_TIDY "Build with Clang-Tidy checks." OFF) +option(KAI_BUILD_BENCHMARK "Build the benchmark tool." OFF) -if(KLEIDIAI_ENABLE_CLANG_TIDY) +if(KAI_ENABLE_CLANG_TIDY) set(CMAKE_C_CLANG_TIDY "clang-tidy") set(CMAKE_CXX_CLANG_TIDY "clang-tidy") endif() -set(KLEIDIAI_WARNING_FLAGS_C +set(KAI_WARNING_FLAGS_C "-Wall" "-Wdisabled-optimization" "-Werror" @@ -45,95 +44,97 @@ set(KLEIDIAI_WARNING_FLAGS_C "-Wswitch-default" ) -set(KLEIDIAI_WARNING_FLAGS_CXX +set(KAI_WARNING_FLAGS_CXX "-Wctor-dtor-privacy" "-Weffc++" "-Woverloaded-virtual" "-Wsign-promo" ) -set(KLEIDIAI_WARNING_FLAGS - ${KLEIDIAI_WARNING_FLAGS_C} - $<$:${KLEIDIAI_WARNING_FLAGS_CXX}> +set(KAI_WARNING_FLAGS + ${KAI_WARNING_FLAGS_C} + $<$:${KAI_WARNING_FLAGS_CXX}> ) -set(KLEIDIAI_FILES_NEON +set(KAI_FILES_NEON kai/ukernels/matmul/pack/kai_lhs_quant_pack_qai8dxp_f32.c kai/ukernels/matmul/pack/kai_rhs_pack_nxk_qsi4cxp_qsu4cxs1s0.c ) -set(KLEIDIAI_FILES_NEON_FP16 +set(KAI_FILES_NEON_FP16 kai/ukernels/matmul/pack/kai_rhs_pack_kxn_f16p16x1biasf16_f16_f16_neon.c kai/ukernels/matmul/matmul_clamp_f16_f16_f16p/kai_matmul_clamp_f16_f16_f16p16x1biasf16_6x16x8_neon_mla.c ) -set(KLEIDIAI_FILES_NEON_DOTPROD +set(KAI_FILES_NEON_DOTPROD kai/ukernels/matmul/matmul_clamp_f32_qai8dxp_qsi4cxp/kai_matmul_clamp_f32_qai8dxp1x8_qsi4cxp4x8_1x4x32_neon_dotprod.c kai/ukernels/matmul/matmul_clamp_f32_qai8dxp_qsi4cxp/kai_matmul_clamp_f32_qai8dxp1x8_qsi4cxp8x8_1x8x32_neon_dotprod.c ) -set(KLEIDIAI_FILES_NEON_I8MM +set(KAI_FILES_NEON_I8MM kai/ukernels/matmul/matmul_clamp_f32_qai8dxp_qsi4cxp/kai_matmul_clamp_f32_qai8dxp4x8_qsi4cxp4x8_4x4x32_neon_i8mm.c kai/ukernels/matmul/matmul_clamp_f32_qai8dxp_qsi4cxp/kai_matmul_clamp_f32_qai8dxp4x8_qsi4cxp4x8_8x4x32_neon_i8mm.c kai/ukernels/matmul/matmul_clamp_f32_qai8dxp_qsi4cxp/kai_matmul_clamp_f32_qai8dxp4x8_qsi4cxp8x8_4x8x32_neon_i8mm.c kai/ukernels/matmul/matmul_clamp_f32_qai8dxp_qsi4cxp/kai_matmul_clamp_f32_qai8dxp4x8_qsi4cxp8x8_8x8x32_neon_i8mm.c ) -set(KLEIDIAI_FILES_SME +set(KAI_FILES_SME kai/ukernels/matmul/pack/kai_rhs_pack_kxn_f32p2vlx1biasf32_f32_f32_sme.c kai/ukernels/matmul/pack/kai_lhs_pack_f32p2vlx1_f32_sme.c ) -set(KLEIDIAI_FILES_SME2 +set(KAI_FILES_SME2 kai/ukernels/matmul/matmul_clamp_f32_f32p_f32p/kai_matmul_clamp_f32_f32p2vlx1_f32p2vlx1biasf32_sme2_mopa.c ) -add_library(kleidiai - ${KLEIDIAI_FILES_NEON} - ${KLEIDIAI_FILES_NEON_FP16} - ${KLEIDIAI_FILES_NEON_DOTPROD} - ${KLEIDIAI_FILES_NEON_I8MM} - ${KLEIDIAI_FILES_SME} - ${KLEIDIAI_FILES_SME2} +add_library(kai + ${KAI_FILES_NEON} + ${KAI_FILES_NEON_FP16} + ${KAI_FILES_NEON_DOTPROD} + ${KAI_FILES_NEON_I8MM} + ${KAI_FILES_SME} + ${KAI_FILES_SME2} ) -target_include_directories(kleidiai +target_include_directories(kai PUBLIC . ) -target_compile_options(kleidiai - PRIVATE ${KLEIDIAI_WARNING_FLAGS} +target_compile_options(kai + PRIVATE ${KAI_WARNING_FLAGS} ) -foreach(KLEIDIAI_SOURCE_FILE IN LISTS KLEIDIAI_FILES_NEON) - set_property(SOURCE ${KLEIDIAI_SOURCE_FILE} PROPERTY COMPILE_OPTIONS -march=armv8-a) +foreach(KAI_SOURCE_FILE IN LISTS KAI_FILES_NEON) + set_property(SOURCE ${KAI_SOURCE_FILE} PROPERTY COMPILE_OPTIONS -march=armv8-a) endforeach() -foreach(KLEIDIAI_SOURCE_FILE IN LISTS KLEIDIAI_FILES_NEON_FP16) - set_property(SOURCE ${KLEIDIAI_SOURCE_FILE} PROPERTY COMPILE_OPTIONS -march=armv8.2-a+fp16) +foreach(KAI_SOURCE_FILE IN LISTS KAI_FILES_NEON_FP16) + set_property(SOURCE ${KAI_SOURCE_FILE} PROPERTY COMPILE_OPTIONS -march=armv8.2-a+fp16) endforeach() -foreach(KLEIDIAI_SOURCE_FILE IN LISTS KLEIDIAI_FILES_NEON_DOTPROD) - set_property(SOURCE ${KLEIDIAI_SOURCE_FILE} PROPERTY COMPILE_OPTIONS -march=armv8.2-a+dotprod) +foreach(KAI_SOURCE_FILE IN LISTS KAI_FILES_NEON_DOTPROD) + set_property(SOURCE ${KAI_SOURCE_FILE} PROPERTY COMPILE_OPTIONS -march=armv8.2-a+dotprod) endforeach() -foreach(KLEIDIAI_SOURCE_FILE IN LISTS KLEIDIAI_FILES_NEON_I8MM) - set_property(SOURCE ${KLEIDIAI_SOURCE_FILE} PROPERTY COMPILE_OPTIONS -march=armv8.2-a+i8mm) +foreach(KAI_SOURCE_FILE IN LISTS KAI_FILES_NEON_I8MM) + set_property(SOURCE ${KAI_SOURCE_FILE} PROPERTY COMPILE_OPTIONS -march=armv8.2-a+i8mm) endforeach() -foreach(KLEIDIAI_SOURCE_FILE IN LISTS KLEIDIAI_FILES_SME) - set_property(SOURCE ${KLEIDIAI_SOURCE_FILE} PROPERTY COMPILE_OPTIONS -march=armv8.2-a+sve+sve2) +foreach(KAI_SOURCE_FILE IN LISTS KAI_FILES_SME) + set_property(SOURCE ${KAI_SOURCE_FILE} PROPERTY COMPILE_OPTIONS -march=armv8.2-a+sve+sve2) endforeach() -foreach(KLEIDIAI_SOURCE_FILE IN LISTS KLEIDIAI_FILES_SME2) - set_property(SOURCE ${KLEIDIAI_SOURCE_FILE} PROPERTY COMPILE_OPTIONS -march=armv8.2-a+sve+sve2) +foreach(KAI_SOURCE_FILE IN LISTS KAI_FILES_SME2) + set_property(SOURCE ${KAI_SOURCE_FILE} PROPERTY COMPILE_OPTIONS -march=armv8.2-a+sve+sve2) endforeach() -if(KLEIDIAI_BUILD_TESTS) +if(KAI_BUILD_TESTS) + include(FetchGTest) + enable_testing() include(GoogleTest) - add_library(kleidiai_test_framework + add_library(kai_test_framework test/common/data_type.cpp test/common/data_format.cpp test/common/printer.cpp @@ -157,32 +158,32 @@ if(KLEIDIAI_BUILD_TESTS) test/reference/cast.cpp ) - target_compile_options(kleidiai_test_framework - PUBLIC ${KLEIDIAI_WARNING_FLAGS} + target_compile_options(kai_test_framework + PUBLIC ${KAI_WARNING_FLAGS} PUBLIC -march=armv8.2-a+fp16+bf16 ) set_property(SOURCE test/common/sme.cpp PROPERTY COMPILE_OPTIONS -march=armv8.2-a+sve) - target_link_libraries(kleidiai_test_framework - PUBLIC kleidiai + target_link_libraries(kai_test_framework + PUBLIC kai ) - add_executable(kleidiai_test + add_executable(kai_test test/tests/matmul_test.cpp ) - target_link_libraries(kleidiai_test - PRIVATE kleidiai_test_framework + target_link_libraries(kai_test + PRIVATE kai_test_framework PRIVATE GTest::gtest_main ) # Cross-compiling is a common use case which creates a conflict if DISCOVERY_MODE is set to POST_BUILD (by default) # since the host platform does not match the target. Setting the mode to PRE_TEST avoids this conflict. - gtest_discover_tests(kleidiai_test DISCOVERY_MODE PRE_TEST) + gtest_discover_tests(kai_test DISCOVERY_MODE PRE_TEST) endif() -if(KLEIDIAI_BUILD_BENCHMARK) +if(KAI_BUILD_BENCHMARK) # https://github.com/google/benchmark/issues/351 if(NOT (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ARM")) set(CMAKE_CROSSCOMPILING TRUE CACHE INTERNAL "") @@ -190,15 +191,15 @@ if(KLEIDIAI_BUILD_BENCHMARK) endif() include(FetchGBench) - add_executable(kleidiai_benchmark + add_executable(kai_benchmark benchmark/main.cpp) target_link_libraries( - kleidiai_benchmark - kleidiai + kai_benchmark + kai benchmark::benchmark) - set(KLEIDIAI_BENCHMARK_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) - target_include_directories(kleidiai_benchmark - PRIVATE KLEIDIAI_BENCHMARK_INCLUDE_DIR) + set(KAI_BENCHMARK_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) + target_include_directories(kai_benchmark + PRIVATE KAI_BENCHMARK_INCLUDE_DIR) endif()