diff --git a/build/cmake_deps.toml b/build/cmake_deps.toml index bbc9eec3a0e..a251891e622 100644 --- a/build/cmake_deps.toml +++ b/build/cmake_deps.toml @@ -89,6 +89,7 @@ deps = [ "executorch", "executorch_core", "extension_threadpool", + "optimized_cpublas", "portable_kernels", ] @@ -146,6 +147,7 @@ deps = [ "executorch_core", "executorch", "extension_threadpool", + "optimized_cpublas", "portable_kernels", ] # ---------------------------------- core end ---------------------------------- @@ -413,6 +415,7 @@ excludes = [ deps = [ "executorch", "executorch_core", + "optimized_cpublas", "optimized_kernels", "extension_threadpool", "reduce_util", @@ -452,6 +455,7 @@ deps = [ "extension_data_loader", "extension_module", "extension_threadpool", + "optimized_cpublas", "portable_kernels", "quantized_kernels", "xnnpack_backend", diff --git a/build/executorch-config.cmake b/build/executorch-config.cmake index 931d31de8ef..13ec0b876ad 100644 --- a/build/executorch-config.cmake +++ b/build/executorch-config.cmake @@ -89,6 +89,7 @@ set(lib_list pthreadpool vulkan_backend optimized_kernels + optimized_portable_kernels cpublas eigen_blas optimized_ops_lib @@ -132,7 +133,26 @@ endforeach() # target_compile_options/target_compile_definitions for everything. if(TARGET cpublas) set_target_properties( - cpublas PROPERTIES INTERFACE_LINK_LIBRARIES extension_threadpool + cpublas PROPERTIES INTERFACE_LINK_LIBRARIES + "extension_threadpool;eigen_blas" + ) +endif() +if(TARGET optimized_kernels) + set_target_properties( + optimized_kernels PROPERTIES INTERFACE_LINK_LIBRARIES + "executorch_core;cpublas;extension_threadpool" + ) +endif() +if(TARGET optimized_native_cpu_ops_lib) + if(TARGET optimized_portable_kernels) + set(_maybe_optimized_portable_kernels_lib optimized_portable_kernels) + else() + set(_maybe_optimized_portable_kernels_lib portable_kernels) + endif() + set_target_properties( + optimized_native_cpu_ops_lib + PROPERTIES INTERFACE_LINK_LIBRARIES + "optimized_kernels;${_maybe_optimized_portable_kernels_lib}" ) endif() if(TARGET extension_threadpool) diff --git a/configurations/CMakeLists.txt b/configurations/CMakeLists.txt index 462124a6ea6..cf304d92523 100644 --- a/configurations/CMakeLists.txt +++ b/configurations/CMakeLists.txt @@ -47,12 +47,17 @@ if(EXECUTORCH_BUILD_KERNELS_OPTIMIZED) message("Generated files ${gen_command_sources}") # optimized_native_cpu_ops_lib: Register optimized op kernels into the runtime + if(TARGET optimized_portable_kernels) + set(_optimized_native_cpu_ops_lib_portable_kernels_lib optimized_portable_kernels) + else() + set(_optimized_native_cpu_ops_lib_portable_kernels_lib portable_kernels) + endif() gen_operators_lib( LIB_NAME "optimized_native_cpu_ops_lib" KERNEL_LIBS - portable_kernels optimized_kernels + ${_optimized_native_cpu_ops_lib_portable_kernels_lib} DEPS executorch ) diff --git a/extension/android/CMakeLists.txt b/extension/android/CMakeLists.txt index ba722d9c791..03595efbfea 100644 --- a/extension/android/CMakeLists.txt +++ b/extension/android/CMakeLists.txt @@ -84,10 +84,6 @@ if(TARGET optimized_native_cpu_ops_lib) APPEND link_libraries optimized_native_cpu_ops_lib - optimized_kernels - portable_kernels - cpublas - eigen_blas ) target_link_options_shared_lib(optimized_native_cpu_ops_lib) else() diff --git a/kernels/portable/CMakeLists.txt b/kernels/portable/CMakeLists.txt index 885c509246b..e15970329c1 100644 --- a/kernels/portable/CMakeLists.txt +++ b/kernels/portable/CMakeLists.txt @@ -63,6 +63,22 @@ gen_operators_lib( LIB_NAME "portable_ops_lib" KERNEL_LIBS portable_kernels DEPS executorch ) +# Portable kernels support optional parallelization (and, in the +# future, perhaps other performance features). If support is present, +# produce an optimized version. +set(BUILD_OPTIMIZED_PORTABLE_KERNELS EXECUTORCH_BUILD_PTHREADPOOL) + +if(BUILD_OPTIMIZED_PORTABLE_KERNELS) + add_library(optimized_portable_kernels ${_portable_kernels__srcs}) + target_link_libraries(optimized_portable_kernels PRIVATE executorch) + target_link_libraries(optimized_portable_kernels PUBLIC extension_threadpool) + target_compile_options(optimized_portable_kernels PUBLIC ${_common_compile_options}) + install( + TARGETS optimized_portable_kernels + DESTINATION lib + ) +endif() + install( TARGETS portable_kernels portable_ops_lib DESTINATION lib diff --git a/kernels/test/CMakeLists.txt b/kernels/test/CMakeLists.txt index 394ec241698..af0716b06ed 100644 --- a/kernels/test/CMakeLists.txt +++ b/kernels/test/CMakeLists.txt @@ -23,11 +23,11 @@ foreach(kernel ${_kernels}) "${CMAKE_CURRENT_BINARY_DIR}/include/${kernel}/executorch/kernels/test" ) set(_wrapper_path "${_wrapper_dir}/FunctionHeaderWrapper.h") + set(_functions_include "#include ") add_custom_command( OUTPUT "${_wrapper_path}" COMMAND mkdir -p ${_wrapper_dir} - COMMAND echo "#include " > - "${_wrapper_path}" + COMMAND echo ${_functions_include} > "${_wrapper_path}" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/include/${kernel}/executorch/kernels/${kernel}/Functions.h" "${CMAKE_CURRENT_BINARY_DIR}/include/${kernel}/executorch/kernels/${kernel}/NativeFunctions.h" @@ -53,7 +53,17 @@ foreach(kernel ${_kernels}) COMMENT "Generating ${_wrapper_dir}/supported_features.cpp and header" VERBATIM ) - + if(${kernel} STREQUAL "optimized") + set(_kernel_ops_lib "optimized_native_cpu_ops_lib") + set(_kernel_ops_lib_path + "${CMAKE_CURRENT_BINARY_DIR}/../../configurations/optimized_native_cpu_ops_lib" + ) + else() + set(_kernel_ops_lib "${kernel}_ops_lib") + set(_kernel_ops_lib_path + "${CMAKE_CURRENT_BINARY_DIR}/../../kernels/${kernel}/${kernel}_ops_lib" + ) + endif() add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/include/${kernel}/executorch/kernels/${kernel}/Functions.h" @@ -63,10 +73,9 @@ foreach(kernel ${_kernels}) mkdir -p "${CMAKE_CURRENT_BINARY_DIR}/include/${kernel}/executorch/kernels/${kernel}/" COMMAND - cp - "${CMAKE_CURRENT_BINARY_DIR}/../../kernels/${kernel}/${kernel}_ops_lib/*.h" + cp "${_kernel_ops_lib_path}/*.h" "${CMAKE_CURRENT_BINARY_DIR}/include/${kernel}/executorch/kernels/${kernel}/" - DEPENDS "${kernel}_ops_lib" + DEPENDS ${_kernel_ops_lib} ) endforeach() @@ -280,6 +289,11 @@ set(_optimized_kernels_test_sources ${CMAKE_CURRENT_BINARY_DIR}/include/optimized/executorch/kernels/test/supported_features.cpp ) +if(TARGET optimized_portable_kernels) + list(APPEND _optimized_kernels_test_sources ${all_test_sources}) + list(REMOVE_DUPLICATES _optimized_kernels_test_sources) +endif() + et_cxx_test( optimized_kernels_test SOURCES @@ -287,16 +301,16 @@ et_cxx_test( EXTRA_LIBS cpuinfo extension_threadpool - optimized_kernels - optimized_ops_lib - portable_kernels + optimized_native_cpu_ops_lib pthreadpool eigen_blas ) add_dependencies(optimized_kernels_test generate_wrapper) target_include_directories( - optimized_kernels_test PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/include/optimized" - "${CMAKE_INSTALL_PREFIX}/include" + optimized_kernels_test + PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/include/optimized" + "${CMAKE_CURRENT_BINARY_DIR}/include/portable" + "${CMAKE_INSTALL_PREFIX}/include" ) if(TARGET quantized_kernels)