#include "gtest/gtest.h" #include "kompute/Kompute.hpp" TEST(TestProcessingIterations, IterateThroughMultipleSumAndCopies) { kp::Manager mgr; float TOTAL_ITER = 10; std::vector testExpectedOutVec = { TOTAL_ITER, TOTAL_ITER, TOTAL_ITER }; 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 (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; pb[index] = pa[index] + 1; } )"); mgr.rebuild({ tensorA, tensorB }, false); { std::shared_ptr sq = mgr.sequence("default"); sq->begin(); sq->record({ tensorA, tensorB }); sq->end(); sq->eval(); } { std::shared_ptr sq = mgr.sequence("run"); sq->begin(); sq->record( { tensorA, tensorB }, kp::Shader::compile_source(shader)); sq->record({ tensorB, tensorA }); sq->end(); for (size_t i = 0; i < TOTAL_ITER; i++) { sq->eval(); } } { std::shared_ptr sq = mgr.sequence("export"); sq->begin(); sq->record({ tensorA, tensorB }); sq->end(); sq->eval(); } EXPECT_EQ(tensorA->data(), testExpectedOutVec); }