From f4bc3f68ebb27858b84f33924d0210d2ca907559 Mon Sep 17 00:00:00 2001 From: Alejandro Saucedo Date: Tue, 18 Jan 2022 18:36:49 +0000 Subject: [PATCH 1/5] Updating array_mutiplication example to work correctly Signed-off-by: Alejandro Saucedo --- examples/array_multiplication/src/Main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/array_multiplication/src/Main.cpp b/examples/array_multiplication/src/Main.cpp index a97fdbf24..1b02f316b 100755 --- a/examples/array_multiplication/src/Main.cpp +++ b/examples/array_multiplication/src/Main.cpp @@ -51,7 +51,7 @@ int main() std::vector> params = { tensorInA, tensorInB, tensorOut }; - std::shared_ptr algo = mgr.algorithm(params, kp_test_utils::compileSource(shader)); + std::shared_ptr algo = mgr.algorithm(params, compileSource(shader)); mgr.sequence() ->record(params) From 4fca515d8f0950722b443fcabe1c4a5527e70ab8 Mon Sep 17 00:00:00 2001 From: Alejandro Saucedo Date: Tue, 18 Jan 2022 19:50:26 +0000 Subject: [PATCH 2/5] Updated example with correct function Signed-off-by: Alejandro Saucedo --- examples/array_multiplication/src/Main.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/array_multiplication/src/Main.cpp b/examples/array_multiplication/src/Main.cpp index 1b02f316b..be1be9d5d 100755 --- a/examples/array_multiplication/src/Main.cpp +++ b/examples/array_multiplication/src/Main.cpp @@ -5,11 +5,15 @@ #include "kompute/Kompute.hpp" -static std::vector +static +std::vector compileSource( const std::string& source) { - if (system(std::string("glslangValidator --stdin -S comp -V -o tmp_kp_shader.comp.spv << END\n" + source + "\nEND").c_str())) + std::ofstream fileOut("tmp_kp_shader.comp"); + fileOut << source; + fileOut.close(); + if (system(std::string("glslangValidator -V tmp_kp_shader.comp -o tmp_kp_shader.comp.spv").c_str())) throw std::runtime_error("Error running glslangValidator command"); std::ifstream fileStream("tmp_kp_shader.comp.spv", std::ios::binary); std::vector buffer; From d2d9ae6873c9763e252cf82082cf8cb3f79ce96e Mon Sep 17 00:00:00 2001 From: Alejandro Saucedo Date: Sun, 30 Jan 2022 13:25:04 +0000 Subject: [PATCH 3/5] Android fixed example Signed-off-by: Alejandro Saucedo --- .../android/android-simple/app/build.gradle | 2 +- .../app/src/main/cpp/KomputeModelML.cpp | 59 +++++++++++-------- .../app/src/main/cpp/KomputeModelML.hpp | 4 +- examples/android/android-simple/build.gradle | 2 +- single_include/kompute/Kompute.hpp | 2 +- src/Manager.cpp | 8 +-- 6 files changed, 42 insertions(+), 35 deletions(-) diff --git a/examples/android/android-simple/app/build.gradle b/examples/android/android-simple/app/build.gradle index 146bb4163..f355ad795 100644 --- a/examples/android/android-simple/app/build.gradle +++ b/examples/android/android-simple/app/build.gradle @@ -14,7 +14,7 @@ android { versionName = "0.0.1" externalNativeBuild { cmake { - abiFilters "armeabi-v7a", 'arm64-v8a', 'x86', 'x86_64' + abiFilters "armeabi-v7a", 'arm64-v8a', 'x86' arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=c++_static', '-DKOMPUTE_OPT_ANDROID_BUILD=1', diff --git a/examples/android/android-simple/app/src/main/cpp/KomputeModelML.cpp b/examples/android/android-simple/app/src/main/cpp/KomputeModelML.cpp index ef604909b..e9fc67d68 100755 --- a/examples/android/android-simple/app/src/main/cpp/KomputeModelML.cpp +++ b/examples/android/android-simple/app/src/main/cpp/KomputeModelML.cpp @@ -23,37 +23,38 @@ void KomputeModelML::train(std::vector yData, std::vector xIData, { kp::Manager mgr; - std::shared_ptr xI = mgr.tensor(xIData); - std::shared_ptr xJ = mgr.tensor(xJData); + std::shared_ptr> xI = mgr.tensor(xIData); + std::shared_ptr> xJ = mgr.tensor(xJData); - std::shared_ptr y = mgr.tensor(yData); + std::shared_ptr> y = mgr.tensor(yData); - std::shared_ptr wIn = mgr.tensor({ 0.001, 0.001 }); - std::shared_ptr wOutI = mgr.tensor(zerosData); - std::shared_ptr wOutJ = mgr.tensor(zerosData); + std::shared_ptr> wIn = mgr.tensor({ 0.001, 0.001 }); + std::shared_ptr> wOutI = mgr.tensor(zerosData); + std::shared_ptr> wOutJ = mgr.tensor(zerosData); - std::shared_ptr bIn = mgr.tensor({ 0 }); - std::shared_ptr bOut = mgr.tensor(zerosData); + std::shared_ptr> bIn = mgr.tensor({ 0 }); + std::shared_ptr> bOut = mgr.tensor(zerosData); - std::shared_ptr lOut = mgr.tensor(zerosData); + std::shared_ptr> lOut = mgr.tensor(zerosData); std::vector> params = { xI, xJ, y, wIn, wOutI, wOutJ, bIn, bOut, lOut }; - std::vector spirv( - (uint32_t*)kp::shader_data::shaders_glsl_logisticregression_comp_spv, - (uint32_t*)(kp::shader_data::shaders_glsl_logisticregression_comp_spv - + kp::shader_data::shaders_glsl_logisticregression_comp_spv_len)); + std::vector spirv = std::vector( + (uint32_t*)kp::shader_data::shaders_glsl_logisticregression_comp_spv, + (uint32_t*)(kp::shader_data::shaders_glsl_logisticregression_comp_spv + + kp::shader_data::shaders_glsl_logisticregression_comp_spv_len)); - std::shared_ptr algo = - mgr.algorithm(params, spirv, kp::Workgroup({ 5 }), std::vector({ 5.0 })); + + std::shared_ptr algorithm = mgr.algorithm( + params, spirv, kp::Workgroup({ 5 }), std::vector({ 5.0 })); mgr.sequence()->eval(params); std::shared_ptr sq = mgr.sequence() ->record({ wIn, bIn }) - ->record(algo) + ->record(algorithm) ->record({ wOutI, wOutJ, bOut, lOut }); // Iterate across all expected iterations @@ -73,12 +74,15 @@ void KomputeModelML::train(std::vector yData, std::vector xIData, KP_LOG_INFO("{}", wIn->data()[1]); KP_LOG_INFO("{}", bIn->data()[0]); - this->mWeights = wIn; - this->mBias = bIn; + this->mWeights = wIn->vector(); + this->mBias = bIn->vector(); } } std::vector KomputeModelML::predict(std::vector xI, std::vector xJ) { + + KP_LOG_INFO("Running prediction inference"); + assert(xI.size() == xJ.size()); std::vector retVector; @@ -89,28 +93,33 @@ std::vector KomputeModelML::predict(std::vector xI, std::vectormWeights->data()[0] - + xJVal * this->mWeights->data()[1] - + this->mBias->data()[0]); + float result = (xIVal * this->mWeights[0] + + xJVal * this->mWeights[1] + + this->mBias[0]); // Instead of using sigmoid we'll just return full numbers float var = result > 0 ? 1 : 0; retVector.push_back(var); } + KP_LOG_INFO("Inference finalised"); + return retVector; } std::vector KomputeModelML::get_params() { + + KP_LOG_INFO("Displaying results"); + std::vector retVector; - if(this->mWeights->size() + this->mBias->size() == 0) { + if(this->mWeights.size() + this->mBias.size() == 0) { return retVector; } - retVector.push_back(this->mWeights->data()[0]); - retVector.push_back(this->mWeights->data()[1]); - retVector.push_back(this->mBias->data()[0]); + retVector.push_back(this->mWeights[0]); + retVector.push_back(this->mWeights[1]); + retVector.push_back(this->mBias[0]); retVector.push_back(99.0); return retVector; diff --git a/examples/android/android-simple/app/src/main/cpp/KomputeModelML.hpp b/examples/android/android-simple/app/src/main/cpp/KomputeModelML.hpp index 093edbafc..558760e36 100755 --- a/examples/android/android-simple/app/src/main/cpp/KomputeModelML.hpp +++ b/examples/android/android-simple/app/src/main/cpp/KomputeModelML.hpp @@ -21,8 +21,8 @@ public: std::vector get_params(); private: - std::shared_ptr mWeights; - std::shared_ptr mBias; + std::vector mWeights; + std::vector mBias; }; diff --git a/examples/android/android-simple/build.gradle b/examples/android/android-simple/build.gradle index c4c40217e..31a2d163f 100644 --- a/examples/android/android-simple/build.gradle +++ b/examples/android/android-simple/build.gradle @@ -22,4 +22,4 @@ allprojects { task clean(type: Delete) { delete rootProject.buildDir -} +} \ No newline at end of file diff --git a/single_include/kompute/Kompute.hpp b/single_include/kompute/Kompute.hpp index b9c392ef1..eb2f674fb 100755 --- a/single_include/kompute/Kompute.hpp +++ b/single_include/kompute/Kompute.hpp @@ -1795,7 +1795,7 @@ class OpMult : public OpAlgoDispatch KP_LOG_DEBUG("Kompute OpMult constructor with params"); if (tensors.size() != 3) { - throw std::runtime_error("Kompute OpMult expected 3 tensors but got " + tensors.size()); + throw std::runtime_error("Kompute OpMult expected 3 tensors but got " + std::to_string(tensors.size())); } std::vector spirv( diff --git a/src/Manager.cpp b/src/Manager.cpp index 0ce3df622..8a99665f8 100644 --- a/src/Manager.cpp +++ b/src/Manager.cpp @@ -290,8 +290,9 @@ Manager::createDevice(const std::vector& familyQueueIndices, this->mFreeDevice = true; // Getting an integer that says how many vuklan devices we have - uint32_t deviceCount = 0; - this->mInstance->enumeratePhysicalDevices(&deviceCount, nullptr); + std::vector physicalDevices = + this->mInstance->enumeratePhysicalDevices(); + uint32_t deviceCount = physicalDevices.size(); // This means there are no devices at all if (deviceCount == 0) { @@ -308,9 +309,6 @@ Manager::createDevice(const std::vector& familyQueueIndices, "please use your existing device"); } - std::vector physicalDevices = - this->mInstance->enumeratePhysicalDevices(); - vk::PhysicalDevice physicalDevice = physicalDevices[physicalDeviceIndex]; this->mPhysicalDevice = From 36b6df6e98a09ba29caef17ec8841ad1b1463924 Mon Sep 17 00:00:00 2001 From: Alejandro Saucedo Date: Sun, 30 Jan 2022 13:27:30 +0000 Subject: [PATCH 4/5] Updated format of kompute Signed-off-by: Alejandro Saucedo --- single_include/kompute/Kompute.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/single_include/kompute/Kompute.hpp b/single_include/kompute/Kompute.hpp index eb2f674fb..b9c392ef1 100755 --- a/single_include/kompute/Kompute.hpp +++ b/single_include/kompute/Kompute.hpp @@ -1795,7 +1795,7 @@ class OpMult : public OpAlgoDispatch KP_LOG_DEBUG("Kompute OpMult constructor with params"); if (tensors.size() != 3) { - throw std::runtime_error("Kompute OpMult expected 3 tensors but got " + std::to_string(tensors.size())); + throw std::runtime_error("Kompute OpMult expected 3 tensors but got " + tensors.size()); } std::vector spirv( From 4e0bce0e6d57c31468cd635a70aee1fbed70e2d4 Mon Sep 17 00:00:00 2001 From: Alejandro Saucedo Date: Sun, 30 Jan 2022 13:32:50 +0000 Subject: [PATCH 5/5] Reverted gradle change Signed-off-by: Alejandro Saucedo --- examples/android/android-simple/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/android/android-simple/app/build.gradle b/examples/android/android-simple/app/build.gradle index f355ad795..146bb4163 100644 --- a/examples/android/android-simple/app/build.gradle +++ b/examples/android/android-simple/app/build.gradle @@ -14,7 +14,7 @@ android { versionName = "0.0.1" externalNativeBuild { cmake { - abiFilters "armeabi-v7a", 'arm64-v8a', 'x86' + abiFilters "armeabi-v7a", 'arm64-v8a', 'x86', 'x86_64' arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=c++_static', '-DKOMPUTE_OPT_ANDROID_BUILD=1',