Add option to change GRF mode

Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
This commit is contained in:
Dunajski, Bartosz
2022-09-06 12:12:37 +00:00
committed by Compute-Runtime-Automation
parent 334802c9ba
commit 16d9000429
43 changed files with 182 additions and 118 deletions

View File

@@ -10,6 +10,7 @@
#include "shared/source/built_ins/built_ins.h"
#include "shared/source/built_ins/sip.h"
#include "shared/source/compiler_interface/compiler_interface.h"
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/helpers/basic_math.h"
#include "shared/source/helpers/debug_helpers.h"
@@ -24,8 +25,6 @@
#include "opencl/source/mem_obj/image.h"
#include "opencl/source/program/program.h"
#include "compiler_options.h"
#include <cstdint>
#include <sstream>

View File

@@ -6,13 +6,11 @@
set(RUNTIME_SRCS_PROGRAM
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}additional_options.cpp
${CMAKE_CURRENT_SOURCE_DIR}/build.cpp
${CMAKE_CURRENT_SOURCE_DIR}/compile.cpp
${CMAKE_CURRENT_SOURCE_DIR}/create.cpp
${CMAKE_CURRENT_SOURCE_DIR}/create.inl
${CMAKE_CURRENT_SOURCE_DIR}/get_info.cpp
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}internal_options.cpp
${CMAKE_CURRENT_SOURCE_DIR}/link.cpp
${CMAKE_CURRENT_SOURCE_DIR}/printf_handler.cpp
${CMAKE_CURRENT_SOURCE_DIR}/printf_handler.h

View File

@@ -1,13 +0,0 @@
/*
* Copyright (C) 2019-2021 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "opencl/source/program/program.h"
namespace NEO {
void Program::applyAdditionalOptions(std::string &internalOptions) {
}
}; // namespace NEO

View File

@@ -6,6 +6,7 @@
*/
#include "shared/source/compiler_interface/compiler_interface.h"
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/compiler_interface/compiler_warnings/compiler_warnings.h"
#include "shared/source/device/device.h"
#include "shared/source/device_binary_format/device_binary_formats.h"
@@ -23,8 +24,6 @@
#include "opencl/source/platform/platform.h"
#include "opencl/source/program/program.h"
#include "compiler_options.h"
#include <cstring>
#include <iterator>
#include <sstream>

View File

@@ -6,6 +6,7 @@
*/
#include "shared/source/compiler_interface/compiler_interface.h"
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/compiler_interface/compiler_warnings/compiler_warnings.h"
#include "shared/source/device/device.h"
#include "shared/source/device_binary_format/elf/elf.h"
@@ -19,7 +20,6 @@
#include "opencl/source/helpers/cl_validators.h"
#include "opencl/source/platform/platform.h"
#include "compiler_options.h"
#include "program.h"
#include <cstring>

View File

