-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathforge_accel_trace_example.cpp
More file actions
32 lines (27 loc) · 1.12 KB
/
Copy pathforge_accel_trace_example.cpp
File metadata and controls
32 lines (27 loc) · 1.12 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
#include <forge/accel.hpp>
#include <execution>
#include "example_support.hpp"
#include <iostream>
#include <vector>
int main() {
forge::accel::mock::trace_sink trace;
auto options = forge::accel::mock::context_options{};
options.trace = &trace;
forge::accel::mock::context ctx{options};
auto q = ctx.get_queue(forge::accel::queue_kind::compute);
int value = 0;
forge_example::require(std::execution::sync_wait(
forge::accel::mock::submit(q, [&] {
value = 42;
})).has_value());
auto events = trace.snapshot();
forge_example::require(events.size() == 3);
forge_example::require(events[0].kind == forge::accel::mock::trace_event_kind::submitted);
forge_example::require(events[1].kind == forge::accel::mock::trace_event_kind::started);
forge_example::require(events[2].kind == forge::accel::mock::trace_event_kind::completed);
forge_example::require(events[0].context.value != 0);
forge_example::require(events[0].stream.value != 0);
forge_example::require(value == 42);
std::cout << "command timeline events: " << events.size() << "\n";
return 0;
}