Spaces:
Runtime error
Runtime error
| // SPDX-License-Identifier: Apache-2.0 | |
| TEST(TestDestroy, TestDestroyTensorSingle) | |
| { | |
| std::shared_ptr<kp::TensorT<float>> tensorA = nullptr; | |
| std::string shader(R"( | |
| #version 450 | |
| layout (local_size_x = 1) in; | |
| layout(set = 0, binding = 0) buffer a { float pa[]; }; | |
| void main() { | |
| uint index = gl_GlobalInvocationID.x; | |
| pa[index] = pa[index] + 1; | |
| })"); | |
| std::vector<uint32_t> spirv = compileSource(shader); | |
| { | |
| std::shared_ptr<kp::Sequence> sq = nullptr; | |
| { | |
| kp::Manager mgr; | |
| const std::vector<float> initialValues = { 0.0f, 0.0f, 0.0f }; | |
| tensorA = mgr.tensor(initialValues); | |
| std::shared_ptr<kp::Algorithm> algo = | |
| mgr.algorithm({ tensorA }, spirv); | |
| // Sync values to and from device | |
| mgr.sequence()->eval<kp::OpTensorSyncDevice>(algo->getTensors()); | |
| EXPECT_EQ(tensorA->vector(), initialValues); | |
| mgr.sequence() | |
| ->record<kp::OpAlgoDispatch>(algo) | |
| ->eval() | |
| ->eval<kp::OpTensorSyncLocal>(algo->getTensors()); | |
| const std::vector<float> expectedFinalValues = { 1.0f, 1.0f, 1.0f }; | |
| EXPECT_EQ(tensorA->vector(), expectedFinalValues); | |
| tensorA->destroy(); | |
| EXPECT_FALSE(tensorA->isInit()); | |
| } | |
| EXPECT_FALSE(tensorA->isInit()); | |
| } | |
| } | |
| TEST(TestDestroy, TestDestroyTensorVector) | |
| { | |
| std::shared_ptr<kp::TensorT<float>> tensorA = nullptr; | |
| std::shared_ptr<kp::TensorT<float>> tensorB = nullptr; | |
| 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; | |
| pa[index] = pa[index] + 1; | |
| pb[index] = pb[index] + 2; | |
| })"); | |
| std::vector<uint32_t> spirv = compileSource(shader); | |
| { | |
| std::shared_ptr<kp::Sequence> sq = nullptr; | |
| { | |
| kp::Manager mgr; | |
| tensorA = mgr.tensor({ 1, 1, 1 }); | |
| tensorB = mgr.tensor({ 1, 1, 1 }); | |
| std::shared_ptr<kp::Algorithm> algo = | |
| mgr.algorithm({ tensorA, tensorB }, spirv); | |
| mgr.sequence() | |
| ->record<kp::OpTensorSyncDevice>(algo->getTensors()) | |
| ->record<kp::OpAlgoDispatch>(algo) | |
| ->record<kp::OpTensorSyncLocal>(algo->getTensors()) | |
| ->eval(); | |
| EXPECT_EQ(tensorA->vector(), std::vector<float>({ 2, 2, 2 })); | |
| EXPECT_EQ(tensorB->vector(), std::vector<float>({ 3, 3, 3 })); | |
| tensorA->destroy(); | |
| tensorB->destroy(); | |
| EXPECT_FALSE(tensorA->isInit()); | |
| EXPECT_FALSE(tensorB->isInit()); | |
| } | |
| } | |
| } | |
| TEST(TestDestroy, TestDestroySequenceSingle) | |
| { | |
| std::shared_ptr<kp::TensorT<float>> tensorA = nullptr; | |
| std::string shader(R"( | |
| #version 450 | |
| layout (local_size_x = 1) in; | |
| layout(set = 0, binding = 0) buffer a { float pa[]; }; | |
| void main() { | |
| uint index = gl_GlobalInvocationID.x; | |
| pa[index] = pa[index] + 1; | |
| })"); | |
| std::vector<uint32_t> spirv = compileSource(shader); | |
| { | |
| std::shared_ptr<kp::Sequence> sq = nullptr; | |
| { | |
| kp::Manager mgr; | |
| tensorA = mgr.tensor({ 0, 0, 0 }); | |
| sq = | |
| mgr.sequence() | |
| ->record<kp::OpTensorSyncDevice>({ tensorA }) | |
| ->record<kp::OpAlgoDispatch>(mgr.algorithm({ tensorA }, spirv)) | |
| ->record<kp::OpTensorSyncLocal>({ tensorA }) | |
| ->eval(); | |
| sq->destroy(); | |
| EXPECT_FALSE(sq->isInit()); | |
| EXPECT_EQ(tensorA->vector(), std::vector<float>({ 1, 1, 1 })); | |
| } | |
| } | |
| } | |