[clang-tools-extra] db2a646 - [clangd] Add bencmark for measuring latency of DecisionForest model.
Utkarsh Saxena via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 2 09:04:46 PDT 2020
Author: Utkarsh Saxena
Date: 2020-10-02T18:04:31+02:00
New Revision: db2a646c5f002cc16d02d6fac0b2d715cdd4a809
URL: https://github.com/llvm/llvm-project/commit/db2a646c5f002cc16d02d6fac0b2d715cdd4a809
DIFF: https://github.com/llvm/llvm-project/commit/db2a646c5f002cc16d02d6fac0b2d715cdd4a809.diff
LOG: [clangd] Add bencmark for measuring latency of DecisionForest model.
Differential Revision: https://reviews.llvm.org/D88590
Added:
clang-tools-extra/clangd/benchmarks/CompletionModel/CMakeLists.txt
clang-tools-extra/clangd/benchmarks/CompletionModel/DecisionForestBenchmark.cpp
Modified:
clang-tools-extra/clangd/benchmarks/CMakeLists.txt
Removed:
################################################################################
diff --git a/clang-tools-extra/clangd/benchmarks/CMakeLists.txt b/clang-tools-extra/clangd/benchmarks/CMakeLists.txt
index 1f3d88b42bce..b62ffd7a1ad1 100644
--- a/clang-tools-extra/clangd/benchmarks/CMakeLists.txt
+++ b/clang-tools-extra/clangd/benchmarks/CMakeLists.txt
@@ -1,5 +1,7 @@
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../)
+add_subdirectory(CompletionModel)
+
add_benchmark(IndexBenchmark IndexBenchmark.cpp)
target_link_libraries(IndexBenchmark
diff --git a/clang-tools-extra/clangd/benchmarks/CompletionModel/CMakeLists.txt b/clang-tools-extra/clangd/benchmarks/CompletionModel/CMakeLists.txt
new file mode 100644
index 000000000000..3998aa122533
--- /dev/null
+++ b/clang-tools-extra/clangd/benchmarks/CompletionModel/CMakeLists.txt
@@ -0,0 +1,9 @@
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../)
+
+add_benchmark(DecisionForestBenchmark DecisionForestBenchmark.cpp)
+
+target_link_libraries(DecisionForestBenchmark
+ PRIVATE
+ clangDaemon
+ LLVMSupport
+ )
diff --git a/clang-tools-extra/clangd/benchmarks/CompletionModel/DecisionForestBenchmark.cpp b/clang-tools-extra/clangd/benchmarks/CompletionModel/DecisionForestBenchmark.cpp
new file mode 100644
index 000000000000..69ce65e08b77
--- /dev/null
+++ b/clang-tools-extra/clangd/benchmarks/CompletionModel/DecisionForestBenchmark.cpp
@@ -0,0 +1,85 @@
+//===--- DecisionForestBenchmark.cpp ------------*- C++ -*-===//
+//
+// Benchmark for code completion ranking latency.
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+// Usage:
+// ninja DecisionForestBenchmark && \
+// tools/clang/tools/extra/clangd/benchmarks/CompletionModel/DecisionForestBenchmark
+//===----------------------------------------------------------------------===//
+
+#include "CompletionModel.h"
+#include "benchmark/benchmark.h"
+#include "llvm/ADT/StringRef.h"
+
+#include <random>
+
+namespace clang {
+namespace clangd {
+namespace {
+std::vector<Example> generateRandomDataset(int NumExamples) {
+ auto FlipCoin = [&](float Probability) {
+ return rand() % 1000 <= Probability * 1000;
+ };
+ auto RandInt = [&](int Max) { return rand() % Max; };
+ auto RandFloat = [&](float Max = 1.0) {
+ return rand() % 1000 / 1000.0 * Max;
+ };
+
+ std::vector<Example> Examples;
+ Examples.reserve(NumExamples);
+ for (int I = 0; I < NumExamples; ++I) {
+ Example E;
+ E.setIsDeprecated(FlipCoin(0.1)); // Boolean.
+ E.setIsReservedName(FlipCoin(0.1)); // Boolean.
+ E.setIsImplementationDetail(FlipCoin(0.3)); // Boolean.
+ E.setNumReferences(RandInt(10000)); // Can be large integer.
+ E.setSymbolCategory(RandInt(10)); // 10 Symbol Category.
+
+ E.setIsNameInContext(FlipCoin(0.5)); // Boolean.
+ E.setIsForbidden(FlipCoin(0.1)); // Boolean.
+ E.setIsInBaseClass(FlipCoin(0.3)); // Boolean.
+ E.setFileProximityDistance(
+ FlipCoin(0.1) ? 999999 // Sometimes file distance is not available.
+ : RandInt(20));
+ E.setSemaFileProximityScore(RandFloat(1)); // Float in range [0,1].
+ E.setSymbolScopeDistance(
+ FlipCoin(0.1) ? 999999 // Sometimes scope distance is not available.
+ : RandInt(20));
+ E.setSemaSaysInScope(FlipCoin(0.5)); // Boolean.
+ E.setScope(RandInt(4)); // 4 Scopes.
+ E.setContextKind(RandInt(32)); // 32 Context kinds.
+ E.setIsInstanceMember(FlipCoin(0.5)); // Boolean.
+ E.setHadContextType(FlipCoin(0.6)); // Boolean.
+ E.setHadSymbolType(FlipCoin(0.6)); // Boolean.
+ E.setTypeMatchesPreferred(FlipCoin(0.5)); // Boolean.
+ E.setFilterLength(RandInt(15));
+ Examples.push_back(E);
+ }
+ return Examples;
+}
+
+void runDecisionForestPrediciton(const std::vector<Example> Examples) {
+ for (const Example &E : Examples)
+ Evaluate(E);
+}
+
+static void decisionForestPredict(benchmark::State &State) {
+ srand(0);
+ for (auto _ : State) {
+ State.PauseTiming();
+ const std::vector<Example> Examples = generateRandomDataset(1000000);
+ State.ResumeTiming();
+ runDecisionForestPrediciton(Examples);
+ }
+}
+BENCHMARK(decisionForestPredict);
+
+} // namespace
+} // namespace clangd
+} // namespace clang
+
+BENCHMARK_MAIN();
More information about the cfe-commits
mailing list