1515#include < vector>
1616
1717namespace 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+
1834struct Matcher {
1935 Matcher (uint32_t adapterVersion, ur_adapter_backend_t backend,
2036 std::vector<std::string> deviceNames)
2137 : adapterVersion(adapterVersion), backend(backend),
2238 names (std::move(deviceNames)) {}
2339
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+
2459 uint32_t adapterVersion;
2560 ur_adapter_backend_t backend;
2661 std::vector<std::string> names;
@@ -56,26 +91,10 @@ struct NativeCPU : Matcher {
5691 : Matcher(1 , UR_ADAPTER_BACKEND_NATIVE_CPU, {il.begin (), il.end ()}) {}
5792};
5893
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-
7594inline bool isKnownFailureOn (ur_adapter_handle_t adapter,
7695 const std::vector<Matcher> &matchers) {
96+ auto adapterInfo = detail::getAdapterInfo (adapter);
7797 for (const auto &matcher : matchers) {
78- auto adapterInfo = detail::getAdapterInfo (adapter);
7998 if (matcher.adapterVersion == adapterInfo.version &&
8099 matcher.backend == adapterInfo.backend ) {
81100 return true ;
@@ -89,22 +108,13 @@ inline bool isKnownFailureOn(ur_platform_handle_t platform,
89108 ur_adapter_handle_t adapter = nullptr ;
90109 urPlatformGetInfo (platform, UR_PLATFORM_INFO_ADAPTER,
91110 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);
92114 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)) {
99116 return true ;
100117 }
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- }
108118 }
109119 return false ;
110120}
@@ -119,24 +129,13 @@ isKnownFailureOn(const std::tuple<ur_platform_handle_t, Param> ¶m,
119129
120130inline bool isKnownFailureOn (const DeviceTuple ¶m,
121131 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);
122135 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)) {
131137 return true ;
132138 }
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- }
140139 }
141140 return false ;
142141}
0 commit comments