From fcfef318c122787094fdb7753b6b6d1abdfcc738 Mon Sep 17 00:00:00 2001 From: "Chodor, Jaroslaw" Date: Tue, 31 Jul 2018 11:01:13 +0200 Subject: [PATCH] Fixing hash calculation in MockProgram Change-Id: I869bca0cc8c0d2c87901cde65e7cf62d81a10285 --- runtime/compiler_interface/binary_cache.h | 4 ++-- runtime/program/build.cpp | 5 ++++- unit_tests/mocks/mock_program.cpp | 9 +++++++-- unit_tests/mocks/mock_program.h | 4 +++- unit_tests/program/program_tests.cpp | 8 ++++---- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/runtime/compiler_interface/binary_cache.h b/runtime/compiler_interface/binary_cache.h index dd246d7442..fa22b14b46 100644 --- a/runtime/compiler_interface/binary_cache.h +++ b/runtime/compiler_interface/binary_cache.h @@ -34,8 +34,8 @@ struct HardwareInfo; class Program; class BinaryCache { public: - const std::string getCachedFileName(const HardwareInfo &hwInfo, ArrayRef input, - ArrayRef options, ArrayRef internalOptions); + static const std::string getCachedFileName(const HardwareInfo &hwInfo, ArrayRef input, + ArrayRef options, ArrayRef internalOptions); virtual ~BinaryCache(){}; diff --git a/runtime/program/build.cpp b/runtime/program/build.cpp index 2a49d3d222..05c9b62959 100644 --- a/runtime/program/build.cpp +++ b/runtime/program/build.cpp @@ -108,7 +108,10 @@ cl_int Program::build( } } - internalOptions.append(platform()->peekCompilerExtensions()); + auto compilerExtensionsOptions = platform()->peekCompilerExtensions(); + if (internalOptions.find(compilerExtensionsOptions) == std::string::npos) { + internalOptions.append(compilerExtensionsOptions); + } inputArgs.pInput = (char *)(sourceCode.c_str()); inputArgs.InputSize = (uint32_t)sourceCode.size(); diff --git a/unit_tests/mocks/mock_program.cpp b/unit_tests/mocks/mock_program.cpp index 4b22caf81e..d6a7ea0052 100644 --- a/unit_tests/mocks/mock_program.cpp +++ b/unit_tests/mocks/mock_program.cpp @@ -19,6 +19,7 @@ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ +#include "runtime/context/context.h" #include "runtime/helpers/hash.h" #include "unit_tests/mocks/mock_compilers.h" #include "unit_tests/mocks/mock_graphics_allocation.h" @@ -26,8 +27,12 @@ namespace OCLRT { GlobalMockSipProgram *GlobalMockSipProgram::sipProgram; -uint64_t MockProgram::getHash() { - return Hash::hash(genBinary, genBinarySize); +std::string MockProgram::getCachedFileName() const { + auto hwInfo = this->context->getDevice(0)->getHardwareInfo(); + auto input = ArrayRef(this->sourceCode.c_str(), this->sourceCode.size()); + auto opts = ArrayRef(this->options.c_str(), this->options.size()); + auto internalOpts = ArrayRef(this->internalOptions.c_str(), this->internalOptions.size()); + return BinaryCache::getCachedFileName(hwInfo, input, opts, internalOpts); } cl_int GlobalMockSipProgram::processGenBinary() { return CL_SUCCESS; diff --git a/unit_tests/mocks/mock_program.h b/unit_tests/mocks/mock_program.h index c06b676aee..bc0ad9038a 100644 --- a/unit_tests/mocks/mock_program.h +++ b/unit_tests/mocks/mock_program.h @@ -26,6 +26,8 @@ #include "runtime/helpers/string.h" #include "runtime/program/program.h" +#include + namespace OCLRT { class GraphicsAllocation; @@ -109,7 +111,7 @@ class MockProgram : public Program { this->isSpirV = isSpirV; } - uint64_t getHash(); + std::string getCachedFileName() const; void setAllowNonUniform(bool allow) { allowNonUniform = allow; } diff --git a/unit_tests/program/program_tests.cpp b/unit_tests/program/program_tests.cpp index 41bc830656..6bb86b58d4 100644 --- a/unit_tests/program/program_tests.cpp +++ b/unit_tests/program/program_tests.cpp @@ -860,14 +860,14 @@ TEST_P(ProgramFromSourceTest, CreateWithSource_BuildFromCache) { retVal = pProgram->build(0, nullptr, nullptr, nullptr, nullptr, true); EXPECT_EQ(CL_SUCCESS, retVal); - auto hash1 = p->getHash(); + auto hash1 = p->getCachedFileName(); auto kernel1 = pProgram->getKernelInfo("CopyBuffer"); Callback::watch(kernel1); EXPECT_NE(nullptr, kernel1); retVal = pProgram->build(0, nullptr, "-cl-fast-relaxed-math", nullptr, nullptr, true); EXPECT_EQ(CL_SUCCESS, retVal); - auto hash2 = p->getHash(); + auto hash2 = p->getCachedFileName(); auto kernel2 = pProgram->getKernelInfo("CopyBuffer"); EXPECT_NE(nullptr, kernel2); EXPECT_NE(hash1, hash2); @@ -876,7 +876,7 @@ TEST_P(ProgramFromSourceTest, CreateWithSource_BuildFromCache) { retVal = pProgram->build(0, nullptr, "-cl-finite-math-only", nullptr, nullptr, true); EXPECT_EQ(CL_SUCCESS, retVal); - auto hash3 = p->getHash(); + auto hash3 = p->getCachedFileName(); auto kernel3 = pProgram->getKernelInfo("CopyBuffer"); EXPECT_NE(nullptr, kernel3); EXPECT_NE(hash1, hash3); @@ -886,7 +886,7 @@ TEST_P(ProgramFromSourceTest, CreateWithSource_BuildFromCache) { retVal = pProgram->build(0, nullptr, nullptr, nullptr, nullptr, true); EXPECT_EQ(CL_SUCCESS, retVal); - auto hash4 = p->getHash(); + auto hash4 = p->getCachedFileName(); auto kernel4 = pProgram->getKernelInfo("CopyBuffer"); EXPECT_NE(nullptr, kernel4); EXPECT_EQ(hash1, hash4);