diff --git a/examples/logistic_regression/CMakeLists.txt b/examples/logistic_regression/CMakeLists.txt index b12e8227f..f918bbf21 100644 --- a/examples/logistic_regression/CMakeLists.txt +++ b/examples/logistic_regression/CMakeLists.txt @@ -3,6 +3,7 @@ project(kompute_linear_reg VERSION 0.1.0) set(CMAKE_CXX_STANDARD 14) +option(KOMPUTE_ARR_OPT_INSTALLED_KOMPUTE "Enable if you prefer to use your installed Kompute library" 0) option(KOMPUTE_OPT_ENABLE_SPDLOG "Extra compile flags for Kompute, see docs for full list" 0) set(KOMPUTE_EXTRA_CXX_FLAGS "" CACHE STRING "Extra compile flags for Kompute, see docs for full list") @@ -14,12 +15,16 @@ endif() set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG=1 ${KOMPUTE_EXTRA_CXX_FLAGS}") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DRELEASE=1 ${KOMPUTE_EXTRA_CXX_FLAGS}") -find_package(kompute REQUIRED) +if(KOMPUTE_ARR_OPT_INSTALLED_KOMPUTE) + find_package(kompute REQUIRED) +else() + add_subdirectory(../../ ${CMAKE_CURRENT_BINARY_DIR}/kompute_build) +endif() + find_package(Vulkan REQUIRED) if(KOMPUTE_OPT_ENABLE_SPDLOG) find_package(spdlog REQUIRED) - find_package(fmt REQUIRED) endif() add_executable(kompute_linear_reg @@ -30,11 +35,11 @@ target_link_libraries(kompute_linear_reg Vulkan::Vulkan ) +include_directories( + ../../single_include/) + if(KOMPUTE_OPT_ENABLE_SPDLOG) - target_link_libraries(kompute_linear_reg - kompute::kompute - fmt::fmt - spdlog::spdlog - ) + target_link_libraries(kompute_array_mult + spdlog::spdlog) endif() diff --git a/examples/logistic_regression/README.md b/examples/logistic_regression/README.md index 29aa89c01..0de7ee30a 100644 --- a/examples/logistic_regression/README.md +++ b/examples/logistic_regression/README.md @@ -6,54 +6,12 @@ This example is structured such that you will be able to extend it for your proj It contains a cmake build configuration that can be used in your production applications. -## Pre-requisites - -In order to run this example, you will need the following dependencies: - -* REQUIRED - + Vulkan Kompute library must be accessible - + The Vulkan SDK must be installed -* OPTIONAL - + SPDLOG - for logging - + FMT - for text formatting - -We will cover how you can install Vulkan Kompute in the next section. - -For the Vulkan SDK, the simplest way to install it is through [their website](https://vulkan.lunarg.com/sdk/home). You just have to follow the instructions for the relevant platform. - -For the other libraries, because they are optional you can just make sure you build and install Kompute with these disabled (this will be covered in more detail below). - -Alternatively you can use package managers such as vcpkg to help you install them, although to simplify things you can start without the dependencies first. - -## Set Up Vulkan Kompute Dependency - -You have multiple options to set up Vulkan Kompute. The easiest is to perform a local installation. - -For this, you will want to go to the main repo and run the following cmake command, which will configure it without SPDLOG by default. - -``` -cmake \ - -Bbuild -``` - -You can pass the following optional parameters based on your desired configuration: -* If you wish to install with spdlog support you just have to pass `-DKOMPUTE_ENABLE_SPDLOG=1`. -* If you wish to perform the installation on the local folder instead of in your system you can use `-DCMAKE_INSTALL_PREFIX="build/src/CMakeFiles/Export/"` which will basically ensure that the final files are created in the local directory. -* If you are using a package manager such as `vcpkg` make sure you pass the `-DCMAKE_TOOLCHAIN_FILE=` parameter - -Then you can proceed to run the installation: - -* For Windows / Visual Studio you just have to build `INSTALL.vcxproj` -* For Linux you can just run the `install` target via `make -C build install` - -You also have the option to build as `Release` or `Debug` - just make sure that you build your example with the same build/debug flags as required. - ## Building the example -Now that you've set up the dependencies / installation of Vulkan Kompute you can build this example. - You will notice that it's a standalone project, so you can re-use it for your application. +This project has the option to either import the Kompute dependency relative to the project or use your existing installation of Kompute. + To build you just need to run the cmake command in this folder as follows: ``` @@ -61,14 +19,19 @@ cmake \ -Bbuild ``` -Make sure to pass the required flags depending on the configuration above: -* If you built with Debug make sure you build your example with Debug as well -* If you installed in the local folder, make sure you pass the CMAKE_PREFIX_PATH pointing to the respective folder (e.g. `-DCMAKE_PREFIX_PATH=../../build/src/CMakeFiles/Export/lib/cmake/kompute/` if parent folder is main repo). -* If you built Vulkan Kompute with spdlog enabled, make sure to pass `-DKOMPUTE_OPT_ENABLE_SPDLOG=1` +You can pass the following optional parameters based on your desired configuration: +* If you wish to install with spdlog support you just have to pass `-DKOMPUTE_OPT_ENABLE_SPDLOG=1`. * If you are using a package manager such as `vcpkg` make sure you pass the `-DCMAKE_TOOLCHAIN_FILE=` parameter +* If you wish to load shader from raw glsl string instead of spirv bytes you can use `-DKOMPUTE_ANDROID_SHADER_FROM_STRING` -Now you just have to build your application as above: +## Pre-requisites -* For Windows / Visual Studio you just have to build and run `kompute_linear_reg.vcxproj` -* For Linux you can just run the `kompute_linear_reg` target via `make -C build kompute_linear_reg` +In order to run this example, you will need the following dependencies: + +* REQUIRED + + The Vulkan SDK must be installed +* OPTIONAL + + Vulkan Kompute library must be accessible (by default it uses the source directory) + + SPDLOG - for logging + + FMT - for text formatting diff --git a/examples/logistic_regression/src/Main.cpp b/examples/logistic_regression/src/Main.cpp index 853fa9d67..d3b8b3557 100755 --- a/examples/logistic_regression/src/Main.cpp +++ b/examples/logistic_regression/src/Main.cpp @@ -36,22 +36,30 @@ int main() kp::Manager mgr; std::shared_ptr sqTensor = - mgr.createManagedSequence().lock(); + mgr.createManagedSequence(); sqTensor->begin(); sqTensor->record(params); sqTensor->end(); sqTensor->eval(); - std::shared_ptr sq = mgr.createManagedSequence().lock(); + std::shared_ptr sq = mgr.createManagedSequence(); // Record op algo base sq->begin(); sq->record({ wIn, bIn }); - sq->record>( +#ifdef KOMPUTE_ANDROID_SHADER_FROM_STRING + sq->record( params, "shaders/glsl/logistic_regression.comp"); +#else + sq->record( + params, std::vector( + kp::shader_data::shaders_glsl_logisticregression_comp_spv, + kp::shader_data::shaders_glsl_logisticregression_comp_spv + + kp::shader_data::shaders_glsl_logisticregression_comp_spv_len)); +#endif sq->record({ wOutI, wOutJ, bOut, lOut });