Skip to content

Commit f7a5d29

Browse files
kgibalaCompute-Runtime-Automation
authored andcommitted
Introduce debug flag ForceExtendedUSMBufferSize usage for L0
Forces extended buffer size by adding pageSize specify by number when debug flag is >=1 in L0 USM calls Usage: ForceExtendedUSMBufferSize=2 size += (2 * pageSize) Signed-off-by: Krzysztof Gibala <[email protected]>
1 parent a951985 commit f7a5d29

File tree

3 files changed

+68
-1
lines changed

3 files changed

+68
-1
lines changed

level_zero/core/source/context/context_imp.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ ze_result_t ContextImp::allocHostMem(const ze_host_mem_alloc_desc_t *hostDesc,
5757
size_t size,
5858
size_t alignment,
5959
void **ptr) {
60+
if (NEO::DebugManager.flags.ForceExtendedUSMBufferSize.get() >= 1) {
61+
size += (MemoryConstants::pageSize * NEO::DebugManager.flags.ForceExtendedUSMBufferSize.get());
62+
}
6063

6164
bool relaxedSizeAllowed = NEO::DebugManager.flags.AllowUnrestrictedSize.get();
6265
if (hostDesc->pNext) {
@@ -104,6 +107,9 @@ ze_result_t ContextImp::allocDeviceMem(ze_device_handle_t hDevice,
104107
const ze_device_mem_alloc_desc_t *deviceDesc,
105108
size_t size,
106109
size_t alignment, void **ptr) {
110+
if (NEO::DebugManager.flags.ForceExtendedUSMBufferSize.get() >= 1) {
111+
size += (MemoryConstants::pageSize * NEO::DebugManager.flags.ForceExtendedUSMBufferSize.get());
112+
}
107113

108114
auto device = Device::fromHandle(hDevice);
109115
if (isDeviceDefinedForThisContext(device) == false) {
@@ -185,6 +191,9 @@ ze_result_t ContextImp::allocSharedMem(ze_device_handle_t hDevice,
185191
size_t size,
186192
size_t alignment,
187193
void **ptr) {
194+
if (NEO::DebugManager.flags.ForceExtendedUSMBufferSize.get() >= 1) {
195+
size += (MemoryConstants::pageSize * NEO::DebugManager.flags.ForceExtendedUSMBufferSize.get());
196+
}
188197

189198
auto device = this->devices.begin()->second;
190199
if (hDevice != nullptr) {

level_zero/core/test/unit_tests/sources/memory/test_memory.cpp

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,64 @@ TEST_F(MemoryTest, givenSharedPointerThenDriverGetAllocPropertiesReturnsExpected
277277
ASSERT_EQ(result, ZE_RESULT_SUCCESS);
278278
}
279279

280+
TEST_F(MemoryTest, givenForceExtendedUSMBufferSizeDebugFlagWhenUSMAllocationIsCreatedThenSizeIsProperlyExtended) {
281+
DebugManagerStateRestore restorer;
282+
283+
constexpr auto bufferSize = 16;
284+
auto pageSizeNumber = 2;
285+
NEO::DebugManager.flags.ForceExtendedUSMBufferSize.set(pageSizeNumber);
286+
auto extendedBufferSize = bufferSize + MemoryConstants::pageSize * pageSizeNumber;
287+
size_t alignment = 1u;
288+
void *ptr = nullptr;
289+
290+
ze_device_mem_alloc_desc_t deviceDesc = {};
291+
ze_host_mem_alloc_desc_t hostDesc = {};
292+
ze_result_t result = context->allocSharedMem(device->toHandle(), &deviceDesc,
293+
&hostDesc, bufferSize, alignment, &ptr);
294+
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
295+
EXPECT_NE(nullptr, ptr);
296+
297+
auto alloc = context->getDriverHandle()->getSvmAllocsManager()->getSVMAlloc(ptr);
298+
EXPECT_NE(alloc, nullptr);
299+
EXPECT_EQ(alloc->size, extendedBufferSize);
300+
301+
result = context->freeMem(ptr);
302+
ASSERT_EQ(result, ZE_RESULT_SUCCESS);
303+
304+
pageSizeNumber = 4;
305+
NEO::DebugManager.flags.ForceExtendedUSMBufferSize.set(pageSizeNumber);
306+
extendedBufferSize = bufferSize + MemoryConstants::pageSize * pageSizeNumber;
307+
308+
hostDesc = {};
309+
result = context->allocHostMem(&hostDesc, bufferSize, alignment, &ptr);
310+
311+
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
312+
EXPECT_NE(nullptr, ptr);
313+
314+
alloc = context->getDriverHandle()->getSvmAllocsManager()->getSVMAlloc(ptr);
315+
EXPECT_NE(alloc, nullptr);
316+
EXPECT_EQ(alloc->size, extendedBufferSize);
317+
318+
result = context->freeMem(ptr);
319+
ASSERT_EQ(result, ZE_RESULT_SUCCESS);
320+
321+
pageSizeNumber = 8;
322+
NEO::DebugManager.flags.ForceExtendedUSMBufferSize.set(pageSizeNumber);
323+
extendedBufferSize = bufferSize + MemoryConstants::pageSize * pageSizeNumber;
324+
325+
deviceDesc = {};
326+
result = context->allocDeviceMem(device->toHandle(), &deviceDesc, bufferSize, alignment, &ptr);
327+
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
328+
EXPECT_NE(nullptr, ptr);
329+
330+
alloc = context->getDriverHandle()->getSvmAllocsManager()->getSVMAlloc(ptr);
331+
EXPECT_NE(alloc, nullptr);
332+
EXPECT_EQ(alloc->size, extendedBufferSize);
333+
334+
result = context->freeMem(ptr);
335+
ASSERT_EQ(result, ZE_RESULT_SUCCESS);
336+
}
337+
280338
TEST_F(MemoryTest, givenHostPointerThenDriverGetAllocPropertiesReturnsMemoryId) {
281339
size_t size = 10;
282340
size_t alignment = 1u;

shared/source/debug_settings/debug_variables_base.inl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, EngineUsageHint, -1, "-1: default, >=0: engine u
178178
DECLARE_DEBUG_VARIABLE(int32_t, ForceBcsEngineIndex, -1, "-1: default, >=0 Copy Engine index")
179179
DECLARE_DEBUG_VARIABLE(int32_t, Force2dImageAsArray, -1, "-1: default, 0: WA Disabled, 1: Forces surface state of 2dImage to array")
180180
DECLARE_DEBUG_VARIABLE(int32_t, ForceExtendedBufferSize, -1, "-1: default, 0: disabled, >=1: Forces extended buffer size by specify pageSize number in clCreateBuffer, clCreateBufferWithProperties and clCreateBufferWithPropertiesINTEL calls")
181-
DECLARE_DEBUG_VARIABLE(int32_t, ForceExtendedUSMBufferSize, -1, "-1: default, 0: disabled, >=1: Forces extended buffer size by specify pageSize number in clHostMemAllocINTEL, clDeviceMemAllocINTEL and clSharedMemAllocINTEL calls")
181+
DECLARE_DEBUG_VARIABLE(int32_t, ForceExtendedUSMBufferSize, -1, "-1: default, 0: disabled, >=1: Forces extended buffer size by specify pageSize number in USM calls")
182182
DECLARE_DEBUG_VARIABLE(int32_t, ForceSimdMessageSizeInWalker, -1, "-1: default, >=0 Program given value in Walker command for SIMD size")
183183
/*LOGGING FLAGS*/
184184
DECLARE_DEBUG_VARIABLE(int32_t, PrintDriverDiagnostics, -1, "prints driver diagnostics messages to standard output, value corresponds to hint level")

0 commit comments

Comments
 (0)