Program refactor

* decouple program_info
* move global allocations relocation to linker
* remove obsolete tests
* initial cleanup to kernel_info kernelInfo
* unified patchtoken validation

Change-Id: I0567cd6d607b4f3cf44e6caf33681f6210760f76
This commit is contained in:
Jaroslaw Chodor
2020-01-11 18:25:26 +01:00
committed by sys_ocldev
parent 570b09850d
commit f057712fa7
68 changed files with 3442 additions and 1705 deletions

View File

@@ -9,6 +9,8 @@
#include "core/compiler_interface/compiler_cache.h"
#include "core/helpers/hash.h"
#include "core/program/program_info_from_patchtokens.h"
#include "runtime/compiler_interface/patchtokens_decoder.h"
#include "runtime/context/context.h"
#include "runtime/program/create.inl"
#include "runtime/program/kernel_info.h"
@@ -81,56 +83,30 @@ void GlobalMockSipProgram::shutDownSipProgram() {
}
Program *GlobalMockSipProgram::getSipProgramWithCustomBinary() {
char binary[1024];
char *pBinary = binary;
auto totalSize = 0u;
NEO::PatchTokenBinary::ProgramFromPatchtokens programTokens;
programTokens.kernels.resize(1);
SProgramBinaryHeader *pBHdr = (SProgramBinaryHeader *)binary;
pBHdr->Magic = iOpenCL::MAGIC_CL;
pBHdr->Version = iOpenCL::CURRENT_ICBE_VERSION;
pBHdr->Device = platformDevices[0]->platform.eRenderCoreFamily;
pBHdr->GPUPointerSizeInBytes = 8;
pBHdr->NumberOfKernels = 1;
pBHdr->SteppingId = 0;
pBHdr->PatchListSize = 0;
pBinary += sizeof(SProgramBinaryHeader);
totalSize += sizeof(SProgramBinaryHeader);
const uint8_t isa[] = "kernel morphEUs()";
const char name[] = "sip";
SKernelBinaryHeaderCommon *pKHdr = (SKernelBinaryHeaderCommon *)pBinary;
pKHdr->CheckSum = 0;
pKHdr->ShaderHashCode = 0;
pKHdr->KernelNameSize = 4;
pKHdr->PatchListSize = 0;
pKHdr->KernelHeapSize = 16;
pKHdr->GeneralStateHeapSize = 0;
pKHdr->DynamicStateHeapSize = 0;
pKHdr->SurfaceStateHeapSize = 0;
pKHdr->KernelUnpaddedSize = 0;
pBinary += sizeof(SKernelBinaryHeaderCommon);
totalSize += sizeof(SKernelBinaryHeaderCommon);
char *pKernelBin = pBinary;
strcpy_s(pBinary, 4, "sip");
pBinary += pKHdr->KernelNameSize;
totalSize += pKHdr->KernelNameSize;
SProgramBinaryHeader progHeader = {};
progHeader.NumberOfKernels = 1;
strcpy_s(pBinary, 18, "kernel morphEUs()");
totalSize += pKHdr->KernelHeapSize;
SKernelBinaryHeaderCommon kernHeader = {};
kernHeader.KernelNameSize = sizeof(name);
kernHeader.KernelHeapSize = sizeof(isa);
kernHeader.KernelUnpaddedSize = sizeof(isa);
uint32_t kernelBinSize =
pKHdr->DynamicStateHeapSize +
pKHdr->GeneralStateHeapSize +
pKHdr->KernelHeapSize +
pKHdr->KernelNameSize +
pKHdr->PatchListSize +
pKHdr->SurfaceStateHeapSize;
uint64_t hashValue = Hash::hash(reinterpret_cast<const char *>(pKernelBin), kernelBinSize);
pKHdr->CheckSum = static_cast<uint32_t>(hashValue & 0xFFFFFFFF);
programTokens.header = &progHeader;
programTokens.kernels[0].header = &kernHeader;
programTokens.kernels[0].isa = isa;
programTokens.kernels[0].name = name;
auto errCode = CL_SUCCESS;
auto program = Program::createFromGenBinary(executionEnvironment, nullptr, binary, totalSize, false, &errCode);
UNRECOVERABLE_IF(errCode != CL_SUCCESS);
errCode = program->processGenBinary();
UNRECOVERABLE_IF(errCode != CL_SUCCESS);
return program;
NEO::ProgramInfo programInfo;
NEO::populateProgramInfo(programInfo, programTokens, {});
Program *ret = new Program(executionEnvironment, nullptr, false);
ret->processProgramInfo(programInfo);
return ret;
}
} // namespace NEO