15
15
#include < vector>
16
16
17
17
namespace uur {
18
+ namespace detail {
19
+ struct AdapterInfo {
20
+ uint32_t version;
21
+ ur_adapter_backend_t backend;
22
+ };
23
+
24
+ inline AdapterInfo getAdapterInfo (ur_adapter_handle_t adapter) {
25
+ AdapterInfo info;
26
+ urAdapterGetInfo (adapter, UR_ADAPTER_INFO_VERSION, sizeof (info.version ),
27
+ &info.version , nullptr );
28
+ urAdapterGetInfo (adapter, UR_ADAPTER_INFO_BACKEND, sizeof (info.backend ),
29
+ &info.backend , nullptr );
30
+ return info;
31
+ }
32
+ } // namespace detail
33
+
18
34
struct Matcher {
19
35
Matcher (uint32_t adapterVersion, ur_adapter_backend_t backend,
20
36
std::vector<std::string> deviceNames)
21
37
: adapterVersion(adapterVersion), backend(backend),
22
38
names (std::move(deviceNames)) {}
23
39
40
+ bool matches (const detail::AdapterInfo &adapterInfo,
41
+ const std::string &name) const {
42
+ if (backend != adapterInfo.backend ) {
43
+ return false ;
44
+ }
45
+ if (adapterVersion != adapterInfo.version ) {
46
+ return false ;
47
+ }
48
+ if (names.empty ()) {
49
+ return true ;
50
+ }
51
+ for (const auto &matcherName : names) {
52
+ if (name.find (matcherName) != std::string::npos) {
53
+ return true ;
54
+ }
55
+ }
56
+ return false ;
57
+ }
58
+
24
59
uint32_t adapterVersion;
25
60
ur_adapter_backend_t backend;
26
61
std::vector<std::string> names;
@@ -56,26 +91,10 @@ struct NativeCPU : Matcher {
56
91
: Matcher(1 , UR_ADAPTER_BACKEND_NATIVE_CPU, {il.begin (), il.end ()}) {}
57
92
};
58
93
59
- namespace detail {
60
- struct AdapterInfo {
61
- uint32_t version;
62
- ur_adapter_backend_t backend;
63
- };
64
-
65
- inline AdapterInfo getAdapterInfo (ur_adapter_handle_t adapter) {
66
- AdapterInfo info;
67
- urAdapterGetInfo (adapter, UR_ADAPTER_INFO_VERSION, sizeof (info.version ),
68
- &info.version , nullptr );
69
- urAdapterGetInfo (adapter, UR_ADAPTER_INFO_BACKEND, sizeof (info.backend ),
70
- &info.backend , nullptr );
71
- return info;
72
- }
73
- } // namespace detail
74
-
75
94
inline bool isKnownFailureOn (ur_adapter_handle_t adapter,
76
95
const std::vector<Matcher> &matchers) {
96
+ auto adapterInfo = detail::getAdapterInfo (adapter);
77
97
for (const auto &matcher : matchers) {
78
- auto adapterInfo = detail::getAdapterInfo (adapter);
79
98
if (matcher.adapterVersion == adapterInfo.version &&
80
99
matcher.backend == adapterInfo.backend ) {
81
100
return true ;
@@ -89,22 +108,13 @@ inline bool isKnownFailureOn(ur_platform_handle_t platform,
89
108
ur_adapter_handle_t adapter = nullptr ;
90
109
urPlatformGetInfo (platform, UR_PLATFORM_INFO_ADAPTER,
91
110
sizeof (ur_adapter_handle_t ), &adapter, nullptr );
111
+ auto adapterInfo = detail::getAdapterInfo (adapter);
112
+ std::string name;
113
+ uur::GetPlatformInfo<std::string>(platform, UR_PLATFORM_INFO_NAME, name);
92
114
for (const auto &matcher : matchers) {
93
- auto adapterInfo = detail::getAdapterInfo (adapter);
94
- if (matcher.adapterVersion != adapterInfo.version &&
95
- matcher.backend != adapterInfo.backend ) {
96
- continue ;
97
- }
98
- if (matcher.names .empty ()) {
115
+ if (matcher.matches (adapterInfo, name)) {
99
116
return true ;
100
117
}
101
- std::string name;
102
- uur::GetPlatformInfo<std::string>(platform, UR_PLATFORM_INFO_NAME, name);
103
- for (const auto &matcherName : matcher.names ) {
104
- if (name.find (matcherName) != std::string::npos) {
105
- return true ;
106
- }
107
- }
108
118
}
109
119
return false ;
110
120
}
@@ -119,24 +129,13 @@ isKnownFailureOn(const std::tuple<ur_platform_handle_t, Param> ¶m,
119
129
120
130
inline bool isKnownFailureOn (const DeviceTuple ¶m,
121
131
const std::vector<Matcher> &matchers) {
132
+ auto adapterInfo = detail::getAdapterInfo (param.adapter );
133
+ std::string name;
134
+ uur::GetDeviceInfo<std::string>(param.device , UR_DEVICE_INFO_NAME, name);
122
135
for (const auto &matcher : matchers) {
123
- auto adapterInfo = detail::getAdapterInfo (param.adapter );
124
- if (matcher.backend != adapterInfo.backend ) {
125
- continue ;
126
- }
127
- if (matcher.adapterVersion != adapterInfo.version ) {
128
- continue ;
129
- }
130
- if (matcher.names .empty ()) {
136
+ if (matcher.matches (adapterInfo, name)) {
131
137
return true ;
132
138
}
133
- std::string name;
134
- uur::GetDeviceInfo<std::string>(param.device , UR_DEVICE_INFO_NAME, name);
135
- for (const auto &matcherName : matcher.names ) {
136
- if (name.find (matcherName) != std::string::npos) {
137
- return true ;
138
- }
139
- }
140
139
}
141
140
return false ;
142
141
}
0 commit comments