@@ -14,7 +14,10 @@ namespace NEO {
1414
1515struct MockLocalMemoryUsageBankSelector : public LocalMemoryUsageBankSelector {
1616 using LocalMemoryUsageBankSelector::banksCount;
17+ using LocalMemoryUsageBankSelector::freeOnBank;
1718 using LocalMemoryUsageBankSelector::LocalMemoryUsageBankSelector;
19+ using LocalMemoryUsageBankSelector::reserveOnBank;
20+ using LocalMemoryUsageBankSelector::updateUsageInfo;
1821 std::atomic<uint64_t > *getMemorySizes () { return memorySizes.get (); }
1922};
2023
@@ -27,7 +30,7 @@ TEST(localMemoryUsageTest, givenLocalMemoryUsageBankSelectorWhenItsCreatedAllVal
2730}
2831
2932TEST (localMemoryUsageTest, givenLocalMemoryUsageBankSelectorWhenMemoryIsReservedOnGivenBankThenValueStoredInTheArrayIsCorrect) {
30- LocalMemoryUsageBankSelector selector (4u );
33+ MockLocalMemoryUsageBankSelector selector (4u );
3134
3235 uint64_t allocationSize = 1024u ;
3336 auto bankIndex = selector.getLeastOccupiedBank ();
@@ -37,7 +40,7 @@ TEST(localMemoryUsageTest, givenLocalMemoryUsageBankSelectorWhenMemoryIsReserved
3740}
3841
3942TEST (localMemoryUsageTest, givenLocalMemoryUsageBankSelectorWhenMemoryIsReleasedThenValueIsCorrectlyAllocated) {
40- LocalMemoryUsageBankSelector selector (1u );
43+ MockLocalMemoryUsageBankSelector selector (1u );
4144
4245 uint64_t allocationSize = 1024u ;
4346 auto bankIndex = selector.getLeastOccupiedBank ();
@@ -75,7 +78,7 @@ TEST(localMemoryUsageTest, givenLocalMemoryUsageBankSelectorWhenMemoryAllocatedS
7578}
7679
7780TEST (localMemoryUsageTest, givenLocalMemoryUsageBankSelectorWhenIndexIsInvalidThenErrorIsReturned) {
78- LocalMemoryUsageBankSelector selector (3u );
81+ MockLocalMemoryUsageBankSelector selector (3u );
7982 EXPECT_THROW (selector.reserveOnBank (8u , 1024u ), std::exception);
8083 EXPECT_THROW (selector.freeOnBank (8u , 1024u ), std::exception);
8184 EXPECT_THROW (selector.getOccupiedMemorySizeForBank (8u ), std::exception);
@@ -84,4 +87,52 @@ TEST(localMemoryUsageTest, givenLocalMemoryUsageBankSelectorWhenIndexIsInvalidTh
8487TEST (localMemoryUsageTest, givenLocalMemoryUsageBankSelectorWhenItsCreatedWithZeroBanksThenErrorIsReturned) {
8588 EXPECT_THROW (LocalMemoryUsageBankSelector (0u ), std::exception);
8689}
90+
91+ TEST (localMemoryUsageTest, givenLocalMemoryUsageBankSelectorWhenMultipleBanksAreUsedThenMemoryIsReservedOnEachOfThem) {
92+ MockLocalMemoryUsageBankSelector selector (6u );
93+ uint32_t banks = 5u ;
94+ uint64_t allocationSize = 1024u ;
95+
96+ selector.reserveOnBanks (banks, allocationSize);
97+ EXPECT_EQ (allocationSize, selector.getOccupiedMemorySizeForBank (0u ));
98+ EXPECT_EQ (0u , selector.getOccupiedMemorySizeForBank (1u ));
99+ EXPECT_EQ (allocationSize, selector.getOccupiedMemorySizeForBank (2u ));
100+ EXPECT_EQ (0u , selector.getOccupiedMemorySizeForBank (3u ));
101+ EXPECT_EQ (0u , selector.getOccupiedMemorySizeForBank (4u ));
102+ EXPECT_EQ (0u , selector.getOccupiedMemorySizeForBank (5u ));
103+ }
104+
105+ TEST (localMemoryUsageTest, givenLocalMemoryUsageBankSelectorWhenMultipleBanksAreUsedThenMemoryIsReleasedOnEachOfThem) {
106+ MockLocalMemoryUsageBankSelector selector (6u );
107+ uint32_t banks = 5u ;
108+ uint64_t allocationSize = 1024u ;
109+
110+ selector.reserveOnBanks (banks, allocationSize);
111+ selector.reserveOnBanks (banks, allocationSize);
112+
113+ EXPECT_EQ (2 * allocationSize, selector.getOccupiedMemorySizeForBank (0u ));
114+ EXPECT_EQ (0u , selector.getOccupiedMemorySizeForBank (1u ));
115+ EXPECT_EQ (2 * allocationSize, selector.getOccupiedMemorySizeForBank (2u ));
116+ EXPECT_EQ (0u , selector.getOccupiedMemorySizeForBank (3 ));
117+ EXPECT_EQ (0u , selector.getOccupiedMemorySizeForBank (4 ));
118+ EXPECT_EQ (0u , selector.getOccupiedMemorySizeForBank (5 ));
119+
120+ selector.freeOnBanks (banks, allocationSize);
121+ EXPECT_EQ (allocationSize, selector.getOccupiedMemorySizeForBank (0u ));
122+ EXPECT_EQ (0u , selector.getOccupiedMemorySizeForBank (1u ));
123+ EXPECT_EQ (allocationSize, selector.getOccupiedMemorySizeForBank (2u ));
124+ EXPECT_EQ (0u , selector.getOccupiedMemorySizeForBank (3u ));
125+ EXPECT_EQ (0u , selector.getOccupiedMemorySizeForBank (4u ));
126+ EXPECT_EQ (0u , selector.getOccupiedMemorySizeForBank (5u ));
127+ }
128+
129+ TEST (localMemoryUsageTest, givenLocalMemoryUsageBankSelectorWhenThereAreMoreThan32BanksThenOnly32AreUpdated) {
130+ MockLocalMemoryUsageBankSelector selector (33u );
131+ uint32_t banks = ~0u ;
132+ uint64_t allocationSize = 1024u ;
133+
134+ selector.reserveOnBanks (banks, allocationSize);
135+ EXPECT_EQ (0u , selector.getOccupiedMemorySizeForBank (32 ));
136+ }
137+
87138} // namespace NEO
0 commit comments