cudnn_frontend_EngineConfigGenerator.h
Go to the documentation of this file.
/*
* Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
#pragma once
#include <cudnn_frontend.h>
namespace cudnn_frontend {
using executionPlans_t = std::vector<cudnn_frontend::ExecutionPlan>;
using Predicate = std::function<bool(cudnn_frontend::ExecutionPlan const &plan)>;
using GeneratorSource = std::function<cudnn_frontend::EngineConfigList(cudnn_frontend::OperationGraph &)>;
enum class CudnnFindSamplingTechnique {
CUDNN_FIND_SAMPLE_ONCE,
CUDNN_FIND_SAMPLE_MEDIAN_OF_THREE,
CUDNN_FIND_SAMPLE_TILL_STABLE
};
class EngineConfigGenerator {
private:
std::vector<GeneratorSource> engine_config_generators;
public:
EngineConfigGenerator(int const sourceSize, GeneratorSource const *sources) {
for (int i = 0; i < sourceSize; i++) {
engine_config_generators.push_back(sources[i]);
}
};
auto
generate_engine_config(cudnn_frontend::OperationGraph &opGraph) -> cudnn_frontend::EngineConfigList {
cudnn_frontend::EngineConfigList engine_configs;
for (auto fn : engine_config_generators) {
cudnn_frontend::EngineConfigList new_engine_config = fn(opGraph);
getLogger() << "[cudnn_frontend] Called engine config generator and produced "
<< new_engine_config.size() << " configs." << std::endl;
std::copy(new_engine_config.begin(), new_engine_config.end(), std::back_inserter(engine_configs));
new_engine_config.clear();
}
return engine_configs;
}
auto
cudnnGetPlan(cudnnHandle_t handle, cudnn_frontend::OperationGraph &opGraph, Predicate pred) -> executionPlans_t;
auto
cudnnGetPlan(cudnnHandle_t handle, cudnn_frontend::OperationGraph &opGraph) -> executionPlans_t;
template <CudnnFindSamplingTechnique samplingTechnique>
auto
cudnnFindPlan(cudnnHandle_t handle,
cudnn_frontend::OperationGraph &opGraph,
cudnn_frontend::VariantPack const &variantPack,
Predicate pred) -> executionPlans_t;
template <CudnnFindSamplingTechnique samplingTechnique>
auto
cudnnFindPlan(cudnnHandle_t handle,
cudnn_frontend::OperationGraph &opGraph,
cudnn_frontend::VariantPack const &variantPack) -> executionPlans_t;
template <CudnnFindSamplingTechnique samplingTechnique>
auto
cudnnFindPlanAndCache(cudnnHandle_t handle,
cudnn_frontend::OperationGraph &opGraph,
cudnn_frontend::VariantPack const &variantPack,
cudnn_frontend::ExecutionPlanCache &cache,
Predicate pred = [](const cudnn_frontend::ExecutionPlan &) {return false;}) -> cudnn_frontend::ExecutionPlan;
};
static auto
filter(Predicate pred, executionPlans_t &plans) -> executionPlans_t {
executionPlans_t filtered_plans;
for (auto &plan : plans) {
getLogger() << "[cudnn_frontend] "<< "Filtered ";
if (!pred(plan)) {
getLogger() << "and Added ";
filtered_plans.emplace_back(std::move(plan));
}
getLogger() << filtered_plans.back().getTag() << std::endl;
}
getLogger() << "[cudnn_frontend] Filtered plans count " << filtered_plans.size() << std::endl;
return filtered_plans;
}
}
cudnn_frontend::CudnnFindSamplingTechnique::CUDNN_FIND_SAMPLE_MEDIAN_OF_THREE
Sample 3 times and take median.
cudnn_frontend::getLogger
ConditionalStreamer & getLogger()
Definition: cudnn_frontend_Logging.h:72
cudnn_frontend::CudnnFindSamplingTechnique::CUDNN_FIND_SAMPLE_TILL_STABLE
Sample multiple times till stable.
cudnn_frontend::ExecutionPlan_v8
Definition: cudnn_frontend_ExecutionPlan.h:51
cudnn_frontend::EngineConfigGenerator::EngineConfigGenerator
EngineConfigGenerator(int const sourceSize, GeneratorSource const *sources)
Definition: cudnn_frontend_EngineConfigGenerator.h:50
cudnn_frontend::Predicate
std::function< bool(cudnn_frontend::ExecutionPlan const &plan)> Predicate
Definition: cudnn_frontend_EngineConfigGenerator.h:31
cudnn_frontend::filter
static auto filter(Predicate pred, executionPlans_t &plans) -> executionPlans_t
Definition: cudnn_frontend_EngineConfigGenerator.h:106
cudnn_frontend::EngineConfigGenerator::generate_engine_config
auto generate_engine_config(cudnn_frontend::OperationGraph &opGraph) -> cudnn_frontend::EngineConfigList
Definition: cudnn_frontend_EngineConfigGenerator.h:59
cudnn_frontend::CudnnFindSamplingTechnique
CudnnFindSamplingTechnique
Definition: cudnn_frontend_EngineConfigGenerator.h:34
cudnn_frontend::EngineConfigGenerator::engine_config_generators
std::vector< GeneratorSource > engine_config_generators
Definition: cudnn_frontend_EngineConfigGenerator.h:45
cudnn_frontend::EngineConfigGenerator
Definition: cudnn_frontend_EngineConfigGenerator.h:43
cudnn_frontend::executionPlans_t
std::vector< cudnn_frontend::ExecutionPlan > executionPlans_t
Variety of renames.
Definition: cudnn_frontend_EngineConfigGenerator.h:30
cudnn_frontend.h
cudnn_frontend::VariantPack_v8
Definition: cudnn_frontend_VariantPack.h:52
cudnn_frontend::GeneratorSource
std::function< cudnn_frontend::EngineConfigList(cudnn_frontend::OperationGraph &)> GeneratorSource
Definition: cudnn_frontend_EngineConfigGenerator.h:32
cudnn_frontend
Definition: cudnn_backend_base.h:29
cudnn_frontend::CudnnFindSamplingTechnique::CUDNN_FIND_SAMPLE_ONCE
Sample once quick but may have unstable values.
cudnn_frontend::EngineConfigList
std::vector< ManagedOpaqueDescriptor > EngineConfigList
Definition: cudnn_frontend_EngineConfig.h:248
cudnn_frontend::OperationGraph_v8
Definition: cudnn_frontend_OperationGraph.h:52
cudnn_frontend::ExecutionPlanCache_v2
Definition: cudnn_frontend_ExecutionPlanCache.h:141