-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathGraphMlirMinSpanningTree.cpp
More file actions
79 lines (67 loc) · 2.56 KB
/
GraphMlirMinSpanningTree.cpp
File metadata and controls
79 lines (67 loc) · 2.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//===- GraphMlirMinSpanningTreeBenchmark.cpp
//----------------------------------===//
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//===----------------------------------------------------------------------===//
//
// This file implements the benchmark for GraphMLIR Minimum Spanning Tree.
//
//===----------------------------------------------------------------------===//
#include <Interface/GraphContainer.h>
#include <Interface/graph.h>
#include <benchmark/benchmark.h>
#include <Utility/Utils.h>
#define V 10
#define MAX_WEIGHT 1000
using namespace std;
namespace {
Graph<int, 2> g(graph::detail::GRAPH_ADJ_MATRIX_UNDIRECTED_WEIGHTED, V);
MemRef<int, 2> *input;
intptr_t size[1];
} // namespace
void initializeGraphMlirMinSpanningTree() {
graph::generateRandomGraphI(&g, V);
input = &g.get_Memref();
size[0] = V;
MemRef<int, 1> cost = MemRef<int, 1>(size, MAX_WEIGHT);
MemRef<int, 1> visited = MemRef<int, 1>(size, 0);
MemRef<int, 1> output = MemRef<int, 1>(size, -1);
}
// Benchmarking function.
static void GraphMlirMinSpanningTree(benchmark::State &state) {
for (auto _ : state) {
MemRef<int, 1> output = MemRef<int, 1>(size, -1);
MemRef<int, 1> visited = MemRef<int, 1>(size, 0);
MemRef<int, 1> cost = MemRef<int, 1>(size, MAX_WEIGHT);
for (int i = 0; i < state.range(0); ++i) {
graph::min_spanning_tree(input, &output, &visited, &cost);
}
}
}
// Register benchmarking function.
BENCHMARK(GraphMlirMinSpanningTree)->Arg(1);
void generateResultGraphMlirMinSpanningTree() {
initializeGraphMlirMinSpanningTree();
MemRef<int, 1> output(size, -1);
MemRef<int, 1> visited(size, 0);
MemRef<int, 1> cost(size, MAX_WEIGHT);
std::cout << "-------------------------------------------------------\n";
std::cout << "[ GraphMLIR Minimum Spanning Tree Result Information ]\n";
graph::min_spanning_tree(input, &output, &visited, &cost);
auto parent = output.getData();
for (int i = 0; i < V; i++) {
std::cout << "p[" << i << "] = " << parent[i] << ", ";
}
std::cout << "GraphMLIR Minimum Spanning Tree operation finished!\n";
}