Javaでシングルスレッドの複雑なアルゴリズムを測定するための最良のマクロベンチマークツール/フレームワークは何ですか?

DaveFar:

シングルスレッドのローカルな複雑なアルゴリズムであるJavaコードのパフォーマンス測定(主にランタイム)を行いたい。(したがって、JVM実装を測定するマクロベンチマークは必要ありません。)

ツールで、私はしたいです

  • 複雑さを分析します。つまり、パラメーターn(検索深度)に対する私のコードのスケーリングを確認します。(nでパラメーター化されたjunitテストがすでにあります。)
  • コードベースに変更を加えるとコードが遅くなる場合に警告するために、いくつかの傾向分析を行います。

このために、私はツールまたはフレームワークを使用したいと思います

  • ない統計情報を最適に平均値、標準偏差及び信頼区間を計算し、。これは非常に重要です。
  • パラメータ化できます(上記のパラメータnを参照)。これも非常に重要です。
  • 派手なプロットを作成できればいいのですが、必須ではありません
  • 自動(junit-)テストで使用して、プログラムの処理速度が低下した場合に警告することができますが、これも必須ではなく、プラスです。

どのようなツール/フレームワークがこれらの要件を満たしていますか?どれが複雑さと傾向分析に適しているでしょうか、そしてなぜですか?

DaveFar:

以下は、私が見つけたすべてのツールのアルファベット順のリストです。言及されている側面は次のとおりです。

  • 簡単にパラメータ化できますか
  • それはJavaライブラリですか、少なくともJavaプログラムに簡単に統合できますか
  • JVMマイクロベンチマークを処理できますか(ウォームアップフェーズを使用するなど)
  • 結果を視覚的にプロットできますか
  • 測定値を永続的に保存できますか
  • 新しいコミットがスローダウンを引き起こしたことを警告する傾向分析を行うことができますか
  • 統計を提供および使用しますか(少なくとも最大、最小、平均、標準偏差)。

自動操縦

パラメータ化可能; Perlライブラリ; JVMマイクロベンチマークなし。プロット; 持続; トレンド分析!?; 優れた統計(結果が安定するまで特定のテストを実行し、外れ値をハイライトします)。

ベンチマークフレームワーク

パラメータ化できません。Javaライブラリ; JVMマイクロベンチマーク。プロットなし; 持続性はありません。傾向分析なし。統計学。

統計は非常にうまく機能します。平均、最大、最小、標準偏差に加えて、95%信頼区間(ブートストラップによる)とシリアル相関(たとえば、プログラムが非決定的に動作する場合に発生する可能性がある発振実行時間について警告するため)も計算します。 HashSetsを使用するためです)。正確な測定値を取得するためにプログラムを反復する必要がある頻度を決定し、レポートと警告(たとえば、外れ値とシリアル相関について)のためにこれらを解釈します。

また、マイクロベンチマークは非常にうまく機能します(詳細については、Javaを使用した迅速で信頼性の高いベンチマークの作成を参照してください)。

