Skip to content

Commit 86434e4

Browse files
Move PATCH_TOKEN_GLOBAL_HOST_ACCESS_TABLE to kernel scope tokens
This commit moves patch token with global host access table to the kernel scope from the program scope. Related-To: NEO-6734 Signed-off-by: Kacper Nowak <[email protected]>
1 parent a5ac961 commit 86434e4

File tree

5 files changed

+51
-40
lines changed

5 files changed

+51
-40
lines changed

shared/source/device_binary_format/patchtokens_decoder.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,9 @@ inline bool decodeToken(const SPatchItemHeader *token, KernelFromPatchtokens &ou
390390
case PATCH_TOKEN_KERNEL_ARGUMENT_INFO:
391391
assignArgInfo(out, token);
392392
break;
393+
case _PATCH_TOKEN_GLOBAL_HOST_ACCESS_TABLE:
394+
assignToken(out.tokens.hostAccessTable, token);
395+
break;
393396

394397
case PATCH_TOKEN_SAMPLER_KERNEL_ARGUMENT:
395398
case PATCH_TOKEN_IMAGE_MEMORY_OBJECT_KERNEL_ARGUMENT:
@@ -440,9 +443,6 @@ inline bool decodeToken(const SPatchItemHeader *token, ProgramFromPatchtokens &o
440443
case PATCH_TOKEN_PROGRAM_SYMBOL_TABLE:
441444
assignToken(progTok.symbolTable, token);
442445
break;
443-
case _PATCH_TOKEN_GLOBAL_HOST_ACCESS_TABLE:
444-
assignToken(progTok.hostAccessTable, token);
445-
break;
446446
}
447447
return true;
448448
}

shared/source/device_binary_format/patchtokens_decoder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ struct KernelFromPatchtokens {
143143
const SPatchItemHeader *gtpinInfo = nullptr;
144144
const SPatchFunctionTableInfo *programSymbolTable = nullptr;
145145
const SPatchFunctionTableInfo *programRelocationTable = nullptr;
146+
const SPatchFunctionTableInfo *hostAccessTable = nullptr;
146147
StackVecKernelArgs kernelArgs;
147148
StackVecStrings strings;
148149
struct {
@@ -183,7 +184,6 @@ struct ProgramFromPatchtokens {
183184
StackVec<const SPatchConstantPointerProgramBinaryInfo *, 4> constantPointer;
184185
StackVec<const SPatchGlobalPointerProgramBinaryInfo *, 4> globalPointer;
185186
const SPatchFunctionTableInfo *symbolTable = nullptr;
186-
const SPatchFunctionTableInfo *hostAccessTable = nullptr;
187187
} programScopeTokens;
188188
StackVec<KernelFromPatchtokens, 2> kernels;
189189
StackVec<const SPatchItemHeader *, 4> unhandledTokens;

shared/source/program/program_info_from_patchtokens.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ void populateSingleKernelInfo(ProgramInfo &dst, const PatchTokenBinary::ProgramF
4343
dst.linkerInput->decodeRelocationTable(decodedKernel.tokens.programRelocationTable + 1, decodedKernel.tokens.programRelocationTable->NumEntries, kernelNum);
4444
}
4545

46+
if (decodedKernel.tokens.hostAccessTable) {
47+
parseHostAccessTable(dst, decodedKernel.tokens.hostAccessTable);
48+
}
49+
4650
dst.kernelInfos.push_back(kernelInfo.release());
4751
}
4852

@@ -107,10 +111,6 @@ void populateProgramInfo(ProgramInfo &dst, const PatchTokenBinary::ProgramFromPa
107111
const auto patch = src.programScopeTokens.symbolTable;
108112
dst.linkerInput->decodeGlobalVariablesSymbolTable(patch + 1, patch->NumEntries);
109113
}
110-
111-
if (src.programScopeTokens.hostAccessTable != nullptr) {
112-
parseHostAccessTable(dst, src.programScopeTokens.hostAccessTable);
113-
}
114114
}
115115

