Skip to content

Commit 4374197

Browse files
Fixes for bindless configuration
- enhance ults code, do not inject memory manager - fix some issues related to bindless global heap Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
1 parent 7910567 commit 4374197

File tree

8 files changed

+80
-30
lines changed

8 files changed

+80
-30
lines changed

level_zero/core/source/cmdlist/cmdlist_hw_immediate.inl

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,24 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::executeCommandListImm
102102
this->migrateSharedAllocations();
103103
}
104104

105+
auto ioh = (this->commandContainer.getIndirectHeap(NEO::IndirectHeap::Type::INDIRECT_OBJECT));
106+
NEO::IndirectHeap *dsh = nullptr;
107+
NEO::IndirectHeap *ssh = nullptr;
108+
109+
if (!NEO::ApiSpecificConfig::getBindlessConfiguration()) {
110+
dsh = (this->commandContainer.getIndirectHeap(NEO::IndirectHeap::Type::DYNAMIC_STATE));
111+
ssh = (this->commandContainer.getIndirectHeap(NEO::IndirectHeap::Type::SURFACE_STATE));
112+
} else {
113+
dsh = this->device->getNEODevice()->getBindlessHeapsHelper()->getHeap(NEO::BindlessHeapsHelper::BindlesHeapType::GLOBAL_DSH);
114+
ssh = this->device->getNEODevice()->getBindlessHeapsHelper()->getHeap(NEO::BindlessHeapsHelper::BindlesHeapType::GLOBAL_SSH);
115+
}
116+
105117
auto completionStamp = this->csr->flushTask(
106118
*commandStream,
107119
commandStreamStart,
108-
this->commandContainer.getIndirectHeap(NEO::IndirectHeap::Type::DYNAMIC_STATE),
109-
this->commandContainer.getIndirectHeap(NEO::IndirectHeap::Type::INDIRECT_OBJECT),
110-
this->commandContainer.getIndirectHeap(NEO::IndirectHeap::Type::SURFACE_STATE),
120+
dsh,
121+
ioh,
122+
ssh,
111123
this->csr->peekTaskLevel(),
112124
dispatchFlags,
113125
*(this->device->getNEODevice()));

level_zero/core/test/unit_tests/sources/builtin/built_in_tests_l0.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77

88
#include "shared/source/built_ins/built_ins.h"
9+
#include "shared/source/helpers/api_specific_config.h"
910
#include "shared/test/common/helpers/debug_manager_state_restore.h"
1011
#include "shared/test/common/test_macros/test.h"
1112
#include "shared/test/unit_test/built_ins/built_in_tests_shared.inl"
@@ -16,27 +17,29 @@
1617

1718
using namespace NEO;
1819

