| 43 | } |
| 44 | |
| 45 | TEST(TRTAllocatorTest, Align) { |
| 46 | for (const uint64_t space : |
| 47 | {1ul, 2ul, 3ul, 4ul, 7ul, 8ul, 9ul, 10ul, 16ul, 32ul, 511ul, 512ul, |
| 48 | 513ul, 700ul, 12345ul, 1ul << 32}) { |
| 49 | for (uint64_t alignment = 1; alignment <= space * 4; alignment *= 2) { |
| 50 | for (const uintptr_t ptr_val : |
| 51 | {static_cast<uint64_t>(1), |
| 52 | alignment == 1 ? static_cast<uint64_t>(1) : alignment - 1, |
| 53 | alignment, alignment + 1, alignment + (alignment / 2)}) { |
| 54 | if (ptr_val % alignment == 0) { |
| 55 | for (const uint64_t size : |
| 56 | {static_cast<uint64_t>(1), |
| 57 | space == 1 ? static_cast<uint64_t>(1) : space - 1, space, |
| 58 | space + 1}) { |
| 59 | EXPECT_EQ(space >= size, RunTest(alignment, size, ptr_val, space)); |
| 60 | } |
| 61 | } else { |
| 62 | EXPECT_FALSE(RunTest(alignment, space, ptr_val, space)); |
| 63 | const uint64_t diff = alignment - ptr_val % alignment; |
| 64 | if (space > diff) { |
| 65 | EXPECT_TRUE( |
| 66 | RunTest(alignment, space - diff, ptr_val + diff, space - diff)); |
| 67 | for (const uint64_t size : |
| 68 | {static_cast<uint64_t>(1), |
| 69 | space - diff > 1 ? space - diff - 1 |
| 70 | : static_cast<uint64_t>(1), |
| 71 | space - diff, space - diff + 1, space - 1}) { |
| 72 | EXPECT_EQ(space - diff >= size, |
| 73 | RunTest(alignment, size, ptr_val, space)); |
| 74 | } |
| 75 | } else { |
| 76 | EXPECT_FALSE(RunTest(alignment, 1, ptr_val, space)); |
| 77 | } |
| 78 | } |
| 79 | } |
| 80 | } |
| 81 | } |
| 82 | } |
| 83 | |
| 84 | } // namespace tensorrt |
| 85 | } // namespace tensorflow |