xaiefal
Loading...
Searching...
No Matches
xaiefal-profile.hpp
Go to the documentation of this file.
1// Copyright(C) 2020 - 2021 by Xilinx, Inc. All rights reserved.
2// SPDX-License-Identifier: MIT
3
4#include <fstream>
5#include <functional>
6#include <vector>
7#include <xaiengine.h>
8#include <xaiefal/rsc/xaiefal-groupevent.hpp>
9#include <xaiefal/rsc/xaiefal-perf.hpp>
10
11#pragma once
12
13namespace xaiefal {
15 public:
16 XAieActiveCycles() = delete;
17 XAieActiveCycles(std::shared_ptr<XAieDevHandle> DevHd,
18 XAie_LocType Loc, bool CrossM = false):
19 XAiePerfCounter(DevHd, Loc, XAIE_CORE_MOD, CrossM) {
20 initialize(XAIE_CORE_MOD, XAIE_EVENT_ACTIVE_CORE,
21 XAIE_CORE_MOD, XAIE_EVENT_DISABLED_CORE);
22 }
24 XAie_LocType Loc, bool CrossM = false):
25 XAieActiveCycles(Dev.getDevHandle(), Loc, CrossM) {}
26 };
28 public:
29 XAieStallCycles() = delete;
30 XAieStallCycles(std::shared_ptr<XAieDevHandle> DevHd,
31 XAie_LocType Loc,
32 std::shared_ptr<XAieGroupEventHandle> StallG,
33 std::shared_ptr<XAieGroupEventHandle> FlowG,
34 bool CrossM = false):
35 XAiePerfCounter(DevHd, Loc, XAIE_CORE_MOD, CrossM),
36 StallGroupEvent(StallG),
37 FlowGroupEvent(FlowG) {
38 initialize(XAIE_CORE_MOD, XAIE_EVENT_GROUP_CORE_STALL_CORE,
39 XAIE_CORE_MOD, XAIE_EVENT_GROUP_CORE_PROGRAM_FLOW_CORE);
40 StallGroupEvent->setGroupEvents(0x19F);
41 }
43 XAie_LocType Loc,
44 bool CrossM = false):
45 XAiePerfCounter(Dev, Loc, XAIE_CORE_MOD, CrossM) {
46 initialize(XAIE_CORE_MOD, XAIE_EVENT_GROUP_CORE_STALL_CORE,
47 XAIE_CORE_MOD, XAIE_EVENT_GROUP_CORE_PROGRAM_FLOW_CORE);
48 StallGroupEvent = Dev.tile(Loc).module(XAIE_CORE_MOD).groupEvent(XAIE_EVENT_GROUP_CORE_STALL_CORE);
49 FlowGroupEvent = Dev.tile(Loc).module(XAIE_CORE_MOD).groupEvent(XAIE_EVENT_GROUP_CORE_PROGRAM_FLOW_CORE);
50 StallGroupEvent->setGroupEvents(0x19F);
51 }
52
60 AieRC stallGroupEventConfig(uint32_t Config) {
61 AieRC RC = XAIE_OK;
62
63 if (State.Reserved == 0) {
64 Logger::log(LogLevel::FAL_ERROR) << "StallCycles " << __func__ << " (" <<
65 (uint32_t)Loc.Col << "," << (uint32_t)Loc.Row << ")" <<
66 " Expect Mod= " << Mod <<
67 " resource not allocated." << std::endl;
68 RC = XAIE_ERR;
69 } else {
70 StallGroupEvent->setGroupEvents(Config);
71 }
72 return RC;
73 }
74
82 AieRC flowGroupEventConfig(uint32_t Config) {
83 AieRC RC = XAIE_OK;
84
85 if (State.Reserved == 0) {
86 Logger::log(LogLevel::FAL_ERROR) << "StallCycles " << __func__ << " (" <<
87 (uint32_t)Loc.Col << "," << (uint32_t)Loc.Row << ")" <<
88 " Expect Mod= " << Mod <<
89 " resource not allocated." << std::endl;
90 RC = XAIE_ERR;
91 } else {
92 FlowGroupEvent->setGroupEvents(Config);
93 }
94 return RC;
95 }
96 protected:
98 AieRC RC;
99
100 RC = StallGroupEvent->reserve();
101 if (RC == XAIE_OK) {
102 RC = FlowGroupEvent->reserve();
103 }
104 return RC;
105 }
107 AieRC RC;
108
109 RC = StallGroupEvent->release();
110 if (RC == XAIE_OK) {
111 RC = FlowGroupEvent->release();
112 }
113 return RC;
114 }
116 AieRC RC;
117
118 RC = StallGroupEvent->start();
119 if (RC == XAIE_OK) {
120 RC = FlowGroupEvent->start();
121 }
122 return RC;
123 }
124 AieRC _stopAppend() {
125 AieRC RC;
126
127 RC = StallGroupEvent->stop();
128 if (RC == XAIE_OK) {
129 RC = FlowGroupEvent->stop();
130 }
131 return RC;
132 }
133 private:
134 std::shared_ptr<XAieGroupEventHandle> StallGroupEvent;
135 std::shared_ptr<XAieGroupEventHandle> FlowGroupEvent;
136 };
137
143 public:
145 XAieStallOccurrences(std::shared_ptr<XAieDevHandle> DevHd,
146 XAie_LocType Loc,
147 std::shared_ptr<XAieGroupEventHandle> StallG,
148 bool CrossM = false):
149 XAiePerfCounter(DevHd, Loc, XAIE_CORE_MOD, CrossM),
150 StallGroupEvent(StallG) {
151 initialize(XAIE_CORE_MOD, XAIE_EVENT_GROUP_CORE_STALL_CORE,
152 XAIE_CORE_MOD, XAIE_EVENT_GROUP_CORE_STALL_CORE);
153 StallGroupEvent->setGroupEvents(0x19F);
154 }
156 XAie_LocType Loc,
157 bool CrossM = false):
158 XAiePerfCounter(Dev, Loc, XAIE_CORE_MOD, CrossM) {
159 initialize(XAIE_CORE_MOD, XAIE_EVENT_GROUP_CORE_STALL_CORE,
160 XAIE_CORE_MOD, XAIE_EVENT_GROUP_CORE_STALL_CORE);
161 StallGroupEvent = Dev.tile(Loc).module(XAIE_CORE_MOD).groupEvent(XAIE_EVENT_GROUP_CORE_STALL_CORE);
162 StallGroupEvent->setGroupEvents(0x19F);
163 }
164
172 AieRC stallGroupEventConfig(uint32_t Config) {
173 AieRC RC = XAIE_OK;
174
175 if (State.Reserved == 0) {
176 Logger::log(LogLevel::FAL_ERROR) << "StallCycles " << __func__ << " (" <<
177 (uint32_t)Loc.Col << "," << (uint32_t)Loc.Row << ")" <<
178 " Expect Mod= " << Mod <<
179 " resource not allocated." << std::endl;
180 RC = XAIE_ERR;
181 } else {
182 StallGroupEvent->setGroupEvents(Config);
183 }
184 return RC;
185 }
186 protected:
188 AieRC RC;
189
190 RC = StallGroupEvent->reserve();
191 return RC;
192 }
194 AieRC RC;
195
196 RC = StallGroupEvent->release();
197 return RC;
198 }
200 AieRC RC;
201
202 RC = StallGroupEvent->start();
203 return RC;
204 }
205 AieRC _stopAppend() {
206 AieRC RC;
207
208 RC = StallGroupEvent->stop();
209 return RC;
210 }
211 private:
212 std::shared_ptr<XAieGroupEventHandle> StallGroupEvent;
213 };
214}
static std::ostream & log(LogLevel Lvl=LogLevel::FAL_MAX)
Definition xaiefal-log.hpp:50
XAieActiveCycles(std::shared_ptr< XAieDevHandle > DevHd, XAie_LocType Loc, bool CrossM=false)
Definition xaiefal-profile.hpp:17
XAieActiveCycles(XAieDev &Dev, XAie_LocType Loc, bool CrossM=false)
Definition xaiefal-profile.hpp:23
AI engine device class. It defines AI engine device operations.
Definition xaiefal-base.hpp:259
XAieTile & tile(XAie_LocType Loc)
Definition xaiefal-base.hpp:272
AieRC initialize(XAie_ModuleType StartM, XAie_Events StartE, XAie_ModuleType StopM, XAie_Events StopE, XAie_ModuleType RstM=XAIE_CORE_MOD, XAie_Events RstE=XAIE_EVENT_NONE_CORE)
Definition xaiefal-perf.hpp:77
XAieRscState State
Definition xaiefal-rsc-base.hpp:398
XAie_LocType Loc
Definition xaiefal-rsc-base.hpp:594
XAie_ModuleType Mod
Definition xaiefal-rsc-base.hpp:595
AieRC _reserveAppend()
Definition xaiefal-profile.hpp:97
XAieStallCycles(std::shared_ptr< XAieDevHandle > DevHd, XAie_LocType Loc, std::shared_ptr< XAieGroupEventHandle > StallG, std::shared_ptr< XAieGroupEventHandle > FlowG, bool CrossM=false)
Definition xaiefal-profile.hpp:30
AieRC stallGroupEventConfig(uint32_t Config)
Definition xaiefal-profile.hpp:60
AieRC _stopAppend()
Definition xaiefal-profile.hpp:124
AieRC _releaseAppend()
Definition xaiefal-profile.hpp:106
AieRC _startPrepend()
Definition xaiefal-profile.hpp:115
AieRC flowGroupEventConfig(uint32_t Config)
Definition xaiefal-profile.hpp:82
XAieStallCycles(XAieDev &Dev, XAie_LocType Loc, bool CrossM=false)
Definition xaiefal-profile.hpp:42
AieRC _releaseAppend()
Definition xaiefal-profile.hpp:193
AieRC _reserveAppend()
Definition xaiefal-profile.hpp:187
AieRC stallGroupEventConfig(uint32_t Config)
Definition xaiefal-profile.hpp:172
XAieStallOccurrences(XAieDev &Dev, XAie_LocType Loc, bool CrossM=false)
Definition xaiefal-profile.hpp:155
AieRC _stopAppend()
Definition xaiefal-profile.hpp:205
XAieStallOccurrences(std::shared_ptr< XAieDevHandle > DevHd, XAie_LocType Loc, std::shared_ptr< XAieGroupEventHandle > StallG, bool CrossM=false)
Definition xaiefal-profile.hpp:145
AieRC _startPrepend()
Definition xaiefal-profile.hpp:199
Definition xaiefal-base.hpp:23
@ FAL_ERROR
Definition xaiefal-log.hpp:14