@@ -141,26 +141,34 @@ class SoftMaxLayerImpl : public SoftmaxLayer
141
141
size_t bufSize = internals[0 ].total ();
142
142
size_t totalSize = src.total ();
143
143
144
+ // adjust local/global size
145
+ size_t internal_localSize[1 ] = { (bufSize == 1 ) ? 1 : wgSize };
146
+ size_t internal_globalSize[1 ] = { divUp (bufSize, (unsigned int )internal_localSize[0 ]) * internal_localSize[0 ] };
147
+
148
+ // adjust local/global size (total)
149
+ size_t total_localSize[1 ] = { (totalSize == 1 ) ? 1 : wgSize };
150
+ size_t total_globalSize[1 ] = { divUp (totalSize, (unsigned int )total_localSize[0 ]) * total_localSize[0 ] };
151
+
144
152
kmax.args ((int )outerSize, (int )channels, (int )innerSize,
145
153
ocl::KernelArg::PtrReadOnly (dstMat), ocl::KernelArg::PtrReadWrite (bufMat));
146
- if (!kmax.run (1 , &bufSize, &wgSize , false ))
154
+ if (!kmax.run (1 , internal_globalSize, internal_localSize , false ))
147
155
return false ;
148
156
149
157
ksub.args ((int )totalSize, (int )outerSize, (int )channels, (int )innerSize,
150
158
ocl::KernelArg::PtrReadOnly (bufMat), ocl::KernelArg::PtrReadWrite (dstMat));
151
- if (!ksub.run (1 , &totalSize, &wgSize , false ))
159
+ if (!ksub.run (1 , total_globalSize, total_localSize , false ))
152
160
return false ;
153
161
154
162
cv::exp (dstMat, dstMat);
155
163
156
164
ksum.args ((int )outerSize, (int )channels, (int )innerSize,
157
165
ocl::KernelArg::PtrReadOnly (dstMat), ocl::KernelArg::PtrReadWrite (bufMat));
158
- if (!ksum.run (1 , &bufSize, &wgSize , false ))
166
+ if (!ksum.run (1 , internal_globalSize, internal_localSize , false ))
159
167
return false ;
160
168
161
169
kdiv.args ((int )totalSize, (int )outerSize, (int )channels, (int )innerSize,
162
170
ocl::KernelArg::PtrReadOnly (bufMat), ocl::KernelArg::PtrReadWrite (dstMat));
163
- if (!kdiv.run (1 , &totalSize, &wgSize , false ))
171
+ if (!kdiv.run (1 , total_globalSize, total_localSize , false ))
164
172
return false ;
165
173
166
174
return true ;
0 commit comments