Agent Skills by ALSEL
Anthropic Claudeデータ・分析⭐ リポ 0品質スコア 60/100

profile-engine

Pythonエンジンをプロファイリングして、NumPy/Numbaコード内のパフォーマンスボトルネックを特定できます

description の原文を見る

Profile the Python engine to identify performance bottlenecks in NumPy/Numba code

SKILL.md 本文

OSMOSE Python エンジンをプロファイルし、パフォーマンスボトルネックと Numba JIT コンパイルの問題を特定します。

引数

  • config (オプション): "bob"(ビスケー湾)または "eec"(EEC)— デフォルト: "bob"
  • years (オプション): シミュレーション年数(デフォルト: 5)
  • focus (オプション): 詳細プロファイルを実施する特定モジュール(例:"predation"、"movement")

ステップ

  1. cProfile を実行して高レベルな関数別実行時間の内訳を取得します:

    .venv/bin/python -m cProfile -s cumulative -m osmose.engine.cli --config {config} --years {years} 2>&1 | head -40
    

    CLI エントリーポイントがない場合は、以下のインラインアプローチを使用します:

    .venv/bin/python -c "
    import cProfile
    from scripts.benchmark_engine import run_benchmark
    cProfile.run('run_benchmark()', sort='cumulative')
    " 2>&1 | head -40
    
  2. 上位 5 つのホットスポットを特定: cProfile 出力から、累積実行時間が最も長い関数をリストアップします。NumPy/Numba 内部ではなく、osmose/engine/ 内の関数に焦点を当てます。

  3. ホットスポット関数の Numba JIT ステータスを確認します:

    .venv/bin/python -c "
    import numba
    numba.config.DEVELOPER_MODE = True
    # モジュールをインポートして JIT コンパイルをトリガーします
    from osmose.engine.processes import predation
    print('Numba JIT compilation successful')
    "
    

    以下の点を確認してください:

    • object モードにフォールバックしている関数(パフォーマンスが低下)
    • 型推論の失敗
    • @njit 内での非対応 Python 機能
  4. ベクトル化されていないループを確認: ホットスポットファイルから、ベクトル化すべき配列に対する Python ループを検索します:

    grep -n "for.*in range" osmose/engine/processes/{focus}.py
    

    NumPy ブロードキャストで対応可能な配列要素の反復処理をフラグします。

  5. メモリ割り当てパターンを確認: ホットループ内の配列割り当てを探します:

    grep -n "np.zeros\|np.empty\|np.array" osmose/engine/processes/{focus}.py
    

    可能な限り、配列はループの外で事前割り当てしてください。

  6. ベースラインタイミングと比較:

    • ビスケー湾 5 年ベースライン: ~2.0s
    • EEC 5 年ベースライン: ~5.2s

    現在のタイミングがベースラインを >10% 超過する場合、性能低下としてフラグします。

  7. 結果をテーブルで報告します:

    順位関数実行時間 (s)総計比率問題
    1predation._compute_kernelX.XXXX%
    2movement._distributeX.XXXX%ベクトル化されていないループ
  8. 特定されたボトルネックに対する最適化を提案します:

    • Python ループ → NumPy ベクトル化
    • NumPy 操作 → Numba @njit
    • 繰り返される割り当て → 事前割り当てバッファ
    • object モード Numba → 型アノテーションの修正

ルール

  • .venv/bin/python を常に使用し、システム python は使用しません
  • /home/razinka/osmose/osmose-python/ から実行します
  • 初回 JIT コンパイルは遅い — 2 回実行して 2 回目(ウォーム)のタイミングを報告します
  • プロファイリング中にエンジンコードを変更しません — これは読み取り専用の分析です
  • 提案される最適化が適用された後、常に同等性を検証します
  • パフォーマンスベースライン: BoB 5 年 ~2.0s、EEC 5 年 ~5.2s(Python)、Java BoB ~2.3s、EEC ~7.2s

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
razinkele
リポジトリ
razinkele/osmopy
ライセンス
MIT
最終更新
2026/5/8

Source: https://github.com/razinkele/osmopy / ライセンス: MIT

本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: razinkele · razinkele/osmopy · ライセンス: MIT