From 6b62990dbc8a2bded3eb65174a14b48494715990 Mon Sep 17 00:00:00 2001 From: Alejandro Saucedo Date: Sat, 13 Feb 2021 19:38:15 +0000 Subject: [PATCH] Added test and updated LR tests to confirm works --- test/TestLogisticRegression.cpp | 12 +++++--- test/TestMultipleAlgoExecutions.cpp | 47 +++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 4 deletions(-) diff --git a/test/TestLogisticRegression.cpp b/test/TestLogisticRegression.cpp index b974655a9..c304c36bd 100644 --- a/test/TestLogisticRegression.cpp +++ b/test/TestLogisticRegression.cpp @@ -43,14 +43,16 @@ TEST(TestLogisticRegressionAlgorithm, TestMainLogisticRegression) #ifdef KOMPUTE_SHADER_FROM_STRING sq->record( - params, "test/shaders/glsl/test_logistic_regression.comp.spv"); + params, "test/shaders/glsl/test_logistic_regression.comp.spv", + kp::OpAlgoBase::KomputeWorkgroup(), kp::Algorithm::SpecializationContainer{{(uint32_t)5}}); #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)); + kp::shader_data::shaders_glsl_logisticregression_comp_spv_len), + kp::OpAlgoBase::KomputeWorkgroup(), kp::Algorithm::SpecializationContainer{{(uint32_t)5}}); #endif sq->record({ wOutI, wOutJ, bOut, lOut }); @@ -126,14 +128,16 @@ TEST(TestLogisticRegressionAlgorithm, TestMainLogisticRegressionManualCopy) #ifdef KOMPUTE_SHADER_FROM_STRING sq->record( - params, "test/shaders/glsl/test_logistic_regression.comp.spv"); + params, "test/shaders/glsl/test_logistic_regression.comp.spv", + kp::OpAlgoBase::KomputeWorkgroup(), kp::Algorithm::SpecializationContainer{{(uint32_t)5}}); #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)); + kp::shader_data::shaders_glsl_logisticregression_comp_spv_len), + kp::OpAlgoBase::KomputeWorkgroup(), kp::Algorithm::SpecializationContainer{{(uint32_t)5}}); #endif sq->record({ wOutI, wOutJ, bOut, lOut }); diff --git a/test/TestMultipleAlgoExecutions.cpp b/test/TestMultipleAlgoExecutions.cpp index 63f9778b0..c2b8ae8d8 100644 --- a/test/TestMultipleAlgoExecutions.cpp +++ b/test/TestMultipleAlgoExecutions.cpp @@ -350,3 +350,50 @@ TEST(TestMultipleAlgoExecutions, SequenceAlgoDestroyOutsideManagerScope) } EXPECT_EQ(tensorA->data(), std::vector({ 1, 1, 1 })); } + +TEST(TestMultipleAlgoExecutions, TestAlgorithmSpecialized) +{ + std::shared_ptr tensorA{ new kp::Tensor({ 0, 0, 0 }) }; + std::shared_ptr tensorB{ new kp::Tensor({ 0, 0, 0 }) }; + + std::string shader(R"( + #version 450 + layout (constant_id = 0) const uint cOne = 1; + layout (constant_id = 1) const float cTwo = 1; + layout (local_size_x = 1) in; + layout(set = 0, binding = 0) buffer a { float pa[]; }; + layout(set = 0, binding = 1) buffer b { float pb[]; }; + void main() { + uint index = gl_GlobalInvocationID.x; + pa[index] = cOne; + pb[index] = cTwo; + })"); + + { + std::shared_ptr sq = nullptr; + + { + kp::Manager mgr; + + mgr.rebuild({ tensorA, tensorB }); + + sq = mgr.sequence(); + + auto spec = kp::Algorithm::SpecializationContainer({{(uint32_t)5}, {(float)0.3f}}); + + sq->begin(); + sq->record( + { tensorA, tensorB }, + std::vector(shader.begin(), shader.end()), + kp::OpAlgoBase::KomputeWorkgroup(), spec); + sq->end(); + + sq->eval(); + + mgr.evalOpDefault({ tensorA, tensorB }); + + EXPECT_EQ(tensorA->data(), std::vector({ 5, 5, 5 })); + EXPECT_EQ(tensorB->data(), std::vector({ 0.3, 0.3, 0.3 })); + } + } +}