私は同じことをする2つの異なる方法を書いています。どちらが速く実行されるかを比較したいと思います。もちろん、ベンチマークは常に可能ですが、プログラムのベンチマークはマシンごとに異なる可能性があり、多くの外部要因の影響を受ける可能性があります。どのようにベンチマーキングなしでより速く計算することができますか?私の考えは、あなたがプログラムで行われたすべての作業の時間を合計するということです。これは標準的なことですか?あなたがベンチマークしたときに、エラーの余地がたくさんあるようです。プログラムの理論速度を計算しますか?
答えて
私の考えは、プログラムで行われたすべての操作の時間を合計することです。
はい、ベンチマーク以外の方法では、これらの時間を簡単に/確実に把握することはできません。
これらの時間は、以前にプログラムで(またはシステム全体で)発生したことの動的コンテキストに依存するという問題があります。 CPUは複雑なビーストであり、キャッシュ効果(データキャッシュと命令キャッシュ)が主な要因になることがよくあります。分岐予測もそうです。 Why is it faster to process a sorted array than an unsorted array?
アセンブリ言語での小さなループの静的解析が可能です。例えばAgner Fog's microarchictecture pdf and instruction tablesに基づいて、キャッシュミスがないと仮定して、単純なループがインテルハスウェルで実行できる繰り返し回数を正確に予測できます。それを越えて、ますます推測が増えていきます。
Rubyのような高レベルのインタプリタ言語でのパフォーマンスは、コードのチューニングに多くの時間を費やしている専門家にとっては多分予測可能かもしれませんが、「これはこのマイクロ秒数がかかる」ということはほとんどありません。それより少し速い」
アルゴリズムの複雑さは、アルゴリズムの理論的な速度比較を提供します。
あなたの質問は任意のプログラムについてですが、プログラムはアルゴリズムの集合以上のものです。
プログラムの実行速度は、実行しているコンテキスト(I/O、オペレーティングシステム(マルチタスクまたはハードウェア)、ハードウェア)によって異なります。
したがって、ベンチマークの定義である測定の束に統計情報以外の方法はありません。
- 1. 計算論理フォントサイズ
- 2. ウェブサイトの速度を計算します。
- 3. 速度計算アルゴリズム
- 4. 速度を計算する
- 5. Android加速度計の角度計算
- 6. 加速度計を使って速度を計算する
- 7. オンフリンジイベントの速度の計算
- 8. リアルタイムビデオ処理を使用して速度を計算する
- 9. スプリント速度の計算
- 10. 計算平均速度
- 11. メジアンデータフローの速度を計算しますか?
- 12. ダウンロード/アップロードの速度を計算する
- 13. Windows Phoneの速度を計算する
- 14. AJAXのダウンロード速度を計算する
- 15. 10GBASE-Tの速度を計算する
- 16. 論理エラー計算の実行平均
- 17. アンドロイドでインターネット速度を計算する
- 18. 速度から角度の方向を計算する
- 19. アンドロイドスタジオストアの速度と距離を計算
- 20. 速度から加速ピークを計算する
- 21. 文脈自由文法 - 計算理論
- 22. チョムスキー標準形 - 計算理論
- 23. スワイプのタイムスタンプと計算速度
- 24. 沈降アペアの計算速度
- 25. 加速度計からの距離の計算方法
- 26. アクセスされた加速度計の読み値が論理でない
- 27. Coqの定理の高速計算
- 28. 計算理論がDFAを設計できない
- 29. ブール値の論理値に対して論理演算を実行します。
- 30. 角度に基づいて加速度を計算する
[アルゴリズムの複雑さ](https://en.wikipedia.org/wiki/Analysis_of_algorithms)の調査です。 – Phylogenesis
これは、それぞれの操作がどのように解釈されるか、どのオブジェクトが作成されるかといった深い知識が必要なので、これはRubyプログラムにとっては非常に難しいと思います。私は多くの反復でベンチマークを行うのが最善の方法だと思います。 – Albin
また、ベンチマークが標準ですね。 – thesecretmaster