@@ -6,6 +6,7 @@
*/
#include "shared/source/ail/ail_configuration.h"
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/debug_settings/debug_settings_manager.h"
#include "shared/source/device/device.h"
#include "shared/source/helpers/constants.h"
@@ -16,8 +17,6 @@
#include "opencl/source/platform/platform.h"
#include "opencl/source/program/program.h"
#include "compiler_options.h"
namespace NEO {
template <typename T>

View File

@@ -1,27 +0,0 @@
/*
* Copyright (C) 2018-2021 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "opencl/source/program/program.h"
#include "compiler_options.h"
#include <vector>
namespace NEO {
const std::vector<ConstStringRef> Program::internalOptionsToExtract = {CompilerOptions::gtpinRera,
CompilerOptions::greaterThan4gbBuffersRequired};
bool Program::isFlagOption(ConstStringRef option) {
return true;
}
bool Program::isOptionValueValid(ConstStringRef option, ConstStringRef value) {
return false;
}
}; // namespace NEO

View File

@@ -6,6 +6,7 @@
*/
#include "shared/source/compiler_interface/compiler_interface.h"
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/device/device.h"
#include "shared/source/device_binary_format/device_binary_formats.h"
#include "shared/source/device_binary_format/elf/elf.h"
@@ -21,8 +22,6 @@
#include "opencl/source/platform/platform.h"
#include "opencl/source/program/program.h"
#include "compiler_options.h"
#include <cstring>
namespace NEO {

View File

@@ -9,6 +9,7 @@
#include "shared/source/command_stream/command_stream_receiver.h"
#include "shared/source/compiler_interface/compiler_interface.h"
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/compiler_interface/intermediate_representations.h"
#include "shared/source/compiler_interface/oclc_extensions.h"
#include "shared/source/device_binary_format/device_binary_formats.h"
@@ -32,8 +33,6 @@
#include "opencl/source/context/context.h"
#include "opencl/source/platform/platform.h"
#include "compiler_options.h"
#include <sstream>
namespace NEO {
@@ -500,6 +499,48 @@ void Program::prependFilePathToOptions(const std::string &filename) {
}
}
void Program::applyAdditionalOptions(std::string &internalOptions) {
size_t pos;
if (DebugManager.flags.ForceLargeGrfCompilationMode.get()) {
pos = internalOptions.find(CompilerOptions::largeGrf.data());
if (pos == std::string::npos) {
CompilerOptions::concatenateAppend(internalOptions, CompilerOptions::largeGrf);
}
} else if (DebugManager.flags.ForceDefaultGrfCompilationMode.get()) {
pos = internalOptions.find(CompilerOptions::defaultGrf.data());
if (pos == std::string::npos) {
CompilerOptions::concatenateAppend(internalOptions, CompilerOptions::defaultGrf.data());
}
pos = internalOptions.find(CompilerOptions::largeGrf.data());
if (pos != std::string::npos) {
internalOptions.erase(pos, CompilerOptions::largeGrf.size());
}
}
}
const std::vector<ConstStringRef> Program::internalOptionsToExtract = {CompilerOptions::gtpinRera,
CompilerOptions::defaultGrf,
CompilerOptions::largeGrf,
CompilerOptions::greaterThan4gbBuffersRequired,
CompilerOptions::numThreadsPerEu};
bool Program::isFlagOption(ConstStringRef option) {
if (option == CompilerOptions::numThreadsPerEu) {
return false;
}
return true;
}
bool Program::isOptionValueValid(ConstStringRef option, ConstStringRef value) {
if (option == CompilerOptions::numThreadsPerEu) {
const auto &threadCounts = clDevices[0]->getSharedDeviceInfo().threadsPerEUConfigs;
if (std::find(threadCounts.begin(), threadCounts.end(), atoi(value.data())) != threadCounts.end()) {
return true;
}
}
return false;
}
const ClDeviceVector &Program::getDevicesInProgram() const {
if (clDevicesInProgram.empty()) {
return clDevices;

View File

@@ -1,11 +1,12 @@
/*
* Copyright (C) 2018-2021 Intel Corporation
* Copyright (C) 2018-2022 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/compiler_interface/compiler_interface.h"
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/device/device.h"
#include "shared/source/helpers/file_io.h"
#include "shared/test/common/helpers/kernel_binary_helper.h"
@@ -14,7 +15,6 @@
#include "opencl/source/context/context.h"
#include "cl_api_tests.h"
#include "compiler_options.h"
using namespace NEO;

View File

@@ -6,6 +6,7 @@
*/
#include "shared/source/built_ins/built_ins.h"
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/debug_settings/debug_settings_manager.h"
#include "shared/source/gmm_helper/gmm.h"
#include "shared/source/gmm_helper/gmm_helper.h"
@@ -43,7 +44,6 @@
#include "opencl/test/unit_test/mocks/mock_kernel.h"
#include "opencl/test/unit_test/test_macros/test_checks_ocl.h"
#include "compiler_options.h"
#include "gtest/gtest.h"
#include "os_inc.h"
#include "test_traits_common.h"

View File

@@ -5,6 +5,7 @@
*
*/
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/os_interface/os_context.h"
#include "shared/source/source_level_debugger/source_level_debugger.h"
#include "shared/test/common/helpers/kernel_binary_helper.h"
@@ -21,8 +22,6 @@
#include "opencl/test/unit_test/mocks/mock_kernel.h"
#include "opencl/test/unit_test/program/program_from_binary.h"
#include "compiler_options.h"
using namespace NEO;
using namespace ::testing;

View File

@@ -6,6 +6,7 @@
*/
#pragma once
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/device/device.h"
#include "shared/source/helpers/array_count.h"
#include "shared/source/helpers/file_io.h"
@@ -20,7 +21,6 @@
#include "opencl/test/unit_test/mocks/mock_program.h"
#include "CL/cl.h"
#include "compiler_options.h"
#include <type_traits>

View File

@@ -5,7 +5,7 @@
*
*/
#include "shared/source/compiler_interface/compiler_options/compiler_options.h"
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/gen12lp/hw_cmds_rkl.h"
#include "shared/test/common/test_macros/header/per_product_test_definitions.h"
#include "shared/test/common/test_macros/test.h"

View File

@@ -5,7 +5,7 @@
*
*/
#include "shared/source/compiler_interface/compiler_options/compiler_options.h"
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/gen8/hw_cmds_bdw.h"
#include "shared/test/common/helpers/gtest_helpers.h"
#include "shared/test/common/helpers/test_files.h"

View File

@@ -5,7 +5,7 @@
*
*/
#include "shared/source/compiler_interface/compiler_options/compiler_options.h"
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/debug_settings/debug_settings_manager.h"
#include "shared/source/gen9/hw_cmds_skl.h"
#include "shared/test/common/helpers/debug_manager_state_restore.h"

View File

@@ -9,7 +9,7 @@
#include "shared/offline_compiler/source/ocloc_arg_helper.h"
#include "shared/offline_compiler/source/ocloc_error_code.h"
#include "shared/source/compiler_interface/compiler_options/compiler_options_base.h"
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/device_binary_format/ar/ar.h"
#include "shared/source/device_binary_format/ar/ar_decoder.h"
#include "shared/source/device_binary_format/elf/elf_decoder.h"

View File

@@ -7,6 +7,7 @@
#include "offline_compiler_tests.h"
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/compiler_interface/intermediate_representations.h"
#include "shared/source/compiler_interface/oclc_extensions.h"
#include "shared/source/debug_settings/debug_settings_manager.h"
@@ -23,7 +24,6 @@
#include "shared/test/common/mocks/mock_modules_zebin.h"
#include "shared/test/common/test_macros/hw_test.h"
#include "compiler_options.h"
#include "environment.h"
#include "gtest/gtest.h"
#include "mock/mock_argument_helper.h"

View File

@@ -5,6 +5,7 @@
*
*/
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/compiler_interface/intermediate_representations.h"
#include "shared/source/device/device.h"
#include "shared/source/device_binary_format/elf/elf.h"
@@ -22,7 +23,6 @@
#include "opencl/test/unit_test/mocks/mock_cl_device.h"
#include "opencl/test/unit_test/mocks/mock_program.h"
#include "compiler_options.h"
#include "gtest/gtest.h"
#include <cstring>

View File

@@ -9,6 +9,7 @@
#include "shared/source/ail/ail_configuration.h"
#include "shared/source/command_stream/command_stream_receiver_hw.h"
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/compiler_interface/compiler_warnings/compiler_warnings.h"
#include "shared/source/compiler_interface/intermediate_representations.h"
#include "shared/source/device_binary_format/elf/elf_decoder.h"
@@ -52,7 +53,6 @@
#include "opencl/test/unit_test/program/program_with_source.h"
#include "opencl/test/unit_test/test_macros/test_checks_ocl.h"
#include "compiler_options.h"
#include "gtest/gtest.h"
#include <map>
@@ -3400,3 +3400,95 @@ TEST_F(ProgramTests, givenValidZebinWithKernelCallingExternalFunctionThenUpdateK
auto &kernelInfo = program->buildInfos[rootDeviceIndex].kernelInfoArray[0];
EXPECT_EQ(zebin.barrierCount, kernelInfo->kernelDescriptor.kernelAttributes.barrierCount);
}
TEST(ProgramInternalOptionsTests, givenProgramWhenPossibleInternalOptionsCheckedThenLargeGRFOptionIsPresent) {
MockClDevice device{new MockDevice()};
MockProgram program(toClDeviceVector(device));
auto &optsToExtract = program.internalOptionsToExtract;
EXPECT_EQ(1U, std::count(optsToExtract.begin(), optsToExtract.end(), CompilerOptions::largeGrf));
}
TEST(ProgramInternalOptionsTests, givenProgramWhenPossibleInternalOptionsCheckedThenDefaultGRFOptionIsPresent) {
MockClDevice device{new MockDevice()};
MockProgram program(toClDeviceVector(device));
auto &optsToExtract = program.internalOptionsToExtract;
EXPECT_EQ(1U, std::count(optsToExtract.begin(), optsToExtract.end(), CompilerOptions::defaultGrf));
}
TEST(ProgramInternalOptionsTests, givenProgramWhenPossibleInternalOptionsCheckedThenNumThreadsPerUsIsPresent) {
MockClDevice clDevice{new MockDevice()};
clDevice.device.deviceInfo.threadsPerEUConfigs = {2U, 3U};
MockProgram program(toClDeviceVector(clDevice));
auto &optionsToExtract = program.internalOptionsToExtract;
EXPECT_TRUE(std::find(optionsToExtract.begin(), optionsToExtract.end(), CompilerOptions::numThreadsPerEu) != optionsToExtract.end());
const char *allowedThreadPerEuCounts[] = {"2", "3"};
for (auto allowedThreadPerEuCount : allowedThreadPerEuCounts) {
std::string buildOptions = CompilerOptions::concatenate(CompilerOptions::numThreadsPerEu, allowedThreadPerEuCount);
std::string expectedOutput = buildOptions;
std::string internalOptions;
program.extractInternalOptions(buildOptions, internalOptions);
EXPECT_EQ(expectedOutput, internalOptions);
}
const char *notAllowedThreadPerEuCounts[] = {"1", "4"};
for (auto notAllowedThreadPerEuCount : notAllowedThreadPerEuCounts) {
std::string buildOptions = CompilerOptions::concatenate(CompilerOptions::numThreadsPerEu, notAllowedThreadPerEuCount);
std::string internalOptions;
program.extractInternalOptions(buildOptions, internalOptions);
EXPECT_EQ("", internalOptions);
}
}
TEST(ProgramInternalOptionsTests, givenProgramWhenForceLargeGrfCompilationModeIsSetThenBuildOptionIsAdded) {
DebugManagerStateRestore dbgRestorer;
DebugManager.flags.ForceLargeGrfCompilationMode.set(true);
MockClDevice device{new MockDevice()};
MockProgram program(toClDeviceVector(device));
auto internalOptions = program.getInternalOptions();
EXPECT_FALSE(CompilerOptions::contains(internalOptions, CompilerOptions::largeGrf)) << internalOptions;
program.applyAdditionalOptions(internalOptions);
EXPECT_TRUE(CompilerOptions::contains(internalOptions, CompilerOptions::largeGrf)) << internalOptions;
size_t internalOptionsSize = internalOptions.size();
program.applyAdditionalOptions(internalOptions);
EXPECT_EQ(internalOptionsSize, internalOptions.size());
}
TEST(ProgramInternalOptionsTests, givenProgramWhenForceDefaultGrfCompilationModeIsSetThenBuildOptionIsAdded) {
DebugManagerStateRestore stateRestorer;
DebugManager.flags.ForceDefaultGrfCompilationMode.set(true);
MockClDevice device{new MockDevice()};
MockProgram program(toClDeviceVector(device));
auto internalOptions = program.getInternalOptions();
EXPECT_FALSE(CompilerOptions::contains(internalOptions, CompilerOptions::defaultGrf)) << internalOptions;
program.applyAdditionalOptions(internalOptions);
EXPECT_TRUE(CompilerOptions::contains(internalOptions, CompilerOptions::defaultGrf)) << internalOptions;
size_t internalOptionsSize = internalOptions.size();
program.applyAdditionalOptions(internalOptions);
EXPECT_EQ(internalOptionsSize, internalOptions.size());
}
TEST(ProgramInternalOptionsTests, givenProgramWhenForceDefaultGrfCompilationModeIsSetThenLargeGrfOptionIsRemoved) {
DebugManagerStateRestore stateRestorer;
DebugManager.flags.ForceDefaultGrfCompilationMode.set(true);
MockClDevice device{new MockDevice()};
MockProgram program(toClDeviceVector(device));
auto internalOptions = program.getInternalOptions();
CompilerOptions::concatenateAppend(internalOptions, CompilerOptions::largeGrf);
EXPECT_FALSE(CompilerOptions::contains(internalOptions, CompilerOptions::defaultGrf)) << internalOptions;
EXPECT_TRUE(CompilerOptions::contains(internalOptions, CompilerOptions::largeGrf)) << internalOptions;
program.applyAdditionalOptions(internalOptions);
EXPECT_TRUE(CompilerOptions::contains(internalOptions, CompilerOptions::defaultGrf)) << internalOptions;
EXPECT_FALSE(CompilerOptions::contains(internalOptions, CompilerOptions::largeGrf)) << internalOptions;
size_t internalOptionsSize = internalOptions.size();
program.applyAdditionalOptions(internalOptions);
EXPECT_EQ(internalOptionsSize, internalOptions.size());
}

View File

@@ -5,6 +5,7 @@
*
*/
#include "shared/source/compiler_interface/compiler_options.h"
#include "shared/source/device_binary_format/patchtokens_decoder.h"
#include "shared/test/common/device_binary_format/elf/elf_tests_data.h"
#include "shared/test/common/helpers/debug_manager_state_restore.h"
@@ -20,7 +21,6 @@
#include "opencl/test/unit_test/program/program_from_binary.h"
#include "opencl/test/unit_test/program/program_tests.h"
#include "compiler_options.h"
#include "gtest/gtest.h"
#include "program_debug_data.h"