@@ -63,22 +63,13 @@ class ArgDesc {
63
63
// The structure represents NDRange - global, local sizes, global offset and
64
64
// number of dimensions.
65
65
class NDRDescT {
66
- // The method initializes all sizes for dimensions greater than the passed one
67
- // to the default values, so they will not affect execution.
68
- void setNDRangeLeftover () {
69
- for (int I = Dims; I < 3 ; ++I) {
70
- GlobalSize[I] = 1 ;
71
- LocalSize[I] = LocalSize[0 ] ? 1 : 0 ;
72
- GlobalOffset[I] = 0 ;
73
- NumWorkGroups[I] = 0 ;
74
- }
75
- }
76
-
77
- template <int Dims> static sycl::range<3 > padRange (sycl::range<Dims> Range) {
66
+ template <int Dims>
67
+ static sycl::range<3 > padRange (sycl::range<Dims> Range,
68
+ [[maybe_unused]] size_t DefaultValue = 0 ) {
78
69
if constexpr (Dims == 3 ) {
79
70
return Range;
80
71
} else {
81
- sycl::range<3 > Res{0 , 0 , 0 };
72
+ sycl::range<3 > Res{DefaultValue, DefaultValue, DefaultValue };
82
73
for (int I = 0 ; I < Dims; ++I)
83
74
Res[I] = Range[I];
84
75
return Res;
@@ -102,37 +93,36 @@ class NDRDescT {
102
93
NDRDescT (NDRDescT &&Desc) = default ;
103
94
104
95
NDRDescT (sycl::range<3 > N, bool SetNumWorkGroups, int DimsArg)
105
- : GlobalSize{SetNumWorkGroups ? sycl::range<3 >{0 , 0 , 0 } : N},
106
- NumWorkGroups{SetNumWorkGroups ? N : sycl::range<3 >{0 , 0 , 0 }},
107
- Dims{size_t (DimsArg)} {
108
- setNDRangeLeftover ();
96
+ : Dims{size_t (DimsArg)} {
97
+ if (SetNumWorkGroups) {
98
+ NumWorkGroups = N;
99
+ } else {
100
+ GlobalSize = N;
101
+ }
109
102
}
110
103
111
104
NDRDescT (sycl::range<3 > NumWorkItems, sycl::range<3 > LocalSize,
112
105
sycl::id<3 > Offset, int DimsArg)
113
106
: GlobalSize{NumWorkItems}, LocalSize{LocalSize}, GlobalOffset{Offset},
114
- Dims{size_t (DimsArg)} {
115
- setNDRangeLeftover ();
116
- }
107
+ Dims{size_t (DimsArg)} {}
117
108
118
109
NDRDescT (sycl::range<3 > NumWorkItems, sycl::id<3 > Offset, int DimsArg)
119
110
: GlobalSize{NumWorkItems}, GlobalOffset{Offset}, Dims{size_t (DimsArg)} {}
120
111
121
112
template <int Dims_>
122
113
NDRDescT (sycl::nd_range<Dims_> ExecutionRange, int DimsArg)
123
- : NDRDescT(padRange(ExecutionRange.get_global_range()),
124
- padRange (ExecutionRange.get_local_range()),
125
- padId(ExecutionRange.get_offset()), size_t(DimsArg)) {
126
- setNDRangeLeftover ();
127
- }
114
+ : NDRDescT(padRange(ExecutionRange.get_global_range(), 1 ),
115
+ padRange (ExecutionRange.get_local_range(),
116
+ ExecutionRange.get_local_range()[0] ? 1 : 0),
117
+ padId(ExecutionRange.get_offset()), size_t(DimsArg)) {}
128
118
129
119
template <int Dims_>
130
120
NDRDescT (sycl::nd_range<Dims_> ExecutionRange)
131
121
: NDRDescT(ExecutionRange, Dims_) {}
132
122
133
123
template <int Dims_>
134
124
NDRDescT (sycl::range<Dims_> Range)
135
- : NDRDescT(padRange(Range), /* SetNumWorkGroups=*/ false, Dims_) {}
125
+ : NDRDescT(padRange(Range, 1 ), /* SetNumWorkGroups=*/ false, Dims_) {}
136
126
137
127
void setClusterDimensions (sycl::range<3 > N, int Dims) {
138
128
if (this ->Dims != size_t (Dims)) {
0 commit comments