Update Program::extractInternalOptions
Change-Id: Ie67a8ef7b6f010a44b252666e9d9ef48fdeac9e0 Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
This commit is contained in:
parent
0193b3ea69
commit
5bed747e33
|
@ -18,6 +18,8 @@
|
|||
#include "runtime/source_level_debugger/source_level_debugger.h"
|
||||
|
||||
#include <cstring>
|
||||
#include <iterator>
|
||||
#include <sstream>
|
||||
|
||||
namespace NEO {
|
||||
|
||||
|
@ -198,14 +200,27 @@ cl_int Program::build(const cl_device_id device, const char *buildOptions, bool
|
|||
return ret;
|
||||
}
|
||||
|
||||
void Program::extractInternalOptions(std::string &options) {
|
||||
void Program::extractInternalOptions(const std::string &options) {
|
||||
std::istringstream inputStringStream(options);
|
||||
std::vector<std::string> optionsVector{std::istream_iterator<std::string>{inputStringStream},
|
||||
std::istream_iterator<std::string>{}};
|
||||
for (auto &optionString : internalOptionsToExtract) {
|
||||
size_t pos = options.find(optionString);
|
||||
if (pos != std::string::npos) {
|
||||
options.erase(pos, optionString.length());
|
||||
auto element = std::find(optionsVector.begin(), optionsVector.end(), optionString);
|
||||
if (element == optionsVector.end()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isFlagOption(optionString)) {
|
||||
internalOptions.append(optionString);
|
||||
internalOptions.append(" ");
|
||||
} else if ((element + 1 != optionsVector.end()) &&
|
||||
isOptionValueValid(optionString, *(element + 1))) {
|
||||
internalOptions.append(optionString);
|
||||
internalOptions.append(" ");
|
||||
internalOptions.append(*(element + 1));
|
||||
internalOptions.append(" ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
|
|
|
@ -10,5 +10,15 @@
|
|||
#include <vector>
|
||||
|
||||
namespace NEO {
|
||||
|
||||
const std::vector<std::string> Program::internalOptionsToExtract = {"-cl-intel-gtpin-rera", "-cl-intel-greater-than-4GB-buffer-required"};
|
||||
};
|
||||
|
||||
bool Program::isFlagOption(const std::string &option) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Program::isOptionValueValid(const std::string &option, const std::string &value) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}; // namespace NEO
|
||||
|
|
|
@ -273,7 +273,9 @@ class Program : public BaseObject<_cl_program> {
|
|||
void updateNonUniformFlag();
|
||||
void updateNonUniformFlag(const Program **inputProgram, size_t numInputPrograms);
|
||||
|
||||
void extractInternalOptions(std::string &options);
|
||||
void extractInternalOptions(const std::string &options);
|
||||
MOCKABLE_VIRTUAL bool isFlagOption(const std::string &option);
|
||||
MOCKABLE_VIRTUAL bool isOptionValueValid(const std::string &option, const std::string &value);
|
||||
MOCKABLE_VIRTUAL void applyAdditionalOptions();
|
||||
|
||||
MOCKABLE_VIRTUAL bool appendKernelDebugOptions();
|
||||
|
|
|
@ -49,6 +49,7 @@ class MockProgram : public Program {
|
|||
using Program::genBinarySize;
|
||||
using Program::getKernelInfo;
|
||||
using Program::globalSurface;
|
||||
using Program::internalOptionsToExtract;
|
||||
using Program::irBinary;
|
||||
using Program::irBinarySize;
|
||||
using Program::isProgramBinaryResolved;
|
||||
|
@ -129,6 +130,20 @@ class MockProgram : public Program {
|
|||
extractInternalOptions(buildOptions);
|
||||
}
|
||||
|
||||
bool isFlagOption(const std::string &option) override {
|
||||
if (isFlagOptionOverride != -1) {
|
||||
return (isFlagOptionOverride > 0);
|
||||
}
|
||||
return Program::isFlagOption(option);
|
||||
}
|
||||
|
||||
bool isOptionValueValid(const std::string &option, const std::string &value) override {
|
||||
if (isOptionValueValidOverride != -1) {
|
||||
return (isOptionValueValidOverride > 0);
|
||||
}
|
||||
return Program::isOptionValueValid(option, value);
|
||||
}
|
||||
|
||||
cl_int isHandled(const PatchTokenBinary::ProgramFromPatchtokens &decodedProgram) const override {
|
||||
if (skipValidationOfBinary) {
|
||||
return CL_SUCCESS;
|
||||
|
@ -138,6 +153,8 @@ class MockProgram : public Program {
|
|||
|
||||
bool contextSet = false;
|
||||
bool skipValidationOfBinary = false;
|
||||
int isFlagOptionOverride = -1;
|
||||
int isOptionValueValidOverride = -1;
|
||||
};
|
||||
|
||||
class GlobalMockSipProgram : public Program {
|
||||
|
|
|
@ -2555,14 +2555,14 @@ class Program32BitTests : public ProgramTests {
|
|||
};
|
||||
|
||||
TEST_F(Program32BitTests, givenDeviceWithForce32BitAddressingOnWhenBuiltinIsCreatedThenNoFlagsArePassedAsInternalOptions) {
|
||||
MockProgram pProgram(*pDevice->getExecutionEnvironment());
|
||||
auto &internalOptions = pProgram.getInternalOptions();
|
||||
MockProgram program(*pDevice->getExecutionEnvironment());
|
||||
auto &internalOptions = program.getInternalOptions();
|
||||
EXPECT_THAT(internalOptions, testing::HasSubstr(std::string("")));
|
||||
}
|
||||
|
||||
TEST_F(Program32BitTests, givenDeviceWithForce32BitAddressingOnWhenProgramIsCreatedThen32bitFlagIsPassedAsInternalOption) {
|
||||
MockProgram pProgram(*pDevice->getExecutionEnvironment(), pContext, false);
|
||||
auto &internalOptions = pProgram.getInternalOptions();
|
||||
MockProgram program(*pDevice->getExecutionEnvironment(), pContext, false);
|
||||
auto &internalOptions = program.getInternalOptions();
|
||||
std::string s1 = internalOptions;
|
||||
size_t pos = s1.find("-m32");
|
||||
if (is64bit) {
|
||||
|
@ -2886,13 +2886,13 @@ TEST_F(ProgramTests, givenSeparateBlockKernelsWhenSubgroupKernelWithChildKernelT
|
|||
|
||||
TEST(SimpleProgramTests, givenDefaultProgramWhenSetDeviceIsCalledThenDeviceIsSet) {
|
||||
ExecutionEnvironment executionEnvironment;
|
||||
MockProgram pProgram(executionEnvironment);
|
||||
EXPECT_EQ(nullptr, pProgram.getDevicePtr());
|
||||
MockProgram program(executionEnvironment);
|
||||
EXPECT_EQ(nullptr, program.getDevicePtr());
|
||||
auto dummyDevice = (Device *)0x1337;
|
||||
pProgram.SetDevice(dummyDevice);
|
||||
EXPECT_EQ(dummyDevice, pProgram.getDevicePtr());
|
||||
pProgram.SetDevice(nullptr);
|
||||
EXPECT_EQ(nullptr, pProgram.getDevicePtr());
|
||||
program.SetDevice(dummyDevice);
|
||||
EXPECT_EQ(dummyDevice, program.getDevicePtr());
|
||||
program.SetDevice(nullptr);
|
||||
EXPECT_EQ(nullptr, program.getDevicePtr());
|
||||
}
|
||||
|
||||
TEST(ProgramDestructionTests, givenProgramUsingDeviceWhenItIsDestroyedAfterPlatfromCleanupThenItIsCleanedUpProperly) {
|
||||
|
@ -2982,28 +2982,70 @@ TEST_F(ProgramTests, whenRebuildingProgramThenStoreDeviceBinaryProperly) {
|
|||
EXPECT_EQ(0, memcmp(binaryToReturn, program->genBinary.get(), program->genBinarySize));
|
||||
}
|
||||
|
||||
TEST_F(ProgramTests, givenProgramWhenInternalOptionsArePassedThenTheyAreRemovedFromBuildOptions) {
|
||||
TEST_F(ProgramTests, givenProgramWhenInternalOptionsArePassedThenTheyAreAddedToProgramInternalOptions) {
|
||||
ExecutionEnvironment executionEnvironment;
|
||||
MockProgram pProgram(executionEnvironment);
|
||||
pProgram.getInternalOptions().erase();
|
||||
EXPECT_EQ(nullptr, pProgram.getDevicePtr());
|
||||
MockProgram program(executionEnvironment);
|
||||
program.getInternalOptions().erase();
|
||||
EXPECT_EQ(nullptr, program.getDevicePtr());
|
||||
const char *internalOption = "-cl-intel-gtpin-rera";
|
||||
std::string buildOptions(internalOption);
|
||||
pProgram.extractInternalOptionsForward(buildOptions);
|
||||
EXPECT_EQ(0u, buildOptions.length());
|
||||
EXPECT_TRUE(pProgram.getInternalOptions() == std::string(internalOption) + " ");
|
||||
program.extractInternalOptionsForward(buildOptions);
|
||||
EXPECT_TRUE(program.getInternalOptions() == std::string(internalOption) + " ");
|
||||
}
|
||||
|
||||
TEST_F(ProgramTests, givenProgramWhenUnknownInternalOptionsArePassedThenTheyAreNotRemovedFromBuildOptions) {
|
||||
TEST_F(ProgramTests, givenProgramWhenUnknownInternalOptionsArePassedThenTheyAreNotAddedToProgramInternalOptions) {
|
||||
ExecutionEnvironment executionEnvironment;
|
||||
MockProgram pProgram(executionEnvironment);
|
||||
pProgram.getInternalOptions().erase();
|
||||
EXPECT_EQ(nullptr, pProgram.getDevicePtr());
|
||||
MockProgram program(executionEnvironment);
|
||||
program.getInternalOptions().erase();
|
||||
EXPECT_EQ(nullptr, program.getDevicePtr());
|
||||
const char *internalOption = "-unknown-internal-options-123";
|
||||
std::string buildOptions(internalOption);
|
||||
pProgram.extractInternalOptionsForward(buildOptions);
|
||||
EXPECT_EQ(0u, pProgram.getInternalOptions().length());
|
||||
EXPECT_TRUE(buildOptions == internalOption);
|
||||
program.extractInternalOptionsForward(buildOptions);
|
||||
EXPECT_EQ(0u, program.getInternalOptions().length());
|
||||
}
|
||||
|
||||
TEST_F(ProgramTests, givenProgramWhenAllInternalOptionsArePassedMixedWithUnknownInputThenTheyAreParsedCorrectly) {
|
||||
ExecutionEnvironment executionEnvironment;
|
||||
MockProgram program(executionEnvironment);
|
||||
program.getInternalOptions().erase();
|
||||
EXPECT_EQ(nullptr, program.getDevicePtr());
|
||||
std::string buildOptions = "### -cl-intel-gtpin-rera ### -cl-intel-greater-than-4GB-buffer-required ###";
|
||||
std::string expectedOutput = "-cl-intel-gtpin-rera -cl-intel-greater-than-4GB-buffer-required ";
|
||||
program.extractInternalOptionsForward(buildOptions);
|
||||
EXPECT_EQ(expectedOutput, program.getInternalOptions());
|
||||
}
|
||||
|
||||
TEST_F(ProgramTests, givenProgramWhenInternalOptionsArePassedWithValidValuesThenTheyAreAddedToProgramInternalOptions) {
|
||||
ExecutionEnvironment executionEnvironment;
|
||||
MockProgram program(executionEnvironment);
|
||||
program.getInternalOptions().erase();
|
||||
EXPECT_EQ(nullptr, program.getDevicePtr());
|
||||
|
||||
program.isFlagOptionOverride = false;
|
||||
program.isOptionValueValidOverride = true;
|
||||
std::string buildOptions = "-cl-intel-gtpin-rera someValue";
|
||||
std::string expectedOutput = "-cl-intel-gtpin-rera someValue ";
|
||||
program.extractInternalOptionsForward(buildOptions);
|
||||
EXPECT_EQ(expectedOutput, program.getInternalOptions());
|
||||
}
|
||||
|
||||
TEST_F(ProgramTests, givenProgramWhenInternalOptionsArePassedWithInvalidValuesThenTheyAreNotAddedToProgramInternalOptions) {
|
||||
ExecutionEnvironment executionEnvironment;
|
||||
MockProgram program(executionEnvironment);
|
||||
EXPECT_EQ(nullptr, program.getDevicePtr());
|
||||
|
||||
program.isFlagOptionOverride = false;
|
||||
std::string buildOptions = "-cl-intel-gtpin-rera someValue";
|
||||
std::string expectedOutput = "";
|
||||
program.getInternalOptions().erase();
|
||||
program.extractInternalOptionsForward(buildOptions);
|
||||
EXPECT_EQ(expectedOutput, program.getInternalOptions());
|
||||
|
||||
program.isOptionValueValidOverride = true;
|
||||
buildOptions = "-cl-intel-gtpin-rera ";
|
||||
program.getInternalOptions().erase();
|
||||
program.extractInternalOptionsForward(buildOptions);
|
||||
EXPECT_EQ(expectedOutput, program.getInternalOptions());
|
||||
}
|
||||
|
||||
TEST_F(ProgramTests, givenProgramWhenGetSymbolsIsCalledThenMapWithExportedSymbolsIsReturned) {
|
||||
|
|
Loading…
Reference in New Issue