performance-profiling

Performance Profiling

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "performance-profiling" with this command: npx skills add heshamfs/materials-simulation-skills/heshamfs-materials-simulation-skills-performance-profiling

Performance Profiling

Goal

Provide tools to analyze simulation performance, identify bottlenecks, and recommend optimization strategies for computational materials science simulations.

Requirements

  • Python 3.8+

  • No external dependencies (uses Python standard library only)

  • Works on Linux, macOS, and Windows

Inputs to Gather

Before running profiling scripts, collect from the user:

Input Description Example

Simulation log Log file with timing information simulation.log

Scaling data JSON with multi-run performance data scaling_data.json

Simulation parameters JSON with mesh, fields, solver config params.json

Available memory System memory in GB (optional) 16.0

Decision Guidance

When to Use Each Script

Need to identify slow phases? ├── YES → Use timing_analyzer.py │ └── Parse simulation logs for timing data │ Need to understand parallel performance? ├── YES → Use scaling_analyzer.py │ └── Analyze strong or weak scaling efficiency │ Need to estimate memory requirements? ├── YES → Use memory_profiler.py │ └── Estimate memory from problem parameters │ Need optimization recommendations? └── YES → Use bottleneck_detector.py └── Combine analyses and get actionable advice

Choosing Analysis Thresholds

Metric Good Acceptable Poor

Phase dominance <30% 30-50%

50%

Parallel efficiency

0.80 0.70-0.80 <0.70

Memory usage <60% 60-80%

80%

Script Outputs (JSON Fields)

Script Key Outputs

timing_analyzer.py

timing_data.phases , timing_data.slowest_phase , timing_data.total_time

scaling_analyzer.py

scaling_analysis.results , scaling_analysis.efficiency_threshold_processors

memory_profiler.py

memory_profile.total_memory_gb , memory_profile.per_process_gb , memory_profile.warnings

bottleneck_detector.py

bottlenecks , recommendations

Workflow

Complete Profiling Workflow

  • Analyze timing from simulation logs

  • Analyze scaling from multi-run data (if available)

  • Profile memory from simulation parameters

  • Detect bottlenecks and get recommendations

  • Implement optimizations based on recommendations

  • Re-profile to verify improvements

Quick Profiling (Timing Only)

  • Run timing analyzer on simulation log

  • Identify dominant phases (>50% of runtime)

  • Apply targeted optimizations to dominant phases

CLI Examples

Timing Analysis

Basic timing analysis

python3 scripts/timing_analyzer.py
--log simulation.log
--json

Custom timing pattern

python3 scripts/timing_analyzer.py
--log simulation.log
--pattern 'Step\s+(\w+)\s+took\s+([\d.]+)s'
--json

Scaling Analysis

Strong scaling (fixed problem size)

python3 scripts/scaling_analyzer.py
--data scaling_data.json
--type strong
--json

Weak scaling (constant work per processor)

python3 scripts/scaling_analyzer.py
--data scaling_data.json
--type weak
--json

Memory Profiling

Estimate memory requirements

python3 scripts/memory_profiler.py
--params simulation_params.json
--available-gb 16.0
--json

Bottleneck Detection

Detect bottlenecks from timing only

python3 scripts/bottleneck_detector.py
--timing timing_results.json
--json

Comprehensive analysis with all inputs

python3 scripts/bottleneck_detector.py
--timing timing_results.json
--scaling scaling_results.json
--memory memory_results.json
--json

Conversational Workflow Example

User: My simulation is taking too long. Can you help me identify what's slow?

Agent workflow:

  • Ask for simulation log file

  • Run timing analyzer: python3 scripts/timing_analyzer.py --log simulation.log --json

  • Interpret results:

  • If solver dominates (>50%): Recommend preconditioner tuning

  • If assembly dominates: Recommend caching or vectorization

  • If I/O dominates: Recommend reducing output frequency

  • If user has multi-run data, analyze scaling: python3 scripts/scaling_analyzer.py --data scaling.json --type strong --json

  • Generate comprehensive recommendations: python3 scripts/bottleneck_detector.py --timing timing.json --scaling scaling.json --json

Interpretation Guidance

Timing Analysis

Scenario Meaning Action

Solver >70% Solver-dominated Tune preconditioner, check tolerance

Assembly >50% Assembly-dominated Cache matrices, vectorize, parallelize

I/O >30% I/O-dominated Reduce frequency, use parallel I/O

Balanced (<30% each) Well-balanced Look for algorithmic improvements

Scaling Analysis

Efficiency Meaning Action

0.80 Excellent scaling Continue scaling up

0.70-0.80 Good scaling Monitor at larger scales

0.50-0.70 Poor scaling Investigate communication/load balance

<0.50 Very poor scaling Reduce processor count or redesign

Memory Profile

Usage Meaning Action

<60% available Safe No action needed

60-80% available Moderate Monitor, consider optimization

80% available High Reduce resolution or increase processors

100% available Exceeds capacity Must reduce problem size

Error Handling

Error Cause Resolution

Log file not found

Invalid path Verify log file path

No timing data found

Pattern mismatch Provide custom pattern with --pattern

At least 2 runs required

Insufficient data Provide more scaling runs

Missing required parameters

Incomplete params Add mesh and fields to params file

Optimization Strategies by Bottleneck Type

Solver Bottlenecks

  • Use algebraic multigrid (AMG) preconditioner

  • Tighten solver tolerance if over-solving

  • Consider direct solver for small problems

  • Profile matrix assembly vs solve time

Assembly Bottlenecks

  • Cache element matrices if geometry is static

  • Use vectorized assembly routines

  • Consider matrix-free methods

  • Parallelize assembly with coloring

I/O Bottlenecks

  • Reduce output frequency

  • Use parallel I/O (HDF5, MPI-IO)

  • Write to fast scratch storage

  • Compress output data

Scaling Bottlenecks

  • Investigate communication overhead

  • Check for load imbalance

  • Reduce synchronization points

  • Use asynchronous communication

  • Consider hybrid MPI+OpenMP

Memory Bottlenecks

  • Reduce mesh resolution

  • Use iterative solver (lower memory than direct)

  • Enable out-of-core computation

  • Increase number of processors

  • Use single precision where appropriate

Limitations

  • Log parsing: Depends on pattern matching; may miss unusual formats

  • Scaling analysis: Requires at least 2 runs for meaningful results

  • Memory estimation: Approximate; actual usage may vary

  • Recommendations: General guidance; may need domain-specific tuning

References

  • references/profiling_guide.md

  • Profiling concepts and interpretation

  • references/optimization_strategies.md

  • Detailed optimization approaches

Version History

  • v1.0.0 (2025-01-22): Initial release with 4 profiling scripts

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

nonlinear-solvers

No summary provided by upstream source.

Repository SourceNeeds Review
General

numerical-stability

No summary provided by upstream source.

Repository SourceNeeds Review
General

simulation-orchestrator

No summary provided by upstream source.

Repository SourceNeeds Review