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
118 lines
3.1 KiB
Markdown
118 lines
3.1 KiB
Markdown
# CK Tile Dispatcher - Language Bindings
|
|
|
|
This directory contains language bindings for the CK Tile Dispatcher.
|
|
|
|
## Structure
|
|
|
|
```
|
|
bindings/
|
|
|---- ctypes/ # Python ctypes bindings (C API)
|
|
| |---- gemm_ctypes_lib.cpp # GEMM dispatcher C API
|
|
| |---- grouped_gemm_ctypes_lib.cpp # Grouped (multi-problem) GEMM bridge C API -- see GROUPED_GEMM_BRIDGE.md
|
|
| |---- conv_ctypes_lib.cpp # Grouped conv dispatcher C API (fwd + bwd_data)
|
|
| |---- conv_bwdw_ctypes_lib.cpp # Grouped conv backward weight C API (separate library)
|
|
| |---- fmha_ctypes_lib.cpp # FMHA dispatcher C API (fwd + bwd)
|
|
| |---- gpu_helper.cpp # CLI helper for Python
|
|
| +---- CMakeLists.txt
|
|
+---- README.md
|
|
```
|
|
|
|
## ctypes Bindings
|
|
|
|
The ctypes bindings provide a C API that Python can load via `ctypes.CDLL()`.
|
|
|
|
### Building
|
|
|
|
```bash
|
|
cd build
|
|
cmake .. -DCMAKE_PREFIX_PATH=/opt/rocm
|
|
make dispatcher_gemm_lib dispatcher_conv_lib gpu_helper
|
|
```
|
|
|
|
### Usage from Python
|
|
|
|
```python
|
|
import ctypes
|
|
|
|
# Load the library
|
|
lib = ctypes.CDLL("path/to/libdispatcher_gemm_lib.so")
|
|
|
|
# Initialize
|
|
lib.dispatcher_init()
|
|
|
|
# Check if problem is supported
|
|
is_supported = lib.dispatcher_is_supported(M, N, K)
|
|
|
|
# Run GEMM
|
|
time_ms = ctypes.c_float()
|
|
result = lib.dispatcher_run_gemm(
|
|
A_ptr, B_ptr, C_ptr,
|
|
M, N, K,
|
|
ctypes.byref(time_ms)
|
|
)
|
|
|
|
# Cleanup
|
|
lib.dispatcher_cleanup()
|
|
```
|
|
|
|
### GEMM API
|
|
|
|
| Function | Description |
|
|
|----------|-------------|
|
|
| `dispatcher_init()` | Initialize the dispatcher |
|
|
| `dispatcher_is_supported(M, N, K)` | Check if problem size is supported |
|
|
| `dispatcher_select_kernel(M, N, K, name_buf, buf_size)` | Get kernel name for problem |
|
|
| `dispatcher_run_gemm(A, B, C, M, N, K, time_ms)` | Execute GEMM |
|
|
| `dispatcher_get_kernel_count()` | Get number of registered kernels |
|
|
| `dispatcher_export_registry_json()` | Export registry as JSON |
|
|
| `dispatcher_cleanup()` | Release resources |
|
|
|
|
### Grouped Convolution API
|
|
|
|
| Function | Description |
|
|
|----------|-------------|
|
|
| `conv_dispatcher_init()` | Initialize the dispatcher |
|
|
| `conv_dispatcher_is_supported(prob)` | Check if problem is supported |
|
|
| `conv_dispatcher_select_kernel(prob, name_buf, buf_size)` | Get kernel name |
|
|
| `conv_dispatcher_run(input, weight, output, prob, stream)` | Execute convolution |
|
|
| `conv_dispatcher_get_kernel_count()` | Get number of registered kernels |
|
|
| `conv_dispatcher_cleanup()` | Release resources |
|
|
|
|
## GPU Helper
|
|
|
|
The `gpu_helper` executable provides a CLI interface for Python:
|
|
|
|
```bash
|
|
./gpu_helper 1024 1024 1024 --validate
|
|
```
|
|
|
|
Output is JSON for easy parsing:
|
|
```json
|
|
{
|
|
"problem": {"M": 1024, "N": 1024, "K": 1024},
|
|
"kernel": "gemm_fp16_rcr_...",
|
|
"execution": {
|
|
"time_ms": 0.5,
|
|
"tflops": 4.2
|
|
},
|
|
"validation": {
|
|
"accuracy": 100.0
|
|
},
|
|
"status": "success"
|
|
}
|
|
```
|
|
|
|
## Examples
|
|
|
|
See the examples that use these bindings:
|
|
|
|
- **GEMM**: `dispatcher/examples/gemm/python/`
|
|
|
|
### Grouped Convolution
|
|
|
|
Grouped convolution C++ headers and Python utilities are in:
|
|
- **C++ Headers**: `dispatcher/include/ck_tile/dispatcher/grouped_conv_*.hpp`
|
|
- **Python Utils**: `dispatcher/python/grouped_conv_utils.py`
|
|
- **Build Script**: `dispatcher/scripts/compile_grouped_conv_examples.py`
|
|
|