diff --git a/CMakeLists.txt b/CMakeLists.txt index bb79e1dac6..ccec575ceb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -754,7 +754,6 @@ include_directories(${NEO_SHARED_DIRECTORY}/aub_mem_dump/definitions${BRANCH_DIR include_directories(${NEO_SHARED_DIRECTORY}/built_ins/builtinops${BRANCH_DIR_SUFFIX}) include_directories(${NEO_SHARED_DIRECTORY}/command_container/definitions${BRANCH_DIR_SUFFIX}) include_directories(${NEO_SHARED_DIRECTORY}/command_stream/definitions${BRANCH_DIR_SUFFIX}) -include_directories(${NEO_SHARED_DIRECTORY}/compiler_interface/compiler_options${BRANCH_DIR_SUFFIX}) include_directories(${NEO_SHARED_DIRECTORY}/debug_settings/definitions${BRANCH_DIR_SUFFIX}) include_directories(${NEO_SHARED_DIRECTORY}/dll/devices${BRANCH_DIR_SUFFIX}) include_directories(${NEO_SHARED_DIRECTORY}/gen_common${BRANCH_DIR_SUFFIX}) diff --git a/level_zero/CMakeLists.txt b/level_zero/CMakeLists.txt index 5ac7449533..bc0c5ccac1 100644 --- a/level_zero/CMakeLists.txt +++ b/level_zero/CMakeLists.txt @@ -194,7 +194,6 @@ if(BUILD_WITH_L0) include_directories(${LevelZero_INCLUDE_DIRS}) endif() include_directories(${NEO_SOURCE_DIR}/level_zero/api/experimental${BRANCH_DIR_SUFFIX}) - include_directories(${NEO_SOURCE_DIR}/shared/source/compiler_interface/compiler_options${BRANCH_DIR_SUFFIX}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/core/source/hw_helpers${BRANCH_DIR_SUFFIX}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/core/source/cmdlist/cmdlist_extended${BRANCH_DIR_SUFFIX}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/core/source/cmdqueue/cmdqueue_extended${BRANCH_DIR_SUFFIX}) diff --git a/level_zero/core/source/CMakeLists.txt b/level_zero/core/source/CMakeLists.txt index a2ec4abedd..a838178ae1 100644 --- a/level_zero/core/source/CMakeLists.txt +++ b/level_zero/core/source/CMakeLists.txt @@ -83,7 +83,6 @@ set(L0_RUNTIME_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/module/module.h ${CMAKE_CURRENT_SOURCE_DIR}/module/module_build_log.cpp ${CMAKE_CURRENT_SOURCE_DIR}/module/module_build_log.h - ${CMAKE_CURRENT_SOURCE_DIR}/module${BRANCH_DIR_SUFFIX}module_extra_options.cpp ${CMAKE_CURRENT_SOURCE_DIR}/module/module_imp.cpp ${CMAKE_CURRENT_SOURCE_DIR}/module/module_imp.h ${CMAKE_CURRENT_SOURCE_DIR}/printf_handler/printf_handler.cpp diff --git a/level_zero/core/source/module/module_extra_options.cpp b/level_zero/core/source/module/module_extra_options.cpp deleted file mode 100644 index b3e9d1c10b..0000000000 --- a/level_zero/core/source/module/module_extra_options.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (C) 2020-2021 Intel Corporation - * - * SPDX-License-Identifier: MIT - * - */ - -#include "level_zero/core/source/module/module_imp.h" - -namespace L0 { - -void ModuleImp::createBuildExtraOptions(std::string &apiOptions, std::string &nternalBuildOptions) { -} - -} // namespace L0 \ No newline at end of file diff --git a/level_zero/core/source/module/module_imp.cpp b/level_zero/core/source/module/module_imp.cpp index fbd08b1f39..0f2d21e6ca 100644 --- a/level_zero/core/source/module/module_imp.cpp +++ b/level_zero/core/source/module/module_imp.cpp @@ -7,6 +7,7 @@ #include "level_zero/core/source/module/module_imp.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/compiler_interface/linker.h" @@ -35,7 +36,6 @@ #include "level_zero/core/source/kernel/kernel.h" #include "level_zero/core/source/module/module_build_log.h" -#include "compiler_options.h" #include "program_debug_data.h" #include @@ -51,6 +51,7 @@ NEO::ConstStringRef greaterThan4GbRequired = "-ze-opt-greater-than-4GB-buffer-re NEO::ConstStringRef hasBufferOffsetArg = "-ze-intel-has-buffer-offset-arg"; NEO::ConstStringRef debugKernelEnable = "-ze-kernel-debug-enable"; NEO::ConstStringRef profileFlags = "-zet-profile-flags"; +NEO::ConstStringRef optLargeRegisterFile = "-ze-opt-large-register-file"; } // namespace BuildOptions ModuleTranslationUnit::ModuleTranslationUnit(L0::Device *device) @@ -680,10 +681,10 @@ void ModuleImp::createBuildOptions(const char *pBuildFlags, std::string &apiOpti moveBuildOption(apiOptions, apiOptions, NEO::CompilerOptions::optDisable, BuildOptions::optDisable); moveBuildOption(internalBuildOptions, apiOptions, NEO::CompilerOptions::greaterThan4gbBuffersRequired, BuildOptions::greaterThan4GbRequired); moveBuildOption(internalBuildOptions, apiOptions, NEO::CompilerOptions::allowZebin, NEO::CompilerOptions::allowZebin); + moveBuildOption(internalBuildOptions, apiOptions, NEO::CompilerOptions::largeGrf, BuildOptions::optLargeRegisterFile); moveOptLevelOption(apiOptions, apiOptions); moveProfileFlagsOption(apiOptions, apiOptions); - createBuildExtraOptions(apiOptions, internalBuildOptions); } if (NEO::ApiSpecificConfig::getBindlessConfiguration()) { NEO::CompilerOptions::concatenateAppend(internalBuildOptions, NEO::CompilerOptions::bindlessMode.str()); diff --git a/level_zero/core/source/module/module_imp.h b/level_zero/core/source/module/module_imp.h index 1d9229a23e..42718a6d09 100644 --- a/level_zero/core/source/module/module_imp.h +++ b/level_zero/core/source/module/module_imp.h @@ -33,6 +33,8 @@ extern NEO::ConstStringRef greaterThan4GbRequired; extern NEO::ConstStringRef hasBufferOffsetArg; extern NEO::ConstStringRef debugKernelEnable; extern NEO::ConstStringRef profileFlags; +extern NEO::ConstStringRef optLargeRegisterFile; + } // namespace BuildOptions struct ModuleTranslationUnit { @@ -112,7 +114,6 @@ struct ModuleImp : public Module { uint32_t getMaxGroupSize() const override { return maxGroupSize; } void createBuildOptions(const char *pBuildFlags, std::string &buildOptions, std::string &internalBuildOptions); - void createBuildExtraOptions(std::string &buildOptions, std::string &internalBuildOptions); bool moveOptLevelOption(std::string &dstOptionsSet, std::string &srcOptionSet); bool moveProfileFlagsOption(std::string &dstOptionsSet, std::string &srcOptionSet); void updateBuildLog(NEO::Device *neoDevice); diff --git a/level_zero/core/test/unit_tests/sources/module/test_module.cpp b/level_zero/core/test/unit_tests/sources/module/test_module.cpp index 0e8e9dc606..6e5d68c347 100644 --- a/level_zero/core/test/unit_tests/sources/module/test_module.cpp +++ b/level_zero/core/test/unit_tests/sources/module/test_module.cpp @@ -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/compiler_interface/compiler_warnings/compiler_warnings.h" #include "shared/source/device_binary_format/ar/ar_decoder.h" #include "shared/source/device_binary_format/ar/ar_encoder.h" diff --git a/opencl/source/built_ins/builtins_dispatch_builder.cpp b/opencl/source/built_ins/builtins_dispatch_builder.cpp index ddda0edebb..68ab12ee13 100644 --- a/opencl/source/built_ins/builtins_dispatch_builder.cpp +++ b/opencl/source/built_ins/builtins_dispatch_builder.cpp @@ -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 #include diff --git a/opencl/source/program/CMakeLists.txt b/opencl/source/program/CMakeLists.txt index 1484badecd..45f45948ad 100644 --- a/opencl/source/program/CMakeLists.txt +++ b/opencl/source/program/CMakeLists.txt @@ -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 diff --git a/opencl/source/program/additional_options.cpp b/opencl/source/program/additional_options.cpp deleted file mode 100644 index 28d32949a9..0000000000 --- a/opencl/source/program/additional_options.cpp +++ /dev/null @@ -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 diff --git a/opencl/source/program/build.cpp b/opencl/source/program/build.cpp index f197245474..c764a7b489 100644 --- a/opencl/source/program/build.cpp +++ b/opencl/source/program/build.cpp @@ -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 #include #include diff --git a/opencl/source/program/compile.cpp b/opencl/source/program/compile.cpp index 31b054ed70..508d118a13 100644 --- a/opencl/source/program/compile.cpp +++ b/opencl/source/program/compile.cpp @@ -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 diff --git a/opencl/source/program/create.inl b/opencl/source/program/create.inl index 5af49cc698..51829c686f 100644 --- a/opencl/source/program/create.inl +++ b/opencl/source/program/create.inl @@ -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 diff --git a/opencl/source/program/internal_options.cpp b/opencl/source/program/internal_options.cpp deleted file mode 100644 index 703ec38cd8..0000000000 --- a/opencl/source/program/internal_options.cpp +++ /dev/null @@ -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 - -namespace NEO { - -const std::vector Program::internalOptionsToExtract = {CompilerOptions::gtpinRera, - CompilerOptions::greaterThan4gbBuffersRequired}; - -bool Program::isFlagOption(ConstStringRef option) { - return true; -} - -bool Program::isOptionValueValid(ConstStringRef option, ConstStringRef value) { - return false; -} - -}; // namespace NEO diff --git a/opencl/source/program/link.cpp b/opencl/source/program/link.cpp index 4cb8a3def5..5bfdaf6556 100644 --- a/opencl/source/program/link.cpp +++ b/opencl/source/program/link.cpp @@ -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 namespace NEO { diff --git a/opencl/source/program/program.cpp b/opencl/source/program/program.cpp index 6f087c80ec..9c7590ad8d 100644 --- a/opencl/source/program/program.cpp +++ b/opencl/source/program/program.cpp @@ -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 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 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; diff --git a/opencl/test/unit_test/api/cl_get_kernel_arg_info_tests.inl b/opencl/test/unit_test/api/cl_get_kernel_arg_info_tests.inl index 49dcb1b73d..7042229e01 100644 --- a/opencl/test/unit_test/api/cl_get_kernel_arg_info_tests.inl +++ b/opencl/test/unit_test/api/cl_get_kernel_arg_info_tests.inl @@ -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; diff --git a/opencl/test/unit_test/built_ins/built_in_tests.cpp b/opencl/test/unit_test/built_ins/built_in_tests.cpp index 51ca5f45ef..45317aa293 100644 --- a/opencl/test/unit_test/built_ins/built_in_tests.cpp +++ b/opencl/test/unit_test/built_ins/built_in_tests.cpp @@ -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" diff --git a/opencl/test/unit_test/command_queue/enqueue_debug_kernel_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_debug_kernel_tests.cpp index 1f7e51faeb..7518136e43 100644 --- a/opencl/test/unit_test/command_queue/enqueue_debug_kernel_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_debug_kernel_tests.cpp @@ -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; diff --git a/opencl/test/unit_test/fixtures/simple_arg_kernel_fixture.h b/opencl/test/unit_test/fixtures/simple_arg_kernel_fixture.h index 7d4f9ab34d..2e4c232176 100644 --- a/opencl/test/unit_test/fixtures/simple_arg_kernel_fixture.h +++ b/opencl/test/unit_test/fixtures/simple_arg_kernel_fixture.h @@ -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 diff --git a/opencl/test/unit_test/offline_compiler/gen12lp/rkl/offline_compiler_tests_rkl.cpp b/opencl/test/unit_test/offline_compiler/gen12lp/rkl/offline_compiler_tests_rkl.cpp index ba9f5bfcd0..03c05c20e6 100644 --- a/opencl/test/unit_test/offline_compiler/gen12lp/rkl/offline_compiler_tests_rkl.cpp +++ b/opencl/test/unit_test/offline_compiler/gen12lp/rkl/offline_compiler_tests_rkl.cpp @@ -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" diff --git a/opencl/test/unit_test/offline_compiler/gen8/bdw/offline_compiler_tests_bdw.cpp b/opencl/test/unit_test/offline_compiler/gen8/bdw/offline_compiler_tests_bdw.cpp index ac14ef06df..9a90c9f41e 100644 --- a/opencl/test/unit_test/offline_compiler/gen8/bdw/offline_compiler_tests_bdw.cpp +++ b/opencl/test/unit_test/offline_compiler/gen8/bdw/offline_compiler_tests_bdw.cpp @@ -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" diff --git a/opencl/test/unit_test/offline_compiler/gen9/skl/offline_compiler_tests_skl.cpp b/opencl/test/unit_test/offline_compiler/gen9/skl/offline_compiler_tests_skl.cpp index d5e6c4ca82..7b3d3843f3 100644 --- a/opencl/test/unit_test/offline_compiler/gen9/skl/offline_compiler_tests_skl.cpp +++ b/opencl/test/unit_test/offline_compiler/gen9/skl/offline_compiler_tests_skl.cpp @@ -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" diff --git a/opencl/test/unit_test/offline_compiler/ocloc_fatbinary_tests.cpp b/opencl/test/unit_test/offline_compiler/ocloc_fatbinary_tests.cpp index a09994a635..67a020a722 100644 --- a/opencl/test/unit_test/offline_compiler/ocloc_fatbinary_tests.cpp +++ b/opencl/test/unit_test/offline_compiler/ocloc_fatbinary_tests.cpp @@ -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" diff --git a/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp b/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp index c2e9e33891..68d46339f4 100644 --- a/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp +++ b/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp @@ -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" diff --git a/opencl/test/unit_test/program/process_elf_binary_tests.cpp b/opencl/test/unit_test/program/process_elf_binary_tests.cpp index f9b203f2b5..be568cb8ba 100644 --- a/opencl/test/unit_test/program/process_elf_binary_tests.cpp +++ b/opencl/test/unit_test/program/process_elf_binary_tests.cpp @@ -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 diff --git a/opencl/test/unit_test/program/program_tests.cpp b/opencl/test/unit_test/program/program_tests.cpp index ec1b9c0676..8db042597f 100644 --- a/opencl/test/unit_test/program/program_tests.cpp +++ b/opencl/test/unit_test/program/program_tests.cpp @@ -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 @@ -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()); +} diff --git a/opencl/test/unit_test/program/program_with_kernel_debug_tests.cpp b/opencl/test/unit_test/program/program_with_kernel_debug_tests.cpp index f0268bb223..dabf955b6f 100644 --- a/opencl/test/unit_test/program/program_with_kernel_debug_tests.cpp +++ b/opencl/test/unit_test/program/program_with_kernel_debug_tests.cpp @@ -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" diff --git a/shared/offline_compiler/source/CMakeLists.txt b/shared/offline_compiler/source/CMakeLists.txt index b6a75ef2f3..6f5612cec8 100644 --- a/shared/offline_compiler/source/CMakeLists.txt +++ b/shared/offline_compiler/source/CMakeLists.txt @@ -10,7 +10,8 @@ set(OCLOC_NAME "ocloc") set(OCLOC_FOLDER_NAME "offline_compiler") set(CLOC_LIB_SRCS_LIB - ${NEO_SHARED_DIRECTORY}/compiler_interface/compiler_options/compiler_options_base.cpp + ${NEO_SHARED_DIRECTORY}/compiler_interface/compiler_options.cpp + ${NEO_SHARED_DIRECTORY}/compiler_interface/compiler_options.h ${NEO_SHARED_DIRECTORY}/compiler_interface/create_main.cpp ${NEO_SHARED_DIRECTORY}/compiler_interface/oclc_extensions.cpp ${NEO_SHARED_DIRECTORY}/compiler_interface/oclc_extensions.h diff --git a/shared/offline_compiler/source/ocloc_fatbinary.h b/shared/offline_compiler/source/ocloc_fatbinary.h index 6b83cd316f..127ed62975 100644 --- a/shared/offline_compiler/source/ocloc_fatbinary.h +++ b/shared/offline_compiler/source/ocloc_fatbinary.h @@ -8,10 +8,10 @@ #pragma once #include "shared/offline_compiler/source/offline_compiler.h" +#include "shared/source/compiler_interface/compiler_options.h" #include "shared/source/device_binary_format/ar/ar_encoder.h" #include "shared/source/utilities/const_stringref.h" -#include "compiler_options.h" #include "igfxfmid.h" #include diff --git a/shared/offline_compiler/source/offline_compiler.cpp b/shared/offline_compiler/source/offline_compiler.cpp index 5158a9c74a..a5d298a25b 100644 --- a/shared/offline_compiler/source/offline_compiler.cpp +++ b/shared/offline_compiler/source/offline_compiler.cpp @@ -10,6 +10,7 @@ #include "shared/offline_compiler/source/ocloc_error_code.h" #include "shared/offline_compiler/source/queries.h" #include "shared/offline_compiler/source/utilities/get_git_version_info.h" +#include "shared/source/compiler_interface/compiler_options.h" #include "shared/source/compiler_interface/intermediate_representations.h" #include "shared/source/debug_settings/debug_settings_manager.h" #include "shared/source/device_binary_format/device_binary_formats.h" @@ -30,7 +31,6 @@ #include "cif/common/cif_main.h" #include "cif/helpers/error.h" #include "cif/import/library_api.h" -#include "compiler_options.h" #include "igfxfmid.h" #include "ocl_igc_interface/fcl_ocl_device_ctx.h" #include "ocl_igc_interface/igc_ocl_device_ctx.h" diff --git a/shared/source/built_ins/built_ins.cpp b/shared/source/built_ins/built_ins.cpp index deb09bc430..fc5e4d693c 100644 --- a/shared/source/built_ins/built_ins.cpp +++ b/shared/source/built_ins/built_ins.cpp @@ -9,13 +9,12 @@ #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/device_binary_format/device_binary_formats.h" #include "shared/source/helpers/basic_math.h" #include "shared/source/helpers/debug_helpers.h" #include "shared/source/memory_manager/memory_manager.h" -#include "compiler_options.h" - #include #include diff --git a/shared/source/built_ins/built_ins.h b/shared/source/built_ins/built_ins.h index b362bf4df1..5e326c48b3 100644 --- a/shared/source/built_ins/built_ins.h +++ b/shared/source/built_ins/built_ins.h @@ -8,10 +8,9 @@ #pragma once #include "shared/source/built_ins/builtinops/built_in_ops.h" #include "shared/source/built_ins/sip_kernel_type.h" +#include "shared/source/compiler_interface/compiler_options.h" #include "shared/source/helpers/debug_helpers.h" -#include "compiler_options.h" - #include #include #include diff --git a/shared/source/compiler_interface/CMakeLists.txt b/shared/source/compiler_interface/CMakeLists.txt index db5fe60f95..19a29c95ea 100644 --- a/shared/source/compiler_interface/CMakeLists.txt +++ b/shared/source/compiler_interface/CMakeLists.txt @@ -19,9 +19,8 @@ set(NEO_CORE_COMPILER_INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/linker.h ${CMAKE_CURRENT_SOURCE_DIR}/linker.inl ${CMAKE_CURRENT_SOURCE_DIR}/linker.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/compiler_options/compiler_options_base.h - ${CMAKE_CURRENT_SOURCE_DIR}/compiler_options/compiler_options_base.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/compiler_options${BRANCH_DIR_SUFFIX}compiler_options.h + ${CMAKE_CURRENT_SOURCE_DIR}/compiler_options.h + ${CMAKE_CURRENT_SOURCE_DIR}/compiler_options.cpp ${CMAKE_CURRENT_SOURCE_DIR}/compiler_warnings/compiler_warnings.h ) diff --git a/shared/source/compiler_interface/compiler_options/compiler_options_base.cpp b/shared/source/compiler_interface/compiler_options.cpp similarity index 92% rename from shared/source/compiler_interface/compiler_options/compiler_options_base.cpp rename to shared/source/compiler_interface/compiler_options.cpp index 1ed4337dd6..a183ceab87 100644 --- a/shared/source/compiler_interface/compiler_options/compiler_options_base.cpp +++ b/shared/source/compiler_interface/compiler_options.cpp @@ -1,11 +1,11 @@ /* - * Copyright (C) 2019-2020 Intel Corporation + * Copyright (C) 2019-2022 Intel Corporation * * SPDX-License-Identifier: MIT * */ -#include "compiler_options_base.h" +#include "shared/source/compiler_interface/compiler_options.h" #include diff --git a/shared/source/compiler_interface/compiler_options/compiler_options_base.h b/shared/source/compiler_interface/compiler_options.h similarity index 96% rename from shared/source/compiler_interface/compiler_options/compiler_options_base.h rename to shared/source/compiler_interface/compiler_options.h index ab6cb16505..c65474d4f1 100644 --- a/shared/source/compiler_interface/compiler_options/compiler_options_base.h +++ b/shared/source/compiler_interface/compiler_options.h @@ -38,6 +38,9 @@ constexpr ConstStringRef enableImageSupport = "-D__IMAGE_SUPPORT__=1"; constexpr ConstStringRef optLevel = "-ze-opt-level=O"; constexpr ConstStringRef excludeIrFromZebin = "-exclude-ir-from-zebin"; constexpr ConstStringRef noRecompiledFromIr = "-Wno-recompiled-from-ir"; +constexpr ConstStringRef defaultGrf = "-cl-intel-128-GRF-per-thread"; +constexpr ConstStringRef largeGrf = "-cl-intel-256-GRF-per-thread"; +constexpr ConstStringRef numThreadsPerEu = "-cl-intel-reqd-eu-thread-count"; constexpr size_t nullterminateSize = 1U; constexpr size_t spaceSeparatorSize = 1U; diff --git a/shared/source/compiler_interface/compiler_options/compiler_options.h b/shared/source/compiler_interface/compiler_options/compiler_options.h deleted file mode 100644 index bc6cb16b2a..0000000000 --- a/shared/source/compiler_interface/compiler_options/compiler_options.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright (C) 2019-2020 Intel Corporation - * - * SPDX-License-Identifier: MIT - * - */ - -#pragma once - -#include "shared/source/compiler_interface/compiler_options/compiler_options_base.h" diff --git a/shared/source/debug_settings/debug_variables_base.inl b/shared/source/debug_settings/debug_variables_base.inl index fe517c992e..d253f5efae 100644 --- a/shared/source/debug_settings/debug_variables_base.inl +++ b/shared/source/debug_settings/debug_variables_base.inl @@ -435,6 +435,8 @@ DECLARE_DEBUG_VARIABLE(bool, AllowUnrestrictedSize, false, "Allow allocating mem DECLARE_DEBUG_VARIABLE(bool, ForceDefaultThreadArbitrationPolicyIfNotSpecified, false, "When executing kernel without thread arbitration hint specified, ensure the default setting is used") DECLARE_DEBUG_VARIABLE(bool, ForceAllResourcesUncached, false, "When set, all memory operations for all resources are forced to UC. This overrides all caching-related debug variables and globally disables all caches") DECLARE_DEBUG_VARIABLE(bool, EnableDebuggerMmapMemoryAccess, false, "Mmap used to access memory by debug api, valid only on Linux OS") +DECLARE_DEBUG_VARIABLE(bool, ForceDefaultGrfCompilationMode, false, "Adds build option -cl-intel-128-GRF-per-thread to force kernel compilation in Default-GRF mode") +DECLARE_DEBUG_VARIABLE(bool, ForceLargeGrfCompilationMode, false, "Adds build option -cl-intel-256-GRF-per-thread to force kernel compilation in Large-GRF mode") DECLARE_DEBUG_VARIABLE(int32_t, ForceOCLVersion, 0, "Force specific OpenCL API version") DECLARE_DEBUG_VARIABLE(int32_t, ForceOCL21FeaturesSupport, -1, "-1: default, 0: disable, 1:enable. Force support of OpenCL 2.0 and OpenCL 2.1 API features") DECLARE_DEBUG_VARIABLE(int32_t, ForcePreemptionMode, -1, "Keep this variable in sync with PreemptionMode enum. -1 - devices default mode, 1 - disable, 2 - midBatch, 3 - threadGroup, 4 - midThread") diff --git a/shared/source/helpers/compiler_options_parser.cpp b/shared/source/helpers/compiler_options_parser.cpp index cd9b86d773..ff15af5c82 100644 --- a/shared/source/helpers/compiler_options_parser.cpp +++ b/shared/source/helpers/compiler_options_parser.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2021 Intel Corporation + * Copyright (C) 2020-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -7,7 +7,7 @@ #include "shared/source/helpers/compiler_options_parser.h" -#include "shared/source/compiler_interface/compiler_options/compiler_options_base.h" +#include "shared/source/compiler_interface/compiler_options.h" #include "shared/source/compiler_interface/oclc_extensions.h" #include "shared/source/helpers/hw_info.h" diff --git a/shared/source/kernel/kernel_arg_metadata.h b/shared/source/kernel/kernel_arg_metadata.h index d8c15f0c63..1d2a429376 100644 --- a/shared/source/kernel/kernel_arg_metadata.h +++ b/shared/source/kernel/kernel_arg_metadata.h @@ -7,7 +7,7 @@ #pragma once -#include "shared/source/compiler_interface/compiler_options/compiler_options_base.h" +#include "shared/source/compiler_interface/compiler_options.h" #include "shared/source/utilities/const_stringref.h" #include diff --git a/shared/test/common/mocks/mock_compilers.cpp b/shared/test/common/mocks/mock_compilers.cpp index 65873e3f1c..499aebd2b0 100644 --- a/shared/test/common/mocks/mock_compilers.cpp +++ b/shared/test/common/mocks/mock_compilers.cpp @@ -7,6 +7,7 @@ #include "mock_compilers.h" +#include "shared/source/compiler_interface/compiler_options.h" #include "shared/source/helpers/file_io.h" #include "shared/source/helpers/hw_info.h" #include "shared/source/os_interface/os_inc_base.h" @@ -16,7 +17,6 @@ #include "shared/test/common/mocks/mock_sip.h" #include "cif/macros/enable.h" -#include "compiler_options.h" #include "ocl_igc_interface/fcl_ocl_device_ctx.h" #include "ocl_igc_interface/igc_ocl_device_ctx.h" diff --git a/shared/test/common/test_files/igdrcl.config b/shared/test/common/test_files/igdrcl.config index 9059d7908d..dc36b1ea1d 100644 --- a/shared/test/common/test_files/igdrcl.config +++ b/shared/test/common/test_files/igdrcl.config @@ -450,3 +450,5 @@ ForceImagesSupport = -1 ForceCsrLockInBcsEnqueueOnlyForGpgpuSubmission = -1 ExperimentalEnableTileAttach = 0 DirectSubmissionDisablePrefetcher = -1 +ForceDefaultGrfCompilationMode = 0 +ForceLargeGrfCompilationMode = 0 \ No newline at end of file diff --git a/shared/test/unit_test/compiler_interface/compiler_options_tests.cpp b/shared/test/unit_test/compiler_interface/compiler_options_tests.cpp index 7b26061849..2af79f6d68 100644 --- a/shared/test/unit_test/compiler_interface/compiler_options_tests.cpp +++ b/shared/test/unit_test/compiler_interface/compiler_options_tests.cpp @@ -1,14 +1,13 @@ /* - * Copyright (C) 2019-2021 Intel Corporation + * Copyright (C) 2019-2022 Intel Corporation * * SPDX-License-Identifier: MIT * */ +#include "shared/source/compiler_interface/compiler_options.h" #include "shared/test/common/test_macros/test.h" -#include "compiler_options.h" - TEST(CompilerOptions, WhenConcatenationLengthIsCalledThenReturnsSumOfLengthsAndSeperators) { using namespace NEO::CompilerOptions; constexpr auto concatenatedLength = concatenationLength(NEO::CompilerOptions::optDisable);