Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

174 lines
4.7 KiB
Markdown

# hipDNN Knobs Usage Sample
This sample demonstrates how to use hipDNN's engine configuration knobs system.
## What are Knobs?
Knobs are runtime-configurable parameters that control engine behavior, performance tuning, and feature selection. They allow you to:
- Enable/disable features (e.g., benchmarking mode)
- Tune performance parameters (e.g., workspace size limits)
- Select algorithmic variants
- Control memory usage
## What This Sample Demonstrates
1. **Querying Available Knobs**: How to discover what knobs an engine supports
2. **Knob Metadata**: Understanding knob types, constraints, and default values
3. **Setting Knob Values**: Creating execution plans with custom knob settings
4. **Knob Validation**: Validating settings against knob constraints
5. **Knob Value Types**: Using integer, float, and string knobs
6. **Real Execution**: Running graphs with different knob configurations
## Building
The sample is built as part of the hipDNN samples:
```bash
cd /path/to/hipdnn/samples/build
cmake ..
make knobs_usage
```
## Running
### Basic Usage
```bash
./knobs_usage
```
This runs all demonstrations including actual graph executions.
### Skip Execution Examples
To see knob API demonstrations without running graphs:
```bash
./knobs_usage --skip-execution
```
This is faster and useful when you only want to learn about the knob API.
### Help
```bash
./knobs_usage --help
```
## Sample Output
The sample produces detailed output organized into sections:
```
=========================================
hipDNN Knobs Usage Sample
=========================================
1. Querying Available Knobs
- Lists all knobs for an engine
- Shows knob metadata (type, description, constraints, defaults)
2. Using Knob Lookup Map
- Demonstrates map-based knob lookup
- Shows how to find specific knobs by ID
3. Using Default Knob Values
- Creates execution plan with defaults
- Demonstrates simplest knob usage
4. Setting Custom Knob Values
- Shows how to set integer knob values
- Demonstrates creating plans with custom settings
5. Knob Validation
- Validates settings against constraints
- Shows both valid and invalid examples
6. Different Knob Value Types
- Integer knobs (int64_t)
- Float knobs (double)
- String knobs
7. Execution with Default Knobs
- Runs actual batchnorm graph with defaults
8. Execution with Benchmarking Enabled
- Runs graph with global.benchmarking=1
```
## Key Code Patterns
### Query Available Knobs
```cpp
std::vector<Knob> knobs;
auto error = graph.get_knobs_for_engine(engineId, knobs);
for (const auto& knob : knobs) {
std::cout << knob.knobId() << ": " << knob.description() << "\n";
}
```
### Set Custom Knob Values
```cpp
std::vector<KnobSetting> settings;
settings.emplace_back("global.benchmarking", 1);
settings.emplace_back("global.workspace_size_limit", 64 * 1024 * 1024);
auto error = graph.create_execution_plan_ext(engineId, settings);
```
### Validate Knob Settings
```cpp
KnobSetting setting("global.benchmarking", 1);
auto validationError = knob.validate(setting);
if (validationError.is_good()) {
std::cout << "Valid!\n";
}
```
## Common Knobs
### global.benchmarking
- **Type**: int64
- **Default**: 0 (disabled)
- **Range**: 0-1
- **Purpose**: Enable MIOpen kernel benchmarking for optimal performance
### global.workspace_size_limit
- **Type**: int64
- **Default**: Maximum
- **Range**: Dynamic (operation-specific)
- **Purpose**: Limit workspace memory for convolution operations
- **Note**: Only available for convolution operations
## Related Documentation
For comprehensive information about knobs:
- **[hipDNN Knobs Documentation](../../docs/Knobs.md)** - Complete guide with API reference
- **[HowTo Guide](../../docs/HowTo.md#configuring-engine-knobs)** - Quick start guide
- **[Plugin Development Guide](../../docs/PluginDevelopment.md#providing-knobs)** - For plugin authors
- **[MIOpen Provider Knobs](../../../../dnn-providers/miopen-provider/docs/Knobs.md)** - MIOpen-specific knobs
## Notes
- The sample uses a batchnorm operation for demonstration, but knobs work with all operations
- Not all engines support all knobs; always query available knobs first
- Unknown knobs are ignored with a warning (not an error)
- Invalid knob values will cause execution plan creation to fail
- Knobs are set at execution plan creation time, not at execution time
## Tips
1. **Always query first**: Use `get_knobs_for_engine()` to understand what's available
2. **Check constraints**: Look at the constraint object to understand valid ranges
3. **Use defaults when possible**: Only customize knobs when needed
4. **Handle errors**: Always check error return values when setting knobs
5. **Read the docs**: See the comprehensive documentation for advanced usage