Maison > développement back-end > C++ > le corps du texte

Comment comparer les performances des fonctions C++ ?

王林
Libérer: 2024-04-19 09:00:02
original
770 Les gens l'ont consulté

Pour évaluer une fonction C++, suivez les étapes suivantes : Utilisez un outil de timing tel que la bibliothèque std::chrono pour mesurer le temps d'exécution. Écrivez une fonction de référence qui exécute du code et renvoie le temps d'exécution. Tirez parti de la bibliothèque de référence pour des fonctionnalités avancées telles que la collecte et la comparaison de statistiques.

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

Comment évaluer les performances des fonctions C++

Le benchmarking est une technique importante pour mesurer les performances du code et comparer différentes implémentations. En C++, nous pouvons évaluer les performances des fonctions grâce aux méthodes suivantes :

1. Utilisation d'outils de chronométrage

C++ fournit la bibliothèque std::chrono, qui contient des outils de mesure du temps. Nous pouvons utiliser std::chrono::high_resolution_clock pour obtenir un timing de haute précision : std::chrono 库,其中包含用于衡量时间的类。我们可以使用 std::chrono::high_resolution_clock 获取高精度计时:

#include <chrono>

using namespace std::chrono;

auto start = high_resolution_clock::now();
// 待测试代码
auto end = high_resolution_clock::now();
Copier après la connexion

2. 编写基准测试函数

编写一个函数来执行要测试的代码并返回执行时间:

#include <chrono>

using namespace std::chrono;

double benchmark(int n) {
  auto start = high_resolution_clock::now();
  // 待测试代码
  auto end = high_resolution_clock::now();
  return duration_cast<duration<double>>(end - start).count();
}
Copier après la connexion

3. 使用基准测试库

还有各种 C++ 基准测试库可供使用,它们提供更高级的功能,如统计收集和比较。以下是一些流行的库:

  • [benchmark](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 <chrono>
#include <vector>

using namespace std::chrono;

double find_element_benchmark(size_t n) {
  // 生成一个包含 n 个元素的数组
  std::vector<int> 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<duration<double>>(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;
}
Copier après la connexion
🎜2 Écrivez une fonction de référence 🎜🎜🎜Écrivez une fonction pour exécuter le code à tester et renvoyer le. temps d'exécution : 🎜 rrreee🎜🎜3. Utilisez des bibliothèques d'analyse comparative🎜🎜🎜 Il existe également diverses bibliothèques d'analyse comparative C++ qui offrent des fonctionnalités plus avancées telles que la collecte et la comparaison de statistiques. Voici quelques bibliothèques populaires : 🎜
  • [benchmark](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)
🎜🎜Cas pratique : 🎜🎜🎜Supposons que nous voulions comparer une fonction qui trouve des éléments dans un tableau donné find_element():🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal