/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
CLTunerMode tuner_mode{ CLTunerMode::EXHAUSTIVE }; /**< Tuner mode to be used by the CL tuner */
int num_threads{ -1 }; /**< Number of threads to use (thread capable backends), if 0 the backend will auto-initialize, if -1 the backend will stay as it is. */
std::string tuner_file{ "acl_tuner.csv" }; /**< File to load/store tuning values from */
+ std::string mlgo_file{ "heuristics.mlgo" }; /**< Filename to load MLGO heuristics from */
};
/**< Device target types */
/*
- * Copyright (c) 2018-2019 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
#include "arm_compute/graph/IDeviceBackend.h"
#include "arm_compute/runtime/CL/CLBufferAllocator.h"
+#include "arm_compute/runtime/CL/CLGEMMHeuristicsHandle.h"
#include "arm_compute/runtime/CL/CLTuner.h"
namespace arm_compute
std::shared_ptr<arm_compute::IWeightsManager> create_weights_manager() override;
private:
- int _context_count; /**< Counts how many contexts are currently using the backend */
- CLTuner _tuner; /**< CL kernel tuner */
- std::unique_ptr<CLBufferAllocator> _allocator; /**< CL buffer affinity allocator */
- std::string _tuner_file; /**< Filename to load/store the tuner's values from */
+ int _context_count; /**< Counts how many contexts are currently using the backend */
+ CLTuner _tuner; /**< CL kernel tuner */
+ CLGEMMHeuristicsHandle _gemm_heuristics; /**< GEMM heuristics */
+ std::unique_ptr<CLBufferAllocator> _allocator; /**< CL buffer affinity allocator */
+ std::string _tuner_file; /**< Filename to load/store the tuner's values from */
};
} // namespace backends
} // namespace graph
/*
- * Copyright (c) 2017-2020 Arm Limited.
+ * Copyright (c) 2017-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
// Load the precompiled kernels from a file into the kernel library, in this way the next time they are needed
// compilation won't be required.
/*
- * Copyright (c) 2019-2020 Arm Limited.
+ * Copyright (c) 2019-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.num_threads = common_params.threads;
config.use_tuner = common_params.enable_tuner;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
config.convert_to_uint8 = (common_params.data_type == DataType::QASYMM8);
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2020 Arm Limited.
+ * Copyright (c) 2020-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
context.set_config(config);
/*
- * Copyright (c) 2017-2020 Arm Limited.
+ * Copyright (c) 2017-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2017-2020 Arm Limited.
+ * Copyright (c) 2017-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
config.convert_to_uint8 = (common_params.data_type == DataType::QASYMM8);
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
config.convert_to_uint8 = (common_params.data_type == DataType::QASYMM8);
// Load the precompiled kernels from a file into the kernel library, in this way the next time they are needed
/*
- * Copyright (c) 2017-2020 Arm Limited.
+ * Copyright (c) 2017-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2019-2020 Arm Limited.
+ * Copyright (c) 2019-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2017-2020 Arm Limited.
+ * Copyright (c) 2017-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
+ config.mlgo_file = common_params.mlgo_file;
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2017-2020 Arm Limited.
+ * Copyright (c) 2017-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
config.convert_to_uint8 = (common_params.data_type == DataType::QASYMM8);
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
config.convert_to_uint8 = (common_params.data_type == DataType::QASYMM8);
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2017-2020 Arm Limited.
+ * Copyright (c) 2017-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
config.convert_to_uint8 = (common_params.data_type == DataType::QASYMM8);
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
config.convert_to_uint8 = (common_params.data_type == DataType::QASYMM8);
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
config.convert_to_uint8 = (common_params.data_type == DataType::QASYMM8);
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.num_threads = common_params.threads;
config.use_tuner = common_params.enable_tuner;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2017-2020 Arm Limited.
+ * Copyright (c) 2017-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
config.convert_to_uint8 = (common_params.data_type == DataType::QASYMM8);
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2017-2020 Arm Limited.
+ * Copyright (c) 2017-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
config.convert_to_uint8 = (common_params.data_type == DataType::QASYMM8);
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
config.convert_to_uint8 = (common_params.data_type == DataType::QASYMM8);
graph.finalize(common_params.target, config);
/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
config.use_tuner = common_params.enable_tuner;
config.tuner_mode = common_params.tuner_mode;
config.tuner_file = common_params.tuner_file;
+ config.mlgo_file = common_params.mlgo_file;
graph.finalize(common_params.target, config);
static detail::BackendRegistrar<CLDeviceBackend> CLDeviceBackend_registrar(Target::CL);
CLDeviceBackend::CLDeviceBackend()
- : _context_count(0), _tuner(), _allocator(nullptr), _tuner_file()
+ : _context_count(0), _tuner(), _gemm_heuristics(), _allocator(nullptr), _tuner_file()
{
}
void CLDeviceBackend::initialize_backend()
{
// Setup Scheduler
- CLScheduler::get().default_init(&_tuner);
+ CLScheduler::get().default_init(&_tuner, &_gemm_heuristics);
// Create allocator with new context
_allocator = std::make_unique<CLBufferAllocator>(nullptr /* legacy path for CLCoreRuntimeContext */);
}
set_kernel_tuning(ctx.config().use_tuner);
set_kernel_tuning_mode(ctx.config().tuner_mode);
+ // Attempt to load mlgo heuristics
+ ARM_COMPUTE_ERROR_ON(CLScheduler::get().gemm_heuristics() == nullptr);
+ CLScheduler::get().gemm_heuristics()->reload_from_file(ctx.config().mlgo_file);
+
// Setup a management backend
if(ctx.memory_management_ctx(Target::CL) == nullptr)
{
/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
#include "utils/command_line/CommandLineParser.h"
#ifdef ARM_COMPUTE_CL
+#include "arm_compute/runtime/CL/CLGEMMHeuristicsHandle.h"
#include "arm_compute/runtime/CL/CLHelpers.h"
#include "arm_compute/runtime/CL/CLScheduler.h"
#endif /* ARM_COMPUTE_CL */
}
#ifdef ARM_COMPUTE_CL
+ CLGEMMHeuristicsHandle gemm_h;
if(opencl_is_available())
{
auto ctx_dev_err = create_opencl_context_and_device();
ARM_COMPUTE_ERROR_ON_MSG(std::get<2>(ctx_dev_err) != CL_SUCCESS, "Failed to create OpenCL context");
CLScheduler::get()
- .default_init_with_context(std::get<1>(ctx_dev_err), std::get<0>(ctx_dev_err));
+ .default_init_with_context(std::get<1>(ctx_dev_err), std::get<0>(ctx_dev_err), nullptr, &gemm_h);
}
#endif /* ARM_COMPUTE_CL */
/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
os << "Cache enabled? : " << (common_params.enable_cl_cache ? true_str : false_str) << std::endl;
os << "Tuner mode : " << common_params.tuner_mode << std::endl;
os << "Tuner file : " << common_params.tuner_file << std::endl;
+ os << "MLGO file : " << common_params.mlgo_file << std::endl;
os << "Fast math enabled? : " << (common_params.fast_math_hint == FastMathHint::Enabled ? true_str : false_str) << std::endl;
if(!common_params.data_path.empty())
{
validation_file(parser.add_option<SimpleOption<std::string>>("validation-file")),
validation_path(parser.add_option<SimpleOption<std::string>>("validation-path")),
validation_range(parser.add_option<SimpleOption<std::string>>("validation-range")),
- tuner_file(parser.add_option<SimpleOption<std::string>>("tuner-file"))
+ tuner_file(parser.add_option<SimpleOption<std::string>>("tuner-file")),
+ mlgo_file(parser.add_option<SimpleOption<std::string>>("mlgo-file"))
{
std::set<arm_compute::graph::Target> supported_targets
{
validation_path->set_help("Path to the validation data");
validation_range->set_help("Range of the images to validate for (Format : start,end)");
tuner_file->set_help("File to load/save CLTuner values");
+ mlgo_file->set_help("File to load MLGO heuristics");
}
CommonGraphParams consume_common_graph_parameters(CommonGraphOptions &options)
common_params.validation_range_start = validation_range.first;
common_params.validation_range_end = validation_range.second;
common_params.tuner_file = options.tuner_file->value();
+ common_params.mlgo_file = options.mlgo_file->value();
return common_params;
}
/*
- * Copyright (c) 2018-2020 Arm Limited.
+ * Copyright (c) 2018-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
std::string validation_file{};
std::string validation_path{};
std::string tuner_file{};
+ std::string mlgo_file{};
unsigned int validation_range_start{ 0 };
unsigned int validation_range_end{ std::numeric_limits<unsigned int>::max() };
};
SimpleOption<std::string> *validation_path; /**< Validation data path */
SimpleOption<std::string> *validation_range; /**< Validation range */
SimpleOption<std::string> *tuner_file; /**< File to load/store the tuner's values from */
+ SimpleOption<std::string> *mlgo_file; /**< File to load the MLGO heuristics from */
};
/** Consumes the common graph options and creates a structure containing any information