116116
void parseHostAccessTable(ProgramInfo &dst, const void *hostAccessTable) {

shared/test/unit_test/device_binary_format/patchtokens_tests.h

Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -101,34 +101,6 @@ struct ValidEmptyProgram : NEO::PatchTokenBinary::ProgramFromPatchtokens {
101101
iOpenCL::SProgramBinaryHeader *headerMutable = nullptr;
102102
};
103103

104-
struct ValidProgramWithHostAccessTable : ValidEmptyProgram {
105-
ValidProgramWithHostAccessTable() {
106-
iOpenCL::SPatchFunctionTableInfo hostAccessTok = {};
107-
hostAccessTok.Token = NEO::PatchTokenBinary::_PATCH_TOKEN_GLOBAL_HOST_ACCESS_TABLE;
108-
hostAccessTok.NumEntries = 2;
109-
struct HostAccessTableEntry {
110-
char deviceName[vISA::MAX_SYMBOL_NAME_LENGTH];
111-
char hostName[vISA::MAX_SYMBOL_NAME_LENGTH];
112-
};
113-
hostAccessTok.Size = sizeof(hostAccessTok) + 2 * sizeof(HostAccessTableEntry);
114-
const size_t hostAccessTokStorageSize = sizeof(hostAccessTok) + 2 * sizeof(HostAccessTableEntry);
115-
uint8_t hostAccessTokStorage[hostAccessTokStorageSize] = {};
116-
uint8_t *storagePtr = hostAccessTokStorage;
117-
memcpy_s(storagePtr, hostAccessTokStorageSize, &hostAccessTok, sizeof(iOpenCL::SPatchFunctionTableInfo));
118-
storagePtr = ptrOffset(storagePtr, sizeof(iOpenCL::SPatchFunctionTableInfo));
119-
120-
HostAccessTableEntry *entries = reinterpret_cast<HostAccessTableEntry *>(storagePtr);
121-
strcpy_s(entries[0].deviceName, vISA::MAX_SYMBOL_NAME_LENGTH, "deviceNameOne");
122-
strcpy_s(entries[0].hostName, vISA::MAX_SYMBOL_NAME_LENGTH, "hostNameOne");
123-
strcpy_s(entries[1].deviceName, vISA::MAX_SYMBOL_NAME_LENGTH, "deviceNameTwo");
124-
strcpy_s(entries[1].hostName, vISA::MAX_SYMBOL_NAME_LENGTH, "hostNameTwo");
125-
126-
storage.insert(storage.end(), hostAccessTokStorage, hostAccessTokStorage + hostAccessTokStorageSize);
127-
recalcTokPtr();
128-
headerMutable->PatchListSize = hostAccessTokStorageSize;
129-
}
130-
};
131-
132104
struct ValidProgramWithConstantSurface : ValidEmptyProgram {
133105
ValidProgramWithConstantSurface() {
134106
iOpenCL::SPatchAllocateConstantMemorySurfaceProgramBinaryInfo constSurfTok = {};
@@ -362,4 +334,40 @@ struct ValidProgramWithKernelAndArg : ValidProgramWithKernel {
362334
size_t kernelArgOffset = 0U;
363335
};
364336

337+
struct ValidProgramWithKernelUsingHostAccessTable : ValidProgramWithKernel {
338+
ValidProgramWithKernelUsingHostAccessTable() {
339+
hostAccessMutableOffset = storage.size();
340+
iOpenCL::SPatchFunctionTableInfo hostAccessTok = {};
341+
hostAccessTok.Token = NEO::PatchTokenBinary::_PATCH_TOKEN_GLOBAL_HOST_ACCESS_TABLE;
342+
hostAccessTok.NumEntries = 2;
343+
struct HostAccessTableEntry {
344+
char deviceName[vISA::MAX_SYMBOL_NAME_LENGTH];
345+
char hostName[vISA::MAX_SYMBOL_NAME_LENGTH];
346+
};
347+
hostAccessTok.Size = sizeof(hostAccessTok) + 2 * sizeof(HostAccessTableEntry);
348+
const size_t hostAccessTokStorageSize = sizeof(hostAccessTok) + 2 * sizeof(HostAccessTableEntry);
349+
uint8_t hostAccessTokStorage[hostAccessTokStorageSize] = {};
350+
uint8_t *storagePtr = hostAccessTokStorage;
351+
memcpy_s(storagePtr, hostAccessTokStorageSize, &hostAccessTok, sizeof(iOpenCL::SPatchFunctionTableInfo));
352+
storagePtr = ptrOffset(storagePtr, sizeof(iOpenCL::SPatchFunctionTableInfo));
353+
354+
HostAccessTableEntry *entries = reinterpret_cast<HostAccessTableEntry *>(storagePtr);
355+
strcpy_s(entries[0].deviceName, vISA::MAX_SYMBOL_NAME_LENGTH, "deviceNameOne");
356+
strcpy_s(entries[0].hostName, vISA::MAX_SYMBOL_NAME_LENGTH, "hostNameOne");
357+
strcpy_s(entries[1].deviceName, vISA::MAX_SYMBOL_NAME_LENGTH, "deviceNameTwo");
358+
strcpy_s(entries[1].hostName, vISA::MAX_SYMBOL_NAME_LENGTH, "hostNameTwo");
359+
360+
storage.insert(storage.end(), hostAccessTokStorage, hostAccessTokStorage + hostAccessTokStorageSize);
361+
ValidProgramWithKernel::recalcTokPtr();
362+
}
363+
364+
void recalcTokPtr() {
365+
ValidProgramWithKernel::recalcTokPtr();
366+
hostAccessMutable = reinterpret_cast<iOpenCL::SPatchFunctionTableInfo *>(storage.data() + hostAccessMutableOffset);
367+
this->kernels[0].tokens.hostAccessTable = hostAccessMutable;
368+
}
369+
370+
iOpenCL::SPatchFunctionTableInfo *hostAccessMutable = nullptr;
371+
size_t hostAccessMutableOffset = 0u;
372+
};
365373
} // namespace PatchTokensTestData

shared/test/unit_test/program/program_info_from_patchtokens_tests.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -300,12 +300,15 @@ TEST(PopulateProgramInfoFromPatchtokensTests, GivenProgramWithKernelsWhenKernelH
300300
EXPECT_EQ(1U, receivedSegmentIds[1]);
301301
}
302302

303-
TEST(PopulateProgramInfoFromPatchtokensTests, givenProgramWithHostAccessTableGThenPopulateDeviceHostNameMapCorrectly) {
304-
PatchTokensTestData::ValidProgramWithHostAccessTable programTokens;
303+
TEST(PopulateProgramInfoFromPatchtokensTests, givenProgramWithKernelWhenKernelHasHostAccessTableThenPopulateDeviceHostNameMapCorrectly) {
304+
PatchTokensTestData::ValidProgramWithKernelUsingHostAccessTable programToEncode;
305+
programToEncode.headerMutable->NumberOfKernels = 1;
306+
programToEncode.storage.insert(programToEncode.storage.end(), programToEncode.kernels[0].blobs.kernelInfo.begin(), programToEncode.kernels[0].blobs.kernelInfo.end());
305307
NEO::PatchTokenBinary::ProgramFromPatchtokens decodedProgram;
306-
bool decodeSuccess = NEO::PatchTokenBinary::decodeProgramFromPatchtokensBlob(programTokens.blobs.programInfo, decodedProgram);
308+
bool decodeSuccess = NEO::PatchTokenBinary::decodeProgramFromPatchtokensBlob(programToEncode.storage, decodedProgram);
307309
EXPECT_TRUE(decodeSuccess);
308-
NEO::ProgramInfo programInfo;
310+
311+
NEO::ProgramInfo programInfo = {};
309312
NEO::populateProgramInfo(programInfo, decodedProgram);
310313
EXPECT_EQ(2u, programInfo.globalsDeviceToHostNameMap.size());
311314
EXPECT_STREQ("hostNameOne", programInfo.globalsDeviceToHostNameMap["deviceNameOne"].c_str());

0 commit comments

Comments
 (0)