19-
TEST(BuiltInTestsL0, givenUseBindlessBuiltinInApiDependentModeWhenBinExtensionPassedThenNameHasBindfulPrefix) {
20+
TEST(BuiltInTestsL0, givenUseBindlessBuiltinInApiDependentModeWhenBinExtensionPassedThenNameHasCorrectPrefix) {
2021
DebugManagerStateRestore dbgRestorer;
2122
DebugManager.flags.UseBindlessMode.set(-1);
2223
EBuiltInOps::Type builtin = EBuiltInOps::CopyBufferToBuffer;
2324
const std::string extension = ".bin";
2425
const std::string platformName = "platformName";
2526
const uint32_t deviceRevId = 123;
2627

28+
std::string prefix = ApiSpecificConfig::getBindlessConfiguration() ? "bindless" : "bindful";
29+
2730
std::string resourceNameGeneric = createBuiltinResourceName(builtin, extension);
2831
std::string resourceNameForPlatform = createBuiltinResourceName(builtin, extension, platformName);
2932
std::string resourceNameForPlatformAndStepping = createBuiltinResourceName(builtin, extension, platformName, deviceRevId);
3033

31-
std::string expectedResourceNameGeneric = "bindful_copy_buffer_to_buffer.builtin_kernel.bin";
34+
std::string expectedResourceNameGeneric = prefix + "_copy_buffer_to_buffer.builtin_kernel.bin";
3235

3336
std::string expectedResourceNameForPlatform = platformName.c_str();
34-
expectedResourceNameForPlatform += "_0_bindful_copy_buffer_to_buffer.builtin_kernel.bin";
37+
expectedResourceNameForPlatform += "_0_" + prefix + "_copy_buffer_to_buffer.builtin_kernel.bin";
3538

3639
std::string expectedResourceNameForPlatformAndStepping = platformName.c_str();
3740
expectedResourceNameForPlatformAndStepping += "_";
3841
expectedResourceNameForPlatformAndStepping += std::to_string(deviceRevId).c_str();
39-
expectedResourceNameForPlatformAndStepping += "_bindful_copy_buffer_to_buffer.builtin_kernel.bin";
42+
expectedResourceNameForPlatformAndStepping += "_" + prefix + "_copy_buffer_to_buffer.builtin_kernel.bin";
4043

4144
EXPECT_EQ(0, strcmp(expectedResourceNameGeneric.c_str(), resourceNameGeneric.c_str()));
4245
EXPECT_EQ(0, strcmp(expectedResourceNameForPlatform.c_str(), resourceNameForPlatform.c_str()));

level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_4.cpp

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,30 @@ HWTEST_F(CommandListImmediateFlushTaskComputeTests, givenUseCsrImmediateSubmissi
311311
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
312312
}
313313

314+
HWTEST_F(CommandListImmediateFlushTaskComputeTests, givenBindlessModeAndUseCsrImmediateSubmissionEnabledForImmediateCommandListForAppendPageFaultThenSuccessIsReturned) {
315+
NEO::DebugManager.flags.EnableFlushTaskSubmission.set(1);
316+
NEO::DebugManager.flags.UseBindlessMode.set(1);
317+
318+
neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[neoDevice->getRootDeviceIndex()]->createBindlessHeapsHelper(neoDevice->getMemoryManager(),
319+
neoDevice->getNumGenericSubDevices() > 1,
320+
neoDevice->getRootDeviceIndex(),
321+
neoDevice->getDeviceBitfield());
322+
323+
size_t size = 0x100000001;
324+
NEO::MockGraphicsAllocation mockAllocationSrc(0, NEO::AllocationType::INTERNAL_HOST_MEMORY,
325+
reinterpret_cast<void *>(0x1234), size, 0, sizeof(uint32_t),
326+
MemoryPool::System4KBPages);
327+
NEO::MockGraphicsAllocation mockAllocationDst(0, NEO::AllocationType::INTERNAL_HOST_MEMORY,
328+
reinterpret_cast<void *>(0x100003456), size, 0, sizeof(uint32_t),
329+
MemoryPool::System4KBPages);
330+
ze_command_queue_desc_t queueDesc = {};
331+
ze_result_t returnValue = ZE_RESULT_SUCCESS;
332+
std::unique_ptr<L0::CommandList> commandList(CommandList::createImmediate(productFamily, device, &queueDesc, false, NEO::EngineGroupType::Compute, returnValue));
333+
334+
auto result = commandList->appendPageFaultCopy(&mockAllocationDst, &mockAllocationSrc, size, false);
335+
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
336+
}
337+
314338
HWTEST_F(CommandListImmediateFlushTaskComputeTests, givenUseCsrImmediateSubmissionEnabledForImmediateWhenAppendEventResetThenSuccessIsReturned) {
315339
NEO::DebugManager.flags.EnableFlushTaskSubmission.set(1);
316340

@@ -935,6 +959,8 @@ HWTEST2_F(HostPointerManagerCommandListTest, givenCommandListWhenMemoryFillWithS
935959
auto event1 = std::unique_ptr<L0::Event>(L0::Event::create<uint32_t>(eventPool.get(), &eventDesc, device));
936960
events.push_back(event1.get());
937961

962+
auto offset = commandContainer.getCommandStream()->getUsed();
963+
938964
result = commandList->appendMemoryFill(heapPointer, reinterpret_cast<void *>(&one), sizeof(one), size,
939965
events[0], 1u, nullptr);
940966
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, result);
@@ -944,12 +970,9 @@ HWTEST2_F(HostPointerManagerCommandListTest, givenCommandListWhenMemoryFillWithS
944970

945971
GenCmdList cmdList;
946972
ASSERT_TRUE(FamilyType::PARSE::parseCommandBuffer(
947-
cmdList, ptrOffset(commandContainer.getCommandStream()->getCpuBase(), 0), commandContainer.getCommandStream()->getUsed()));
973+
cmdList, ptrOffset(commandContainer.getCommandStream()->getCpuBase(), offset), commandContainer.getCommandStream()->getUsed() - offset));
948974

949975
auto itor = find<PIPE_CONTROL *>(cmdList.begin(), cmdList.end());
950-
EXPECT_NE(cmdList.end(), itor);
951-
itor++;
952-
itor = find<PIPE_CONTROL *>(itor, cmdList.end());
953976
EXPECT_EQ(cmdList.end(), itor);
954977
}
955978

level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel_1.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
*/
77

88
#include "shared/source/command_container/command_encoder.h"
9+
#include "shared/source/helpers/api_specific_config.h"
910
#include "shared/source/helpers/preamble.h"
1011
#include "shared/source/helpers/register_offsets.h"
1112
#include "shared/source/os_interface/hw_info_config.h"
1213
#include "shared/test/common/cmd_parse/gen_cmd_parse.h"
14+
#include "shared/test/common/helpers/debug_manager_state_restore.h"
1315
#include "shared/test/common/helpers/unit_test_helper.h"
1416
#include "shared/test/common/test_macros/test.h"
1517

@@ -192,7 +194,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, CommandListAppendLaunchKernel, givenFunctionWhenBind
192194
auto cmd = genCmdCast<MEDIA_INTERFACE_DESCRIPTOR_LOAD *>(*itorMIDL);
193195
ASSERT_NE(cmd, nullptr);
194196

195-
auto dsh = commandList->commandContainer.getIndirectHeap(NEO::HeapType::DYNAMIC_STATE);
197+
auto dsh = NEO::ApiSpecificConfig::getBindlessConfiguration() ? device->getNEODevice()->getBindlessHeapsHelper()->getHeap(BindlessHeapsHelper::GLOBAL_DSH) : commandList->commandContainer.getIndirectHeap(NEO::HeapType::DYNAMIC_STATE);
196198
auto idd = static_cast<INTERFACE_DESCRIPTOR_DATA *>(ptrOffset(dsh->getCpuBase(), cmd->getInterfaceDescriptorDataStartAddress()));
197199

198200
if (NEO::EncodeSurfaceState<FamilyType>::doBindingTablePrefetch()) {
@@ -240,6 +242,10 @@ HWTEST_F(CommandListAppendLaunchKernel, givenKernelWithPrintfUsedWhenAppendedToC
240242
HWTEST_F(CommandListAppendLaunchKernel, WhenAppendingMultipleTimesThenSshIsNotDepletedButReallocated) {
241243
createKernel();
242244
ze_result_t returnValue;
245+
246+
DebugManagerStateRestore dbgRestorer;
247+
DebugManager.flags.UseBindlessMode.set(0);
248+
243249
std::unique_ptr<L0::CommandList> commandList(CommandList::create(productFamily, device, NEO::EngineGroupType::RenderCompute, 0u, returnValue));
244250
ze_group_count_t groupCount{1, 1, 1};
245251

level_zero/core/test/unit_tests/sources/driver/test_driver.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -177,11 +177,12 @@ HWTEST_F(ImportNTHandle, givenNTHandleWhenCreatingDeviceMemoryThenSuccessIsRetur
177177
devProperties.pNext = &importNTHandle;
178178

179179
NEO::MockDevice *neoDevice = nullptr;
180-
neoDevice = NEO::MockDevice::createWithNewExecutionEnvironment<NEO::MockDevice>(NEO::defaultHwInfo.get());
181-
NEO::MemoryManager *prevMemoryManager = driverHandle->getMemoryManager();
182-
NEO::MemoryManager *currMemoryManager = new MemoryManagerNTHandleMock(*neoDevice->executionEnvironment);
183-
driverHandle->setMemoryManager(currMemoryManager);
184-
neoDevice->injectMemoryManager(currMemoryManager);
180+
auto executionEnvironment = NEO::MockDevice::prepareExecutionEnvironment(NEO::defaultHwInfo.get(), 0);
181+
executionEnvironment->memoryManager.reset(new MemoryManagerNTHandleMock(*executionEnvironment));
182+
183+
neoDevice = NEO::MockDevice::createWithExecutionEnvironment<NEO::MockDevice>(NEO::defaultHwInfo.get(), executionEnvironment, 0);
184+
185+
driverHandle->setMemoryManager(executionEnvironment->memoryManager.get());
185186

186187
ze_result_t result = ZE_RESULT_SUCCESS;
187188
auto device = L0::Device::create(driverHandle.get(), neoDevice, false, &result);
@@ -200,7 +201,6 @@ HWTEST_F(ImportNTHandle, givenNTHandleWhenCreatingDeviceMemoryThenSuccessIsRetur
200201
result = context->freeMem(ptr);
201202
EXPECT_EQ(result, ZE_RESULT_SUCCESS);
202203

203-
driverHandle->setMemoryManager(prevMemoryManager);
204204
delete device;
205205
}
206206

level_zero/core/test/unit_tests/sources/image/test_image.cpp

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -394,11 +394,10 @@ HWTEST2_F(ImageCreate, givenNTHandleWhenCreatingImageThenSuccessIsReturned, IsAt
394394
desc.pNext = &importNTHandle;
395395

396396
NEO::MockDevice *neoDevice = nullptr;
397-
neoDevice = NEO::MockDevice::createWithNewExecutionEnvironment<NEO::MockDevice>(NEO::defaultHwInfo.get());
398-
NEO::MemoryManager *prevMemoryManager = driverHandle->getMemoryManager();
399-
NEO::MemoryManager *currMemoryManager = new MemoryManagerNTHandleMock(*neoDevice->executionEnvironment);
400-
driverHandle->setMemoryManager(currMemoryManager);
401-
neoDevice->injectMemoryManager(currMemoryManager);
397+
auto executionEnvironment = NEO::MockDevice::prepareExecutionEnvironment(NEO::defaultHwInfo.get(), 0);
398+
executionEnvironment->memoryManager.reset(new MemoryManagerNTHandleMock(*executionEnvironment));
399+
neoDevice = NEO::MockDevice::createWithExecutionEnvironment<NEO::MockDevice>(NEO::defaultHwInfo.get(), executionEnvironment, 0);
400+
driverHandle->setMemoryManager(executionEnvironment->memoryManager.get());
402401

403402
ze_result_t result = ZE_RESULT_SUCCESS;
404403
auto device = L0::Device::create(driverHandle.get(), neoDevice, false, &result);
@@ -410,16 +409,19 @@ HWTEST2_F(ImageCreate, givenNTHandleWhenCreatingImageThenSuccessIsReturned, IsAt
410409

411410
imageHW.reset(nullptr);
412411
delete device;
413-
driverHandle->setMemoryManager(prevMemoryManager);
414412
}
415413

416414
class FailMemoryManagerMock : public NEO::OsAgnosticMemoryManager {
417415
public:
418416
FailMemoryManagerMock(NEO::ExecutionEnvironment &executionEnvironment) : NEO::OsAgnosticMemoryManager(executionEnvironment) {}
419417

420418
NEO::GraphicsAllocation *allocateGraphicsMemoryWithProperties(const AllocationProperties &properties) override {
421-
return nullptr;
419+
if (fail) {
420+
return nullptr;
421+
}
422+
return OsAgnosticMemoryManager::allocateGraphicsMemoryWithProperties(properties);
422423
}
424+
bool fail = false;
423425
};
424426

425427
HWTEST2_F(ImageCreate, givenImageDescWhenFailImageAllocationThenProperErrorIsReturned, IsAtLeastSkl) {
@@ -447,15 +449,17 @@ HWTEST2_F(ImageCreate, givenImageDescWhenFailImageAllocationThenProperErrorIsRet
447449
}
448450

449451
NEO::MockDevice *neoDevice = nullptr;
450-
neoDevice = NEO::MockDevice::createWithNewExecutionEnvironment<NEO::MockDevice>(NEO::defaultHwInfo.get());
451-
NEO::MemoryManager *currMemoryManager = new FailMemoryManagerMock(*neoDevice->executionEnvironment);
452-
neoDevice->injectMemoryManager(currMemoryManager);
452+
auto executionEnvironment = NEO::MockDevice::prepareExecutionEnvironment(NEO::defaultHwInfo.get(), 0);
453+
auto failMemMngr = new FailMemoryManagerMock(*executionEnvironment);
454+
executionEnvironment->memoryManager.reset(failMemMngr);
455+
neoDevice = NEO::MockDevice::createWithExecutionEnvironment<NEO::MockDevice>(NEO::defaultHwInfo.get(), executionEnvironment, 0);
456+
driverHandle->setMemoryManager(executionEnvironment->memoryManager.get());
453457

454458
ze_result_t result = ZE_RESULT_SUCCESS;
455459
auto device = L0::Device::create(driverHandle.get(), neoDevice, false, &result);
456460

457-
L0::Image *imageHandle;
458-
461+
L0::Image *imageHandle = nullptr;
462+
failMemMngr->fail = true;
459463
auto ret = L0::Image::create(neoDevice->getHardwareInfo().platform.eProductFamily, device, &desc, &imageHandle);
460464

461465
ASSERT_EQ(ZE_RESULT_ERROR_OUT_OF_DEVICE_MEMORY, ret);

level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -804,6 +804,7 @@ TEST_F(KernelImmutableDataTests, whenHasRTCallsIsTrueAndNoRTDispatchGlobalsIsAll
804804

805805
immDataVector->push_back(std::move(mockKernelImmutableData));
806806

807+
neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[neoDevice->getRootDeviceIndex()]->bindlessHeapsHelper.reset(nullptr);
807808
neoDevice->injectMemoryManager(currMemoryManager);
808809

809810
EXPECT_EQ(ZE_RESULT_ERROR_OUT_OF_HOST_MEMORY, kernel->initialize(&kernelDesc));

shared/source/command_container/command_encoder_bdw_and_later.inl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ void EncodeMediaInterfaceDescriptorLoad<Family>::encode(CommandContainer &contai
248248
*mediaStateFlush = Family::cmdInitMediaStateFlush;
249249

250250
auto iddOffset = static_cast<uint32_t>(ptrDiff(container.getIddBlock(), heapBase));
251+
251252
iddOffset += ApiSpecificConfig::getBindlessConfiguration() ? static_cast<uint32_t>(container.getDevice()->getBindlessHeapsHelper()->getHeap(BindlessHeapsHelper::GLOBAL_DSH)->getGraphicsAllocation()->getGpuAddress() -
252253
container.getDevice()->getBindlessHeapsHelper()->getHeap(BindlessHeapsHelper::GLOBAL_DSH)->getGraphicsAllocation()->getGpuBaseAddress())
253254
: 0;

0 commit comments

Comments
 (0)