|
4 | 4 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
5 | 5 |
|
6 | 6 | #include <uur/fixtures.h>
|
| 7 | +struct urL0EnqueueAllocTest : uur::urKernelExecutionTest { |
| 8 | + void ValidateEnqueueFree(void *ptr, ur_usm_pool_handle_t pool = nullptr) { |
| 9 | + ur_event_handle_t freeEvent = nullptr; |
| 10 | + ASSERT_NE(ptr, nullptr); |
| 11 | + ASSERT_SUCCESS(urEnqueueUSMFreeExp(queue, pool, ptr, 0, nullptr, &freeEvent)); |
| 12 | + ASSERT_SUCCESS(urQueueFinish(queue)); |
| 13 | + ASSERT_NE(freeEvent, nullptr); |
| 14 | + } |
7 | 15 |
|
8 |
| -using urL0EnqueueAllocTest = uur::urQueueTest; |
| 16 | + static constexpr size_t ARRAY_SIZE = 16; |
| 17 | + static constexpr uint32_t DATA = 0xC0FFEE; |
| 18 | +}; |
9 | 19 | UUR_INSTANTIATE_DEVICE_TEST_SUITE_P(urL0EnqueueAllocTest);
|
10 | 20 |
|
11 |
| -TEST_P(urL0EnqueueAllocTest, SuccessHostAlloc) { |
| 21 | +TEST_P(urL0EnqueueAllocTest, SuccessHostDirectAlloc) { |
12 | 22 | ur_device_usm_access_capability_flags_t hostUSMSupport = 0;
|
13 | 23 | ASSERT_SUCCESS(uur::GetDeviceUSMHostSupport(device, hostUSMSupport));
|
14 | 24 | if (!hostUSMSupport) {
|
15 | 25 | GTEST_SKIP() << "Host USM is not supported.";
|
16 | 26 | }
|
17 | 27 |
|
18 |
| - void *Ptr = nullptr; |
19 |
| - size_t allocSize = sizeof(int); |
20 |
| - ur_event_handle_t AllocEvent = nullptr; |
21 |
| - ASSERT_SUCCESS(urEnqueueUSMHostAllocExp(queue, nullptr, allocSize, nullptr, |
22 |
| - 0, nullptr, &Ptr, &AllocEvent)); |
| 28 | + void *ptr = nullptr; |
| 29 | + ur_event_handle_t allocEvent = nullptr; |
| 30 | + ASSERT_SUCCESS(urEnqueueUSMHostAllocExp(queue, nullptr, sizeof(int), nullptr, |
| 31 | + 0, nullptr, &ptr, &allocEvent)); |
23 | 32 | ASSERT_SUCCESS(urQueueFinish(queue));
|
24 |
| - ASSERT_NE(Ptr, nullptr); |
25 |
| - ASSERT_NE(AllocEvent, nullptr); |
| 33 | + ASSERT_NE(ptr, nullptr); |
| 34 | + ASSERT_NE(allocEvent, nullptr); |
| 35 | + *(int *)ptr = DATA; |
| 36 | + ValidateEnqueueFree(ptr); |
| 37 | +} |
| 38 | + |
| 39 | +TEST_P(urL0EnqueueAllocTest, SuccessHostPoolAlloc) { |
| 40 | + ur_device_usm_access_capability_flags_t hostUSMSupport = 0; |
| 41 | + ASSERT_SUCCESS(uur::GetDeviceUSMHostSupport(device, hostUSMSupport)); |
| 42 | + if (!hostUSMSupport) { |
| 43 | + GTEST_SKIP() << "Host USM is not supported."; |
| 44 | + } |
26 | 45 |
|
27 |
| - *(int *)Ptr = 0xC0FFEE; |
| 46 | + ur_usm_pool_handle_t pool = nullptr; |
| 47 | + ASSERT_SUCCESS(urUSMPoolCreate(context, nullptr, &pool)); |
28 | 48 |
|
29 |
| - ur_event_handle_t FreeEvent = nullptr; |
30 |
| - ASSERT_SUCCESS( |
31 |
| - urEnqueueUSMFreeExp(queue, nullptr, Ptr, 0, nullptr, &FreeEvent)); |
| 49 | + void *ptr = nullptr; |
| 50 | + ur_event_handle_t allocEvent = nullptr; |
| 51 | + ASSERT_SUCCESS(urEnqueueUSMHostAllocExp(queue, pool, sizeof(uint32_t), nullptr, |
| 52 | + 0, nullptr, &ptr, &allocEvent)); |
32 | 53 | ASSERT_SUCCESS(urQueueFinish(queue));
|
33 |
| - ASSERT_NE(FreeEvent, nullptr); |
| 54 | + ASSERT_NE(ptr, nullptr); |
| 55 | + ASSERT_NE(allocEvent, nullptr); |
| 56 | + *static_cast<uint32_t *>(ptr) = DATA; |
| 57 | + ValidateEnqueueFree(ptr, pool); |
| 58 | +} |
| 59 | + |
| 60 | +TEST_P(urL0EnqueueAllocTest, SuccessDeviceAlloc) { |
| 61 | + ur_device_usm_access_capability_flags_t deviceUSMSupport = 0; |
| 62 | + ASSERT_SUCCESS(uur::GetDeviceUSMDeviceSupport(device, deviceUSMSupport)); |
| 63 | + if (!(deviceUSMSupport & UR_DEVICE_USM_ACCESS_CAPABILITY_FLAG_ACCESS)) { |
| 64 | + GTEST_SKIP() << "Device USM is not supported."; |
| 65 | + } |
| 66 | + |
| 67 | + ur_usm_pool_handle_t pool = nullptr; |
| 68 | + urUSMPoolCreate(context, nullptr, &pool); |
| 69 | + |
| 70 | + void *ptr = nullptr; |
| 71 | + ur_event_handle_t allocEvent = nullptr; |
| 72 | + ASSERT_SUCCESS(urEnqueueUSMDeviceAllocExp(queue, pool, ARRAY_SIZE * sizeof(uint32_t), |
| 73 | + nullptr, 0, nullptr, &ptr, &allocEvent)); |
| 74 | + ASSERT_NE(ptr, nullptr); |
| 75 | + ASSERT_NE(allocEvent, nullptr); |
| 76 | + ASSERT_SUCCESS(urKernelSetArgPointer(kernel, 0, nullptr, ptr)); |
| 77 | + ASSERT_SUCCESS(urKernelSetArgValue(kernel, 1, sizeof(DATA), nullptr, &DATA)); |
| 78 | + Launch1DRange(ARRAY_SIZE); |
| 79 | + ValidateEnqueueFree(ptr, pool); |
| 80 | +} |
| 81 | + |
| 82 | +TEST_P(urL0EnqueueAllocTest, SuccessDeviceRepeatAlloc) { |
| 83 | + ur_device_usm_access_capability_flags_t deviceUSMSupport = 0; |
| 84 | + ASSERT_SUCCESS(uur::GetDeviceUSMDeviceSupport(device, deviceUSMSupport)); |
| 85 | + if (!(deviceUSMSupport & UR_DEVICE_USM_ACCESS_CAPABILITY_FLAG_ACCESS)) { |
| 86 | + GTEST_SKIP() << "Device USM is not supported."; |
| 87 | + } |
| 88 | + |
| 89 | + ur_usm_pool_handle_t pool = nullptr; |
| 90 | + urUSMPoolCreate(context, nullptr, &pool); |
| 91 | + |
| 92 | + void *ptr = nullptr; |
| 93 | + ASSERT_SUCCESS(urEnqueueUSMDeviceAllocExp(queue, pool, ARRAY_SIZE * sizeof(uint32_t), |
| 94 | + nullptr, 0, nullptr, &ptr, nullptr)); |
| 95 | + ASSERT_NE(ptr, nullptr); |
| 96 | + ASSERT_SUCCESS(urKernelSetArgPointer(kernel, 0, nullptr, ptr)); |
| 97 | + ASSERT_SUCCESS(urKernelSetArgValue(kernel, 1, sizeof(DATA), nullptr, &DATA)); |
| 98 | + Launch1DRange(ARRAY_SIZE); |
| 99 | + ASSERT_SUCCESS(urEnqueueUSMFreeExp(queue, pool, ptr, 0, nullptr, nullptr)); |
| 100 | + |
| 101 | + void *ptr2 = nullptr; |
| 102 | + ASSERT_SUCCESS(urEnqueueUSMDeviceAllocExp(queue, pool, ARRAY_SIZE * sizeof(uint32_t), |
| 103 | + nullptr, 0, nullptr, &ptr2, nullptr)); |
| 104 | + ASSERT_NE(ptr, nullptr); |
| 105 | + ASSERT_SUCCESS(urKernelSetArgPointer(kernel, 0, nullptr, ptr2)); |
| 106 | + ASSERT_SUCCESS(urKernelSetArgValue(kernel, 1, sizeof(DATA), nullptr, &DATA)); |
| 107 | + Launch1DRange(ARRAY_SIZE); |
| 108 | + ValidateEnqueueFree(ptr2, pool); |
| 109 | +} |
| 110 | + |
| 111 | +TEST_P(urL0EnqueueAllocTest, SuccessSharedAlloc) { |
| 112 | + ur_device_usm_access_capability_flags_t sharedUSMSupport = 0; |
| 113 | + ASSERT_SUCCESS( |
| 114 | + uur::GetDeviceUSMSingleSharedSupport(device, sharedUSMSupport)); |
| 115 | + if (!(sharedUSMSupport & UR_DEVICE_USM_ACCESS_CAPABILITY_FLAG_ACCESS)) { |
| 116 | + GTEST_SKIP() << "Shared USM is not supported."; |
| 117 | + } |
| 118 | + |
| 119 | + ur_usm_pool_handle_t pool = nullptr; |
| 120 | + urUSMPoolCreate(context, nullptr, &pool); |
| 121 | + |
| 122 | + void *ptr = nullptr; |
| 123 | + ur_event_handle_t allocEvent = nullptr; |
| 124 | + ASSERT_SUCCESS(urEnqueueUSMSharedAllocExp(queue, pool, ARRAY_SIZE * sizeof(uint32_t), |
| 125 | + nullptr, 0, nullptr, &ptr, &allocEvent)); |
| 126 | + ASSERT_NE(ptr, nullptr); |
| 127 | + ASSERT_NE(allocEvent, nullptr); |
| 128 | + ASSERT_SUCCESS(urKernelSetArgPointer(kernel, 0, nullptr, ptr)); |
| 129 | + ASSERT_SUCCESS(urKernelSetArgValue(kernel, 1, sizeof(DATA), nullptr, &DATA)); |
| 130 | + Launch1DRange(ARRAY_SIZE); |
| 131 | + ValidateEnqueueFree(ptr, pool); |
34 | 132 | }
|
0 commit comments