| 73 | } |
| 74 | |
| 75 | TEST(SelectedRows, SparseTable) { |
| 76 | phi::CPUPlace cpu; |
| 77 | phi::SelectedRows table; |
| 78 | |
| 79 | int64_t table_size = 100; |
| 80 | int64_t embedding_width = 8; |
| 81 | // initialize a sparse table |
| 82 | table.mutable_value()->Resize( |
| 83 | common::make_ddim({table_size, embedding_width})); |
| 84 | auto* data = table.mutable_value()->mutable_data<float>(cpu); |
| 85 | for (int64_t i = 0; i < table_size; ++i) { |
| 86 | for (int64_t j = 0; j < embedding_width; ++j) { |
| 87 | data[i * embedding_width + j] = static_cast<float>(i); |
| 88 | } |
| 89 | } |
| 90 | ASSERT_EQ(table.AutoGrownIndex(10, true, false), 0); |
| 91 | ASSERT_EQ(table.AutoGrownIndex(8, true, false), 1); |
| 92 | ASSERT_EQ(table.AutoGrownIndex(8, true, false), 1); |
| 93 | ASSERT_EQ(table.AutoGrownIndex(6, true, false), 2); |
| 94 | for (int64_t i = 11; i < 20; i++) { |
| 95 | ASSERT_EQ(table.AutoGrownIndex(i, true, true), -1); |
| 96 | ASSERT_TRUE(!table.HasKey(i)); |
| 97 | } |
| 98 | ASSERT_TRUE(table.HasKey(10)); |
| 99 | ASSERT_TRUE(table.HasKey(8)); |
| 100 | ASSERT_TRUE(table.HasKey(6)); |
| 101 | ASSERT_EQ(table.rows().size(), 3UL); |
| 102 | |
| 103 | phi::DenseTensor ids; |
| 104 | ids.Resize(common::make_ddim({4})); |
| 105 | auto* ids_data = ids.mutable_data<int64_t>(cpu); |
| 106 | ids_data[0] = static_cast<int64_t>(6); |
| 107 | ids_data[1] = static_cast<int64_t>(6); |
| 108 | ids_data[2] = static_cast<int64_t>(8); |
| 109 | ids_data[3] = static_cast<int64_t>(10); |
| 110 | |
| 111 | phi::DenseTensor get_value; |
| 112 | auto* value_data = get_value.mutable_data<float>( |
| 113 | common::make_ddim({4, embedding_width}), cpu); |
| 114 | table.Get(ids, &get_value); |
| 115 | |
| 116 | for (int j = 0; j < embedding_width; ++j) { |
| 117 | ASSERT_EQ(value_data[0 * embedding_width + j], 2); |
| 118 | } |
| 119 | for (int j = 0; j < embedding_width; ++j) { |
| 120 | ASSERT_EQ(value_data[1 * embedding_width + j], 2); |
| 121 | } |
| 122 | for (int j = 0; j < embedding_width; ++j) { |
| 123 | ASSERT_EQ(value_data[2 * embedding_width + j], 1); |
| 124 | } |
| 125 | for (int j = 0; j < embedding_width; ++j) { |
| 126 | ASSERT_EQ(value_data[3 * embedding_width + j], 0); |
| 127 | } |
| 128 | } |
| 129 | |
| 130 | void f1(phi::SelectedRows* table, int table_size) { |
| 131 | for (int i = 1000000; i > 0; --i) { |
nothing calls this directly
no test coverage detected