| 8 | #include "test_workgroup_shader.hpp" |
| 9 | |
| 10 | TEST(TestWorkgroup, TestSimpleWorkgroup) |
| 11 | { |
| 12 | std::shared_ptr<kp::TensorT<float>> tensorA = nullptr; |
| 13 | std::shared_ptr<kp::TensorT<float>> tensorB = nullptr; |
| 14 | { |
| 15 | std::shared_ptr<kp::Sequence> sq = nullptr; |
| 16 | |
| 17 | { |
| 18 | kp::Manager mgr; |
| 19 | |
| 20 | tensorA = mgr.tensor(std::vector<float>(16 * 8)); |
| 21 | tensorB = mgr.tensor(std::vector<float>(16 * 8)); |
| 22 | |
| 23 | std::vector<std::shared_ptr<kp::Tensor>> params = { tensorA, |
| 24 | tensorB }; |
| 25 | std::vector<uint32_t> spirv( |
| 26 | kp::TEST_WORKGROUP_SHADER_COMP_SPV.begin(), |
| 27 | kp::TEST_WORKGROUP_SHADER_COMP_SPV.end()); |
| 28 | |
| 29 | kp::Workgroup workgroup = { 16, 8, 1 }; |
| 30 | |
| 31 | std::shared_ptr<kp::Algorithm> algorithm = |
| 32 | mgr.algorithm(params, spirv, workgroup); |
| 33 | |
| 34 | sq = mgr.sequence(); |
| 35 | sq->record<kp::OpTensorSyncDevice>(params); |
| 36 | sq->record<kp::OpAlgoDispatch>(algorithm); |
| 37 | sq->record<kp::OpTensorSyncLocal>(params); |
| 38 | sq->eval(); |
| 39 | |
| 40 | std::vector<float> expectedA = { |
| 41 | 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, |
| 42 | 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, |
| 43 | 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, |
| 44 | 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, |
| 45 | 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, |
| 46 | 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, |
| 47 | 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, |
| 48 | 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15 |
| 49 | }; |
| 50 | |
| 51 | std::vector<float> expectedB = { |
| 52 | 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, |
| 53 | 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, |
| 54 | 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, |
| 55 | 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, |
| 56 | 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, |
| 57 | 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, |
| 58 | 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7 |
| 59 | }; |
| 60 | |
| 61 | EXPECT_EQ(tensorA->vector(), expectedA); |
| 62 | EXPECT_EQ(tensorB->vector(), expectedB); |
| 63 | } |
| 64 | } |
| 65 | } |