C++ 関数のパフォーマンスをベンチマークするにはどうすればよいですか?

王林
リリース: 2024-04-19 09:00:02
オリジナル
619 人が閲覧しました

C 関数のベンチマークを実行するには、次の手順を実行できます。 タイミング ツール (std::chrono ライブラリなど) を使用して、実行時間を測定します。コードを実行し、実行時間を返すベンチマーク関数を作成します。統計の収集や比較などの高度な機能のためにベンチマーク ライブラリを活用します。

如何对 C++ 函数性能进行基准测试?

#C 関数のパフォーマンスをベンチマークする方法

ベンチマークは、コードのパフォーマンスを測定し、さまざまな実装を比較するための重要な手法です。 C では、次の方法で関数のパフォーマンスをベンチマークできます:

1. タイミング ツールの使用

C は

std::chrono を含むライブラリを提供します。時間を測る授業。 std::chrono::high_resolution_ Clock を使用して高精度のタイミングを取得できます:

#include 

using namespace std::chrono;

auto start = high_resolution_clock::now();
// 待测试代码
auto end = high_resolution_clock::now();
ログイン後にコピー

2 ベンチマーク関数を作成します。テストするコードを実行し、実行時間を返す関数:

#include 

using namespace std::chrono;

double benchmark(int n) {
  auto start = high_resolution_clock::now();
  // 待测试代码
  auto end = high_resolution_clock::now();
  return duration_cast>(end - start).count();
}
ログイン後にコピー

3. ベンチマーク ライブラリの使用

より多くの機能を提供するさまざまな C ベンチマーク ライブラリもあります。統計の収集や比較などの高度な機能。以下に、人気のあるライブラリをいくつか示します。

[ベンチマーク](https://github.com/google/benchmark)

[boost::benchmark](https://www . boost.org/doc/libs/1_65_1/libs/benchmark/doc/html/index.html)
  • [google-benchmark](https://github.com/google/benchmark)
  • [Catch2](https://github.com/catchorg/Catch2)
  • 実践的なケース:

検索関数のベンチマークを行いたいとします。 find_element():

#include 
#include 

using namespace std::chrono;

double find_element_benchmark(size_t n) {
  // 生成一个包含 n 个元素的数组
  std::vector arr(n, 0);
  
  // 查找一个不存在的元素
  auto start = high_resolution_clock::now();
  auto pos = std::find(arr.begin(), arr.end(), -1);
  auto end = high_resolution_clock::now();
  if (pos != arr.end()) return -1;  // 仅在元素找到时返回 -1

  return duration_cast>(end - start).count();
}

int main() {
  // 多次测试不同数组大小
  for (size_t n = 1000; n <= 1000000; n *= 10) {
    // 运行基准测试
    double time = find_element_benchmark(n);
    
    // 打印结果
    std::cout << "数组大小: " << n << "\t执行时间: " << time << " 秒" << std::endl;
  }

  return 0;
}
ログイン後にコピー
配列内の要素を指定する

以上がC++ 関数のパフォーマンスをベンチマークするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!