Heim >Backend-Entwicklung >C++ >Wie kann man die Leistung von C++-Funktionen bewerten?

Wie kann man die Leistung von C++-Funktionen bewerten?

王林
王林Original
2024-04-19 09:00:02799Durchsuche

Um eine C++-Funktion zu vergleichen, führen Sie die folgenden Schritte aus: Verwenden Sie ein Timing-Tool wie die std::chrono-Bibliothek, um die Ausführungszeit zu messen. Schreiben Sie eine Benchmark-Funktion, die Code ausführt und die Ausführungszeit zurückgibt. Nutzen Sie die Benchmark-Bibliothek für erweiterte Funktionen wie die Erfassung und den Vergleich von Statistiken.

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

So Benchmarking der C++-Funktionsleistung

Benchmarking ist eine wichtige Technik zum Messen der Codeleistung und zum Vergleichen verschiedener Implementierungen. In C++ können wir die Funktionsleistung mit den folgenden Methoden bewerten:

1. Verwendung von Timing-Tools

C++ stellt die Bibliothek std::chrono bereit, die Tools zur Zeitmessung enthält. Wir können std::chrono::high_resolution_clock verwenden, um ein hochpräzises Timing zu erhalten: 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();

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();
}

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;
}

🎜2. Schreiben Sie eine Benchmark-Funktion 🎜🎜🎜Schreiben Sie eine Funktion, um den zu testenden Code auszuführen und zurückzugeben Ausführungszeit: 🎜 rrreee🎜🎜3. Benchmarking-Bibliotheken verwenden🎜🎜🎜 Es stehen auch verschiedene C++-Benchmarking-Bibliotheken zur Verfügung, die erweiterte Funktionen wie die Erfassung und den Vergleich von Statistiken bieten. Hier sind einige beliebte Bibliotheken: 🎜
  • [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)
🎜🎜Praktischer Fall: 🎜🎜🎜Angenommen, wir möchten eine Funktion testen, die Elemente in einem bestimmten Array findet find_element():🎜rrreee

Das obige ist der detaillierte Inhalt vonWie kann man die Leistung von C++-Funktionen bewerten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn