diff --git a/src/plugins/intel_cpu/src/config.cpp b/src/plugins/intel_cpu/src/config.cpp index eea069eff7a..0e402172e73 100644 --- a/src/plugins/intel_cpu/src/config.cpp +++ b/src/plugins/intel_cpu/src/config.cpp @@ -14,10 +14,11 @@ #include "ie_parallel.hpp" #include "ie_system_conf.h" -#include +#include "cpp_interfaces/interface/ie_internal_plugin_config.hpp" #include "openvino/core/type/element_type_traits.hpp" #include "openvino/runtime/properties.hpp" -#include +#include "utils/debug_capabilities.h" +#include "cpu/x64/cpu_isa_traits.hpp" namespace ov { namespace intel_cpu { @@ -48,10 +49,24 @@ Config::Config() { if (!dnnl::impl::cpu::x64::mayiuse(dnnl::impl::cpu::x64::avx512_core_bf16)) enforceBF16 = false; - CPU_DEBUG_CAP_ENABLE(readDebugCapsProperties()); + CPU_DEBUG_CAP_ENABLE(applyDebugCapsProperties()); + updateProperties(); } +#ifdef CPU_DEBUG_CAPS +/** + * Debug capabilities configuration has more priority than common one + * Some of the debug capabilities also require to enable some of common + * configuration properties + */ +void Config::applyDebugCapsProperties() { + // always enable perf counters for verbose mode and performance summary + if (!debugCaps.verbose.empty() || !debugCaps.summaryPerf.empty()) + collectPerfCounters = true; +} +#endif + void Config::readProperties(const std::map &prop) { const auto streamExecutorConfigKeys = streamExecutorConfig.SupportedKeys(); const auto hintsConfigKeys = perfHintsConfig.SupportedKeys(); @@ -184,7 +199,7 @@ void Config::readProperties(const std::map &prop) { if (exclusiveAsyncRequests) // Exclusive request feature disables the streams streamExecutorConfig._streams = 1; - CPU_DEBUG_CAP_ENABLE(readDebugCapsProperties()); + CPU_DEBUG_CAP_ENABLE(applyDebugCapsProperties()); updateProperties(); } @@ -239,58 +254,6 @@ void Config::updateProperties() { _config.insert({PluginConfigParams::KEY_CACHE_DIR, cache_dir}); } -#ifdef CPU_DEBUG_CAPS -void Config::readDebugCapsProperties() { - auto readEnv = [](const char* envVar) { - return std::getenv(envVar); - }; - - auto parseDumpFormat = [](const std::string& format) { - if (format == "BIN") - return FORMAT::BIN; - else if (format == "TEXT") - return FORMAT::TEXT; - else - IE_THROW() << "readDebugCapsProperties: Unknown dump format"; - }; - - const char* envVarValue = nullptr; - - if (envVarValue = readEnv("OV_CPU_EXEC_GRAPH_PATH")) - execGraphPath = envVarValue; - - if (envVarValue = readEnv("OV_CPU_VERBOSE")) - verbose = envVarValue; - - if (envVarValue = readEnv("OV_CPU_BLOB_DUMP_DIR")) - blobDumpDir = envVarValue; - - if (envVarValue = readEnv("OV_CPU_BLOB_DUMP_FORMAT")) - blobDumpFormat = parseDumpFormat(envVarValue); - - if (envVarValue = readEnv("OV_CPU_BLOB_DUMP_NODE_EXEC_ID")) - blobDumpFilters[BY_EXEC_ID] = envVarValue; - - if (envVarValue = readEnv("OV_CPU_BLOB_DUMP_NODE_PORTS")) - blobDumpFilters[BY_PORTS] = envVarValue; - - if (envVarValue = readEnv("OV_CPU_BLOB_DUMP_NODE_TYPE")) - blobDumpFilters[BY_TYPE] = envVarValue; - - if (envVarValue = readEnv("OV_CPU_BLOB_DUMP_NODE_NAME")) - blobDumpFilters[BY_NAME] = envVarValue; - - if (envVarValue = readEnv("OV_CPU_SUMMARY_PERF")) { - collectPerfCounters = true; - summaryPerf = envVarValue; - } - - // always enable perf counters for verbose mode - if (!verbose.empty()) - collectPerfCounters = true; -} -#endif // CPU_DEBUG_CAPS - } // namespace intel_cpu } // namespace ov diff --git a/src/plugins/intel_cpu/src/config.h b/src/plugins/intel_cpu/src/config.h index f9ac17e8475..621ced1f36d 100644 --- a/src/plugins/intel_cpu/src/config.h +++ b/src/plugins/intel_cpu/src/config.h @@ -6,8 +6,11 @@ #include #include -#include "utils/debug_capabilities.h" +#include +#include +#include "utils/debug_caps_config.h" +#include #include #include #include @@ -57,31 +60,12 @@ struct Config { std::map _config; -#ifdef CPU_DEBUG_CAPS - enum FILTER { - BY_PORTS, - BY_EXEC_ID, - BY_TYPE, - BY_NAME, - }; - - enum class FORMAT { - BIN, - TEXT, - }; - - std::string execGraphPath; - std::string verbose; - std::string blobDumpDir = "cpu_dump"; - FORMAT blobDumpFormat = FORMAT::TEXT; - // std::hash is necessary for Ubuntu-16.04 (gcc-5.4 and defect in C++11 standart) - std::unordered_map> blobDumpFilters; - std::string summaryPerf = ""; - - void readDebugCapsProperties(); -#endif - bool isNewApi = true; + +#ifdef CPU_DEBUG_CAPS + DebugCapsConfig debugCaps; + void applyDebugCapsProperties(); +#endif }; } // namespace intel_cpu diff --git a/src/plugins/intel_cpu/src/docs/README.md b/src/plugins/intel_cpu/src/docs/README.md index 4536ba08264..0e8e4a4df61 100644 --- a/src/plugins/intel_cpu/src/docs/README.md +++ b/src/plugins/intel_cpu/src/docs/README.md @@ -6,6 +6,7 @@ Use the following cmake option to enable debug capabilities: * [Verbose mode](verbose.md) * [Blob dumping](blob_dumping.md) * [Graph serialization](graph_serialization.md) +* [Graph transformation disabling](feature_disabling.md#graph-transformations) ## Debug log diff --git a/src/plugins/intel_cpu/src/docs/blob_dumping.md b/src/plugins/intel_cpu/src/docs/blob_dumping.md index fd7b0aacfd4..00bb2a04d12 100644 --- a/src/plugins/intel_cpu/src/docs/blob_dumping.md +++ b/src/plugins/intel_cpu/src/docs/blob_dumping.md @@ -29,8 +29,8 @@ Default is *cpu_dump* OV_CPU_BLOB_DUMP_FORMAT= binary ... ``` Options are: -* BIN (default) -* TEXT +* BIN +* TEXT (default) ## Filter input / output blobs To dump only input / output blobs: diff --git a/src/plugins/intel_cpu/src/docs/debug_caps_filters.md b/src/plugins/intel_cpu/src/docs/debug_caps_filters.md new file mode 100644 index 00000000000..a4c65817e2e --- /dev/null +++ b/src/plugins/intel_cpu/src/docs/debug_caps_filters.md @@ -0,0 +1,52 @@ +# Filters + +Filters described below have the following common format: +```sh + filter_name= +``` +Tokens are processed from left to right and each one includes or excludes corresponding value.\ +For exclusion token is just prepended by minus: *-token*\ +All tokens are case insensitive and no tokens is treated as *all*\ +So filters below are equal: +* filter_name +* filter_name=all +* filter_name=-all,ALL + +## IR format filter + +IR format filter is used to specify output IR formats, e.g. for [serialization](graph_serialization.md#graph-transformations). +```sh + formats= +``` + +The following tokens are supported: +* all\ +equals to +* xml (default)\ +IR in .xml file. Can be opened using, for example, *netron* app. (For now the option is Linux only) +* xmlbin\ +IR in .xml and .bin files. Can be opened using, for example, *netron* app. +* dot\ +IR in .dot file (.svg.dot file if svg is also specified). Can be inspected using, for example, *graphviz* tools. +* svg\ +IR in .svg file. Requires *dot* tool to be installed on the host, not supported on Windows.\ +Generation is based on dot representation, so IR is additionally dumped to .svg.dot file. + +## Transformation filter + +Transformation filter is used to specify main graph transformation stages for different purposes, +e.g. for [disabling](feature_disabling.md#graph-transformation) or [serialization](graph_serialization.md#graph-transformations). +```sh + transformations= +``` + +The following tokens are supported: +* all (default)\ +equals to +* common \ +equals to +* preLpt +* lpt +* postLpt +* snippets +* specific diff --git a/src/plugins/intel_cpu/src/docs/feature_disabling.md b/src/plugins/intel_cpu/src/docs/feature_disabling.md new file mode 100644 index 00000000000..9ac31a13cac --- /dev/null +++ b/src/plugins/intel_cpu/src/docs/feature_disabling.md @@ -0,0 +1,26 @@ +# Feature disabling + +Common way to disable something in CPU plugin is implied by means of environment variable **OV_CPU_DISABLE**: +```sh + OV_CPU_DISABLE= binary ... +``` +Option names are case insensitive and processed from left to right,\ +so last one overwrites previous ones if duplicated. + +Examples: +```sh + OV_CPU_DISABLE="transformations" binary ... + OV_CPU_DISABLE="transformations=lpt" binary ... + OV_CPU_DISABLE="transformations=all,-common" binary ... +``` + +By means of corresponding options **OV_CPU_DISABLE** controls disabling of the following features: + +## Graph transformations + +Graph transformation disabling is controlled by the following option inside **OV_CPU_DISABLE**: +```sh +transformations= +``` +Filter with main transformation stages to disable specified ones.\ +See [transformation filter](debug_caps_filters.md#transformation-filter) for more details. diff --git a/src/plugins/intel_cpu/src/docs/graph_serialization.md b/src/plugins/intel_cpu/src/docs/graph_serialization.md index 0454de3bbda..74bc485c629 100644 --- a/src/plugins/intel_cpu/src/docs/graph_serialization.md +++ b/src/plugins/intel_cpu/src/docs/graph_serialization.md @@ -1,17 +1,43 @@ # Graph serialization -The functionality allows to serialize execution graph using environment variable: +Graph serialization is disabled by default and controlled by environment variables. + +## Execution graph + +Execution graph could be serialized using environment variable **OV_CPU_EXEC_GRAPH_PATH**: ```sh - OV_CPU_EXEC_GRAPH_PATH= binary ... + OV_CPU_EXEC_GRAPH_PATH=