feature(debugger): Force GRF count to 128

System Routine changes for implementing large-grf debugging
will result in GRF count of 256 being reported for kernels
in all GRF modes. Applications using L0 Debug API do not
yet have a way to determine actual GRF count for kernel.

This commit is a temporary adjustment to avoid breaking debug
API users after new system routine is enabled.

This problem will be fully solved in follow up patch with switch to
zetDebugGetThreadRegisterSetProperties

Related-to: NEO-7370

Signed-off-by: Brandon Yates <brandon.yates@intel.com>
This commit is contained in:
Brandon Yates
2023-06-23 17:04:19 +00:00
committed by Compute-Runtime-Automation
parent 5bfcb07b49
commit bef89a3a7c
4 changed files with 50 additions and 29 deletions

View File

@@ -1192,6 +1192,7 @@ ze_result_t DebugSession::getRegisterSetProperties(Device *device, uint32_t *pCo
auto parseRegsetDesc = [&](const SIP::regset_desc &regsetDesc, zet_debug_regset_type_intel_gpu_t regsetType) { auto parseRegsetDesc = [&](const SIP::regset_desc &regsetDesc, zet_debug_regset_type_intel_gpu_t regsetType) {
if (regsetDesc.num) { if (regsetDesc.num) {
if (totalRegsetNum < *pCount) { if (totalRegsetNum < *pCount) {
uint16_t num = (regsetType == ZET_DEBUG_REGSET_TYPE_GRF_INTEL_GPU) ? 128 : regsetDesc.num;
zet_debug_regset_properties_t regsetProps = { zet_debug_regset_properties_t regsetProps = {
ZET_STRUCTURE_TYPE_DEBUG_REGSET_PROPERTIES, ZET_STRUCTURE_TYPE_DEBUG_REGSET_PROPERTIES,
nullptr, nullptr,
@@ -1199,7 +1200,7 @@ ze_result_t DebugSession::getRegisterSetProperties(Device *device, uint32_t *pCo
0, 0,
DebugSessionImp::typeToRegsetFlags(regsetType), DebugSessionImp::typeToRegsetFlags(regsetType),
0, 0,
regsetDesc.num, num,
regsetDesc.bits, regsetDesc.bits,
regsetDesc.bytes, regsetDesc.bytes,
}; };

View File

@@ -318,6 +318,21 @@ TEST_F(DebugApiTest, givenNonZeroCountAndNullRegsetPointerWhenGetRegisterSetProp
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_NULL_POINTER, zetDebugGetRegisterSetProperties(device->toHandle(), &count, nullptr)); EXPECT_EQ(ZE_RESULT_ERROR_INVALID_NULL_POINTER, zetDebugGetRegisterSetProperties(device->toHandle(), &count, nullptr));
} }
TEST_F(DebugApiTest, givenSIPHeaderGRFCountNotEqualTo128ThenGetRegisterSetPropertiesReturns128) {
mockBuiltins = new MockBuiltins();
mockBuiltins->stateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(2, 256);
neoDevice->executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(mockBuiltins);
uint32_t count = 0;
EXPECT_EQ(ZE_RESULT_SUCCESS, zetDebugGetRegisterSetProperties(device->toHandle(), &count, nullptr));
EXPECT_EQ(12u, count);
std::vector<zet_debug_regset_properties_t> regsetProps(count);
EXPECT_EQ(ZE_RESULT_SUCCESS, zetDebugGetRegisterSetProperties(device->toHandle(), &count, regsetProps.data()));
EXPECT_EQ(12u, count);
EXPECT_EQ(128u, regsetProps[0].count);
}
TEST_F(DebugApiTest, givenGetRegisterSetPropertiesCalledCorrectPropertiesReturned) { TEST_F(DebugApiTest, givenGetRegisterSetPropertiesCalledCorrectPropertiesReturned) {
uint32_t count = 0; uint32_t count = 0;
EXPECT_EQ(ZE_RESULT_SUCCESS, zetDebugGetRegisterSetProperties(device->toHandle(), &count, nullptr)); EXPECT_EQ(ZE_RESULT_SUCCESS, zetDebugGetRegisterSetProperties(device->toHandle(), &count, nullptr));

View File

@@ -29,6 +29,10 @@ void clearUseFlags() {
} }
std::vector<char> createStateSaveAreaHeader(uint32_t version) { std::vector<char> createStateSaveAreaHeader(uint32_t version) {
return createStateSaveAreaHeader(version, 128);
}
std::vector<char> createStateSaveAreaHeader(uint32_t version, uint16_t grfNum) {
SIP::StateSaveAreaHeader stateSaveAreaHeader = { SIP::StateSaveAreaHeader stateSaveAreaHeader = {
{ {
// versionHeader // versionHeader
@@ -43,32 +47,32 @@ std::vector<char> createStateSaveAreaHeader(uint32_t version) {
}, },
{ {
// regHeader // regHeader
1, // num_slices 1, // num_slices
6, // num_subslices_per_slice 6, // num_subslices_per_slice
16, // num_eus_per_subslice 16, // num_eus_per_subslice
7, // num_threads_per_eu 7, // num_threads_per_eu
0, // state_area_offset 0, // state_area_offset
6144, // state_save_size 6144, // state_save_size
0, // slm_area_offset 0, // slm_area_offset
0, // slm_bank_size 0, // slm_bank_size
0, // slm_bank_valid 0, // slm_bank_valid
4740, // sr_magic_offset 4740, // sr_magic_offset
{0, 128, 256, 32}, // grf {0, grfNum, 256, 32}, // grf
{4096, 1, 256, 32}, // addr {4096, 1, 256, 32}, // addr
{4128, 2, 32, 4}, // flag {4128, 2, 32, 4}, // flag
{4156, 1, 32, 4}, // emask {4156, 1, 32, 4}, // emask
{4160, 2, 128, 16}, // sr {4160, 2, 128, 16}, // sr
{4192, 1, 128, 16}, // cr {4192, 1, 128, 16}, // cr
{4256, 1, 96, 12}, // notification {4256, 1, 96, 12}, // notification
{4288, 1, 128, 16}, // tdr {4288, 1, 128, 16}, // tdr
{4320, 10, 256, 32}, // acc {4320, 10, 256, 32}, // acc
{0, 0, 0, 0}, // mme {0, 0, 0, 0}, // mme
{4672, 1, 32, 4}, // ce {4672, 1, 32, 4}, // ce
{4704, 1, 128, 16}, // sp {4704, 1, 128, 16}, // sp
{0, 0, 0, 0}, // cmd {0, 0, 0, 0}, // cmd
{4640, 1, 128, 16}, // tm {4640, 1, 128, 16}, // tm
{0, 1, 32, 4}, // fc {0, 1, 32, 4}, // fc
{4736, 1, 32, 4}, // dbg {4736, 1, 32, 4}, // dbg
}, },
}; };
@@ -96,7 +100,7 @@ std::vector<char> createStateSaveAreaHeader(uint32_t version) {
0, // slm_bank_size 0, // slm_bank_size
0, // slm_bank_valid 0, // slm_bank_valid
4740, // sr_magic_offset 4740, // sr_magic_offset
{0, 128, 256, 32}, // grf {0, grfNum, 256, 32}, // grf
{4096, 1, 256, 32}, // addr {4096, 1, 256, 32}, // addr
{4128, 2, 32, 4}, // flag {4128, 2, 32, 4}, // flag
{4156, 1, 32, 4}, // emask {4156, 1, 32, 4}, // emask

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2018-2021 Intel Corporation * Copyright (C) 2018-2023 Intel Corporation
* *
* SPDX-License-Identifier: MIT * SPDX-License-Identifier: MIT
* *
@@ -47,5 +47,6 @@ extern bool useMockSip;
void clearUseFlags(); void clearUseFlags();
std::vector<char> createStateSaveAreaHeader(uint32_t version); std::vector<char> createStateSaveAreaHeader(uint32_t version);
std::vector<char> createStateSaveAreaHeader(uint32_t version, uint16_t grfNum);
} // namespace MockSipData } // namespace MockSipData
} // namespace NEO } // namespace NEO