Add method to read kernel base address

Signed-off-by: Jaime Arteaga <jaime.a.arteaga.molina@intel.com>
This commit is contained in:
Jaime Arteaga
2022-03-25 02:34:50 +00:00
committed by Compute-Runtime-Automation
parent c8116b713f
commit e8a6842b7e
5 changed files with 36 additions and 0 deletions

View File

@@ -106,6 +106,7 @@ struct Kernel : _ze_kernel_handle_t, virtual NEO::DispatchKernelEncoderI {
~Kernel() override = default;
virtual ze_result_t destroy() = 0;
virtual ze_result_t getBaseAddress(uint64_t *baseAddress) = 0;
virtual ze_result_t setIndirectAccess(ze_kernel_indirect_access_flags_t flags) = 0;
virtual ze_result_t getIndirectAccess(ze_kernel_indirect_access_flags_t *flags) = 0;
virtual ze_result_t getSourceAttributes(uint32_t *pSize, char **pString) = 0;

View File

@@ -213,6 +213,13 @@ void KernelImmutableData::createRelocatedDebugData(NEO::GraphicsAllocation *glob
}
}
ze_result_t KernelImp::getBaseAddress(uint64_t *baseAddress) {
if (baseAddress) {
*baseAddress = NEO::GmmHelper::decanonize(this->kernelImmData->getKernelInfo()->kernelAllocation->getGpuAddress());
}
return ZE_RESULT_SUCCESS;
}
uint32_t KernelImmutableData::getIsaSize() const {
return static_cast<uint32_t>(isaGraphicsAllocation->getUnderlyingBufferSize());
}

View File

@@ -33,6 +33,7 @@ struct KernelImp : Kernel {
return ZE_RESULT_SUCCESS;
}
ze_result_t getBaseAddress(uint64_t *baseAddress) override;
ze_result_t setIndirectAccess(ze_kernel_indirect_access_flags_t flags) override;
ze_result_t getIndirectAccess(ze_kernel_indirect_access_flags_t *flags) override;
ze_result_t getSourceAttributes(uint32_t *pSize, char **pString) override;

View File

@@ -68,6 +68,8 @@ struct ModuleImmutableDataFixture : public DeviceFixture {
0,
sizeof(uint32_t),
MemoryPool::System4KBPages));
kernelInfo->kernelAllocation = isaGraphicsAllocation.get();
}
void setDevice(L0::Device *inDevice) {

View File

@@ -62,6 +62,31 @@ TEST_F(KernelInitTest, givenKernelToInitWhenItHasUnknownArgThenUnknowKernelArgHa
EXPECT_EQ(mockKernelImmData->getDescriptor().payloadMappings.explicitArgs[0].type, NEO::ArgDescriptor::ArgTUnknown);
}
using KernelBaseAddressTests = Test<ModuleImmutableDataFixture>;
TEST_F(KernelBaseAddressTests, whenQueryingKernelBaseAddressThenCorrectAddressIsReturned) {
uint32_t perHwThreadPrivateMemorySizeRequested = 32u;
std::unique_ptr<MockImmutableData> mockKernelImmData =
std::make_unique<MockImmutableData>(perHwThreadPrivateMemorySizeRequested);
createModuleFromBinary(perHwThreadPrivateMemorySizeRequested, false, mockKernelImmData.get());
std::unique_ptr<ModuleImmutableDataFixture::MockKernel> kernel;
kernel = std::make_unique<ModuleImmutableDataFixture::MockKernel>(module.get());
ze_kernel_desc_t desc = {};
desc.pKernelName = kernelName.c_str();
mockKernelImmData->resizeExplicitArgs(1);
kernel->initialize(&desc);
uint64_t baseAddress = 0;
ze_result_t res = kernel->getBaseAddress(nullptr);
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
res = kernel->getBaseAddress(&baseAddress);
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
EXPECT_NE(baseAddress, 0u);
EXPECT_EQ(baseAddress, kernel->getImmutableData()->getKernelInfo()->kernelAllocation->getGpuAddress());
}
TEST(KernelArgTest, givenKernelWhenSetArgUnknownCalledThenSuccessRteurned) {
Mock<Kernel> mockKernel;
EXPECT_EQ(mockKernel.setArgUnknown(0, 0, nullptr), ZE_RESULT_SUCCESS);