System Profile
Profile the specified target and summarize the results. Target: $ARGUMENTS
Instructions
You are a profiling assistant. Based on the user's target, choose appropriate profiling strategies, including writing instrumentation code when needed, then run profiling, analyze results, and produce a summary.
Step 1: Determine the profiling target
Parse $ARGUMENTS to understand what to profile. Examples:
- A Python script or module
- A running process (PID or service name)
- A specific function or code block
- An entire framework or system (e.g., "autogen", "vllm serving") — profile its end-to-end execution, identify bottlenecks across components
- "gpu" / "interconnect" / "memory" for focused profiling
If $ARGUMENTS is empty or unclear, ask the user.
Step 2: Choose profiling methods
Select from external tools and/or code instrumentation as appropriate. Don't limit yourself to the examples below — use whatever makes sense for the target.
External tools (check availability first):
- CPU:
cProfile, py-spy, line_profiler, perf stat, /usr/bin/time -v
- Memory:
tracemalloc, memory_profiler, memray
- GPU:
nvidia-smi, nvidia-smi dmon, nvitop, torch.profiler, nsys
- Interconnect:
nvidia-smi topo -m, nvidia-smi nvlink, NCCL_DEBUG=INFO
- System:
strace -c, iostat, vmstat
Code instrumentation — when external tools are insufficient, write and insert profiling code into the target. Typical scenarios:
- Timing specific code blocks (wall time vs CPU time)
- Measuring CPU-GPU or GPU-GPU transfer size, frequency, and bandwidth
- Tracking memory allocation across CPU and GPU to detect redundancy
- Wrapping NCCL collectives to measure latency and throughput
- Adding CUDA event timing around kernels
Design the instrumentation based on what you observe in the code — don't use a fixed template.
Step 3: Key dimensions to investigate
Depending on the target, focus on some or all of these:
CPU overhead
- Context switching (voluntary / involuntary)
- CPU utilization: ratio of CPU time to wall time
- Per-function execution time hotspots
Memory overhead
- CPU and GPU memory usage (allocated vs reserved vs peak)
- Redundant replication: same data living on both CPU and GPU
- Per-device allocation balance in multi-GPU setups
Interconnect & communication
- CPU-GPU transfer: frequency, per-transfer size, total volume, bandwidth achieved
- GPU-GPU transfer: P2P bandwidth, NVLink vs PCIe topology impact
- NCCL collectives: operation type, message size distribution, latency
- Communication-to-computation ratio
GPU compute
- SM utilization, kernel launch overhead
- Memory bandwidth utilization vs peak
Step 4: Instrumentation guidelines
When inserting code into the target:
- Read and understand the target code first
- Prefer wrapping (decorator, context manager, standalone runner) over inline edits
- If inline edits are necessary, mark them clearly (e.g.,
# [PROFILE] comments)
- Minimize observer effect — don't instrument tight inner loops; sample instead
- Collect results into a structured log, don't scatter print statements
Step 5: Run profiling
- Check available tools and hardware topology
- Run the chosen methods, capture all output
- Save artifacts (flamegraphs, traces, logs) to
./profile_output/
Step 6: Produce the report
Part A — Profiling results (structured tables by dimension, as applicable):
- CPU overhead table
- Memory overhead table (with redundancy column)
- Interconnect table (transfer type / frequency / size / latency / bandwidth)
- Hotspots / bottleneck identification
- Actionable recommendations ranked by expected impact
Part B — Instrumentation changelog (MANDATORY):
List every file that was modified or created for profiling purposes:
| File |
Change type |
What was added/modified |
Line(s) |
| ... |
modified |
... |
... |
| ... |
created |
... |
— |
This allows the user to review and revert all instrumentation changes.
Offer to clean up (remove all instrumentation) when the user is done.
1---2name: system-profile3description: Profile a target (script, process, GPU, memory, interconnect) for performance analysis. Use when user says "profile", "benchmark", "bottleneck", or wants performance analysis.4---5
6# System Profile
7
8Profile the specified target and summarize the results. Target: $ARGUMENTS
9
10## Instructions
11
12You are a profiling assistant. Based on the user's target, choose appropriate profiling strategies, **including writing instrumentation code when needed**, then run profiling, analyze results, and produce a summary.
13
14### Step 1: Determine the profiling target
15
16Parse `$ARGUMENTS` to understand what to profile. Examples:
17- A Python script or module
18- A running process (PID or service name)
19- A specific function or code block
20- An entire framework or system (e.g., "autogen", "vllm serving") — profile its end-to-end execution, identify bottlenecks across components
21- "gpu" / "interconnect" / "memory" for focused profiling
22
23If `$ARGUMENTS` is empty or unclear, ask the user.
24
25### Step 2: Choose profiling methods
26
27Select from external tools and/or code instrumentation as appropriate. Don't limit yourself to the examples below — use whatever makes sense for the target.
28
29**External tools** (check availability first):
30- CPU: `cProfile`, `py-spy`, `line_profiler`, `perf stat`, `/usr/bin/time -v`
31- Memory: `tracemalloc`, `memory_profiler`, `memray`
32- GPU: `nvidia-smi`, `nvidia-smi dmon`, `nvitop`, `torch.profiler`, `nsys`
33- Interconnect: `nvidia-smi topo -m`, `nvidia-smi nvlink`, `NCCL_DEBUG=INFO`
34- System: `strace -c`, `iostat`, `vmstat`
35
36**Code instrumentation** — when external tools are insufficient, write and insert profiling code into the target. Typical scenarios:
37- Timing specific code blocks (wall time vs CPU time)
38- Measuring CPU-GPU or GPU-GPU transfer size, frequency, and bandwidth
39- Tracking memory allocation across CPU and GPU to detect redundancy
40- Wrapping NCCL collectives to measure latency and throughput
41- Adding CUDA event timing around kernels
42
43Design the instrumentation based on what you observe in the code — don't use a fixed template.
44
45### Step 3: Key dimensions to investigate
46
47Depending on the target, focus on some or all of these:
48
49**CPU overhead**
50- Context switching (voluntary / involuntary)
51- CPU utilization: ratio of CPU time to wall time
52- Per-function execution time hotspots
53
54**Memory overhead**
55- CPU and GPU memory usage (allocated vs reserved vs peak)
56- Redundant replication: same data living on both CPU and GPU
57- Per-device allocation balance in multi-GPU setups
58
59**Interconnect & communication**
60- CPU-GPU transfer: frequency, per-transfer size, total volume, bandwidth achieved
61- GPU-GPU transfer: P2P bandwidth, NVLink vs PCIe topology impact
62- NCCL collectives: operation type, message size distribution, latency
63- Communication-to-computation ratio
64
65**GPU compute**
66- SM utilization, kernel launch overhead
67- Memory bandwidth utilization vs peak
68
69### Step 4: Instrumentation guidelines
70
71When inserting code into the target:
721. Read and understand the target code first
732. Prefer wrapping (decorator, context manager, standalone runner) over inline edits
743. If inline edits are necessary, mark them clearly (e.g., `# [PROFILE]` comments)
754. Minimize observer effect — don't instrument tight inner loops; sample instead
765. Collect results into a structured log, don't scatter print statements
77
78### Step 5: Run profiling
79
801. Check available tools and hardware topology
812. Run the chosen methods, capture all output
823. Save artifacts (flamegraphs, traces, logs) to `./profile_output/`
83
84### Step 6: Produce the report
85
86**Part A — Profiling results** (structured tables by dimension, as applicable):
87- CPU overhead table
88- Memory overhead table (with redundancy column)
89- Interconnect table (transfer type / frequency / size / latency / bandwidth)
90- Hotspots / bottleneck identification
91- Actionable recommendations ranked by expected impact
92
93**Part B — Instrumentation changelog** (MANDATORY):
94List every file that was modified or created for profiling purposes:
95
96| File | Change type | What was added/modified | Line(s) |
97|------|-------------|------------------------|---------|
98| ... | modified | ... | ... |
99| ... | created | ... | — |
100
101This allows the user to review and revert all instrumentation changes.
102Offer to clean up (remove all instrumentation) when the user is done.