3
3
// See LICENSE.TXT
4
4
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
5
5
6
+ #include " ur_api.h"
6
7
#include < array>
7
8
#include < uur/fixtures.h>
8
9
9
- using urKernelGetGroupInfoTest =
10
- uur::urKernelTestWithParam<ur_kernel_group_info_t >;
11
-
12
- UUR_TEST_SUITE_P (
13
- urKernelGetGroupInfoTest,
14
- ::testing::Values (UR_KERNEL_GROUP_INFO_GLOBAL_WORK_SIZE,
15
- UR_KERNEL_GROUP_INFO_WORK_GROUP_SIZE,
16
- UR_KERNEL_GROUP_INFO_COMPILE_WORK_GROUP_SIZE,
17
- UR_KERNEL_GROUP_INFO_LOCAL_MEM_SIZE,
18
- UR_KERNEL_GROUP_INFO_PREFERRED_WORK_GROUP_SIZE_MULTIPLE,
19
- UR_KERNEL_GROUP_INFO_PRIVATE_MEM_SIZE,
20
- UR_KERNEL_GROUP_INFO_COMPILE_MAX_WORK_GROUP_SIZE,
21
- UR_KERNEL_GROUP_INFO_COMPILE_MAX_LINEAR_WORK_GROUP_SIZE),
22
- uur::deviceTestWithParamPrinter<ur_kernel_group_info_t>);
23
-
24
- struct urKernelGetGroupInfoSingleTest : uur::urKernelTest {
10
+ struct urKernelGetGroupInfoFixedWorkGroupSizeTest : uur::urKernelTest {
25
11
void SetUp () override {
12
+ program_name = " fixed_wg_size" ;
26
13
UUR_RETURN_ON_FATAL_FAILURE (urKernelTest::SetUp ());
27
14
}
15
+
16
+ // This value correlates to work_group_size<8, 4, 2> in fixed_wg_size.cpp.
17
+ // In SYCL, the right-most dimension varies the fastest in linearization.
18
+ // In UR, this is on the left, so we reverse the order of these values.
19
+ std::array<size_t , 3 > work_group_size{2 , 4 , 8 };
28
20
};
29
- UUR_INSTANTIATE_DEVICE_TEST_SUITE_P (urKernelGetGroupInfoSingleTest );
21
+ UUR_INSTANTIATE_DEVICE_TEST_SUITE_P (urKernelGetGroupInfoFixedWorkGroupSizeTest );
30
22
31
- struct urKernelGetGroupInfoWgSizeTest : uur::urKernelTest {
23
+ struct urKernelGetGroupInfoMaxWorkGroupSizeTest : uur::urKernelTest {
32
24
void SetUp () override {
33
- program_name = " fixed_wg_size " ;
25
+ program_name = " max_wg_size " ;
34
26
UUR_RETURN_ON_FATAL_FAILURE (urKernelTest::SetUp ());
35
27
}
36
28
37
- // This must match the size in fixed_wg_size.cpp
38
- std::array<size_t , 3 > wg_size{4 , 4 , 4 };
29
+ // These values correlate to max_work_group_size<6, 5, 4> and
30
+ // max_linear_work_group_size<120> in max_wg_size.cpp.
31
+ // In SYCL, the right-most dimension varies the fastest in linearization.
32
+ // In UR, this is on the left, so we reverse the order of these values.
33
+ std::array<size_t , 3 > max_work_group_size{2 , 4 , 8 };
34
+ size_t max_linear_work_group_size{64 };
39
35
};
40
- UUR_INSTANTIATE_DEVICE_TEST_SUITE_P (urKernelGetGroupInfoWgSizeTest );
36
+ UUR_INSTANTIATE_DEVICE_TEST_SUITE_P (urKernelGetGroupInfoMaxWorkGroupSizeTest );
41
37
42
- TEST_P (urKernelGetGroupInfoTest, Success) {
43
- auto property_name = getParam ();
44
- size_t property_size = 0 ;
45
- std::vector<char > property_value;
46
- auto result = urKernelGetGroupInfo (kernel, device, property_name, 0 ,
47
- nullptr , &property_size);
48
- if (result == UR_RESULT_SUCCESS) {
49
- property_value.resize (property_size);
50
- ASSERT_SUCCESS (urKernelGetGroupInfo (kernel, device, property_name,
51
- property_size,
52
- property_value.data (), nullptr ));
53
- } else {
54
- ASSERT_EQ_RESULT (result, UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION);
38
+ struct urKernelGetGroupInfoTest : uur::urKernelTest {
39
+ void SetUp () override {
40
+ UUR_RETURN_ON_FATAL_FAILURE (urKernelTest::SetUp ());
55
41
}
42
+ };
43
+ UUR_INSTANTIATE_DEVICE_TEST_SUITE_P (urKernelGetGroupInfoTest);
44
+
45
+ TEST_P (urKernelGetGroupInfoTest, GlobalWorkSize) {
46
+ auto property_name = UR_KERNEL_GROUP_INFO_GLOBAL_WORK_SIZE;
47
+ size_t property_size = 0 ;
48
+ UUR_ASSERT_SUCCESS_OR_UNSUPPORTED (urKernelGetGroupInfo (
49
+ kernel, device, property_name, 0 , nullptr , &property_size));
50
+ ASSERT_EQ (property_size, 3 * sizeof (size_t ));
51
+
52
+ std::vector<char > property_value (property_size);
53
+ ASSERT_SUCCESS (urKernelGetGroupInfo (kernel, device, property_name,
54
+ property_size, property_value.data (),
55
+ nullptr ));
56
+ }
57
+
58
+ TEST_P (urKernelGetGroupInfoTest, WorkGroupSize) {
59
+ auto property_name = UR_KERNEL_GROUP_INFO_WORK_GROUP_SIZE;
60
+ size_t property_size = 0 ;
61
+ UUR_ASSERT_SUCCESS_OR_UNSUPPORTED (urKernelGetGroupInfo (
62
+ kernel, device, property_name, 0 , nullptr , &property_size));
63
+ ASSERT_EQ (property_size, sizeof (size_t ));
64
+
65
+ std::vector<char > property_value (property_size);
66
+ ASSERT_SUCCESS (urKernelGetGroupInfo (kernel, device, property_name,
67
+ property_size, property_value.data (),
68
+ nullptr ));
69
+ }
70
+
71
+ TEST_P (urKernelGetGroupInfoFixedWorkGroupSizeTest, CompileWorkGroupSize) {
72
+ auto property_name = UR_KERNEL_GROUP_INFO_COMPILE_WORK_GROUP_SIZE;
73
+ size_t property_size = 0 ;
74
+ UUR_ASSERT_SUCCESS_OR_UNSUPPORTED (urKernelGetGroupInfo (
75
+ kernel, device, property_name, 0 , nullptr , &property_size));
76
+ ASSERT_EQ (property_size, 3 * sizeof (size_t ));
77
+
78
+ std::array<size_t , 3 > property_value;
79
+ ASSERT_SUCCESS (urKernelGetGroupInfo (kernel, device, property_name,
80
+ property_size, property_value.data (),
81
+ nullptr ));
82
+
83
+ ASSERT_EQ (property_value, work_group_size);
84
+ }
85
+
86
+ TEST_P (urKernelGetGroupInfoTest, LocalMemSize) {
87
+ auto property_name = UR_KERNEL_GROUP_INFO_LOCAL_MEM_SIZE;
88
+ size_t property_size = 0 ;
89
+ UUR_ASSERT_SUCCESS_OR_UNSUPPORTED (urKernelGetGroupInfo (
90
+ kernel, device, property_name, 0 , nullptr , &property_size));
91
+ ASSERT_EQ (property_size, sizeof (size_t ));
92
+
93
+ std::vector<char > property_value (property_size);
94
+ ASSERT_SUCCESS (urKernelGetGroupInfo (kernel, device, property_name,
95
+ property_size, property_value.data (),
96
+ nullptr ));
97
+ }
98
+
99
+ TEST_P (urKernelGetGroupInfoTest, PreferredWorkGroupSizeMultiple) {
100
+ auto property_name =
101
+ UR_KERNEL_GROUP_INFO_PREFERRED_WORK_GROUP_SIZE_MULTIPLE;
102
+ size_t property_size = 0 ;
103
+ UUR_ASSERT_SUCCESS_OR_UNSUPPORTED (urKernelGetGroupInfo (
104
+ kernel, device, property_name, 0 , nullptr , &property_size));
105
+ ASSERT_EQ (property_size, sizeof (size_t ));
106
+
107
+ std::vector<char > property_value (property_size);
108
+ ASSERT_SUCCESS (urKernelGetGroupInfo (kernel, device, property_name,
109
+ property_size, property_value.data (),
110
+ nullptr ));
111
+ }
112
+
113
+ TEST_P (urKernelGetGroupInfoTest, PrivateMemSize) {
114
+ auto property_name = UR_KERNEL_GROUP_INFO_PRIVATE_MEM_SIZE;
115
+ size_t property_size = 0 ;
116
+ UUR_ASSERT_SUCCESS_OR_UNSUPPORTED (urKernelGetGroupInfo (
117
+ kernel, device, property_name, 0 , nullptr , &property_size));
118
+ ASSERT_EQ (property_size, sizeof (size_t ));
119
+
120
+ std::vector<char > property_value (property_size);
121
+ ASSERT_SUCCESS (urKernelGetGroupInfo (kernel, device, property_name,
122
+ property_size, property_value.data (),
123
+ nullptr ));
124
+ }
125
+
126
+ TEST_P (urKernelGetGroupInfoMaxWorkGroupSizeTest, CompileMaxWorkGroupSize) {
127
+ auto property_name = UR_KERNEL_GROUP_INFO_COMPILE_MAX_WORK_GROUP_SIZE;
128
+ size_t property_size = 0 ;
129
+ UUR_ASSERT_SUCCESS_OR_UNSUPPORTED (urKernelGetGroupInfo (
130
+ kernel, device, property_name, 0 , nullptr , &property_size));
131
+ ASSERT_EQ (property_size, 3 * sizeof (size_t ));
132
+
133
+ std::array<size_t , 3 > property_value;
134
+ ASSERT_SUCCESS (urKernelGetGroupInfo (kernel, device, property_name,
135
+ property_size, property_value.data (),
136
+ nullptr ));
137
+
138
+ ASSERT_EQ (property_value, max_work_group_size);
139
+ }
140
+
141
+ TEST_P (urKernelGetGroupInfoMaxWorkGroupSizeTest,
142
+ CompileMaxLinearWorkGroupSize) {
143
+ auto property_name =
144
+ UR_KERNEL_GROUP_INFO_COMPILE_MAX_LINEAR_WORK_GROUP_SIZE;
145
+ size_t property_size = 0 ;
146
+ UUR_ASSERT_SUCCESS_OR_UNSUPPORTED (urKernelGetGroupInfo (
147
+ kernel, device, property_name, 0 , nullptr , &property_size));
148
+ ASSERT_EQ (property_size, sizeof (size_t ));
149
+
150
+ size_t property_value;
151
+ ASSERT_SUCCESS (urKernelGetGroupInfo (kernel, device, property_name,
152
+ property_size, &property_value,
153
+ nullptr ));
154
+
155
+ ASSERT_EQ (property_value, max_linear_work_group_size);
56
156
}
57
157
58
158
TEST_P (urKernelGetGroupInfoTest, InvalidNullHandleKernel) {
@@ -79,15 +179,7 @@ TEST_P(urKernelGetGroupInfoTest, InvalidEnumeration) {
79
179
nullptr , &bad_enum_length));
80
180
}
81
181
82
- TEST_P (urKernelGetGroupInfoWgSizeTest, CompileWorkGroupSize) {
83
- std::array<size_t , 3 > read_dims{1 , 1 , 1 };
84
- ASSERT_SUCCESS (urKernelGetGroupInfo (
85
- kernel, device, UR_KERNEL_GROUP_INFO_COMPILE_WORK_GROUP_SIZE,
86
- sizeof (read_dims), read_dims.data (), nullptr ));
87
- ASSERT_EQ (read_dims, wg_size);
88
- }
89
-
90
- TEST_P (urKernelGetGroupInfoSingleTest, CompileWorkGroupSizeEmpty) {
182
+ TEST_P (urKernelGetGroupInfoTest, CompileWorkGroupSizeEmpty) {
91
183
// Returns 0 by default when there is no specific information
92
184
std::array<size_t , 3 > read_dims{1 , 1 , 1 };
93
185
std::array<size_t , 3 > zero{0 , 0 , 0 };
@@ -97,7 +189,7 @@ TEST_P(urKernelGetGroupInfoSingleTest, CompileWorkGroupSizeEmpty) {
97
189
ASSERT_EQ (read_dims, zero);
98
190
}
99
191
100
- TEST_P (urKernelGetGroupInfoSingleTest , CompileMaxWorkGroupSizeEmpty) {
192
+ TEST_P (urKernelGetGroupInfoTest , CompileMaxWorkGroupSizeEmpty) {
101
193
// Returns 0 by default when there is no specific information
102
194
std::array<size_t , 3 > read_dims{1 , 1 , 1 };
103
195
std::array<size_t , 3 > zero{0 , 0 , 0 };
0 commit comments