残念ながら、フレームワークは、他の多くのヘルパークラスと一緒にバンドルされたutilパッケージに含まれています。ベンチマーククラスはJSci(JavaのサイエンスAPI)とMersenne Twister(http://www.cs.gmu.edu/~sean/research/)に依存しています著者のBrent Boyerが時間を見つけた場合、ライブラリを要約し、より単純なグラファーを追加して、ユーザーが視覚的に測定値を相関関係や外れ値などを調べられるようにします。

キャリパー

パラメータ化可能; Javaライブラリ; JVMマイクロベンチマーク。プロット; 持続; 傾向分析なし。統計学。

Androidアプリ向けに調整された比較的新しいプロジェクト。若く見えますが有望です。Google Guavaに依存:(

コモンズモニタリング

パラメータ化できません!?; Javaライブラリ; JVMマイクロベンチマークなし!?; プロット; サーブレットによる永続性。傾向分析なし!?; 統計なし!?

AOPインスツルメンテーションをサポートします。

ジャモン

パラメータ化できません。Javaライブラリ; JVMマイクロベンチマークなし。追加のツール(JarepまたはJMX)によるプロット、持続性、トレンド分析。統計学。

log4jと絡み合った適切な監視により、プログラムでデータにアクセスしたりクエリしたりすることもでき、プログラムは結果に対してアクションを実行できます。

Javaサイモン

パラメータ化できません!?; Javaライブラリ; JVMマイクロベンチマークなし。Jarepでのみプロットします。JMXのみでの永続性。傾向分析なし。統計なし!?

Jamonのライバルは、モニターの階層をサポートします。

JETM

パラメータ化できません。Javaライブラリ; JVMマイクロベンチマーク。プロット; 持続; 傾向分析なし。統計なし。

素敵な軽量の監視ツール、依存関係なし:)十分な統計(標準偏差なし)を提供せず、それに応じてプラグインを拡張することは非常に困難に見えます(アグリゲーターとアグリゲートには、最小、最大、平均の固定ゲッターしかありません)。

jmeter

パラメータ化可能!?; Javaライブラリ; JVMマイクロベンチマークなし!?; プロット; 持続; トレンド分析!?; 統計学!?。

Webアプリケーションの負荷テストに合わせて調整された優れた監視ライブラリ。

Java Microbenchmarkハーネス(jmh

パラメータ化可能(Java APIを介したカスタム呼び出し元); Javaライブラリ; JVMマイクロベンチマーク; プロットなし。持続性はありません。傾向分析なし。統計学。

OracleのHotSpotエキスパートによって構築されたベンチマークハーネスは、OpenJDKパフォーマンス作業で使用されるHotSpotでのマイクロベンチマークに非常に適しています。信頼できるベンチマーク環境を提供するために、極端な対策が講じられています。人間が読める出力に加えて、jmhは、結果を処理するためのJava APIを提供します(サードパーティのプロッタや永続化プロバイダなど)。

junit-Benchmarks

パラメータ化可能; Javaライブラリ; JVMマイクロベンチマーク。プロット; 永続性(CONSOLE、XML、またはデータベースH2を使用); グラフィカルな傾向分析; 統計(最大値、最小値、平均値、標準偏差。ただし、詳細な統計情報を簡単に拡張することはできません)。

junitテストにjunit-4-ruleを追加するだけです:)

junit-Benchmarksはオープンソースであり、Apache 2ライセンスに基づいています。

更新:プロジェクトを移動しましたjmh

junitperf

主に、パフォーマンス(JUnitテストデコレータを使用TimedTest)とスケーラビリティ(JUnitテストデコレータを使用)の傾向分析を行うためのものLoadTestです。

パラメータ化可能; Javaライブラリ; JVMマイクロベンチマークなし。プロットなし; 持続性はありません。統計なし。

perf4j

パラメータ化できません。Javaライブラリ; JVMマイクロベンチマークなし。プロット; JMXによる永続性。log4jアペンダーによるトレンド分析。統計学。

ロギングフレームワーク上に構築され、AOPを使用できます。

プロジェクトブロードウェイ

非常に一般的な概念:モニターは事前定義された条件を監視し、条件が満たされた場合の対応方法を指定します。

スピーディmcbenchmark

主な焦点はパラメータ化可能性です:アルゴリズムがスケーリングするかどうかを確認します。つまり、アルゴリズムがO(n)、O(n log(n))、O(n²)であるかどうかを確認します...

Javaライブラリ; JVMマイクロベンチマーク。プロットなし; 持続; トレンド分析; 統計なし。

グラインダー

パラメータ化可能; Jythonライブラリ。JVMマイクロベンチマークなし。プロット; 持続; 傾向分析なし。良い統計はありませんが、簡単に拡張できます。

Jython、HTTPClient、JEditSyntax、ApacheXMLBeans、PicoContainerに依存します。

TPTP

パラメータ化可能!?; Javaツールプラットフォーム。JVMマイクロベンチマークなし!?; プロット; 持続; グラフィカルな傾向分析; 統計なし!?

Test&Performance Tools Platformは、(Eclipseと4つのEMFモデルに基づく)汎用で拡張可能な巨大なツールプラットフォームです。したがって、強力ですが非常に複雑で、Eclipseの速度が低下する可能性があり、独自のニーズに合わせて(たとえば、統計を使用して反復回数に影響を与えるように)拡張することは非常に難しいようです。

Usemon

パラメータ化可能!?; Javaライブラリ; JVMマイクロベンチマークなし。プロット; 持続; トレンド分析!?; 統計学!?。

このツールは、大規模なクラスターでの監視に合わせて調整されています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