@@ -140,6 +140,7 @@ void custom_cov_c(void* array1_in, void* result1, size_t nrows, size_t ncols)
140
140
141
141
template void custom_cov_c<double >(void * array1_in, void * result1, size_t nrows, size_t ncols);
142
142
143
+
143
144
template <typename _DataType>
144
145
class custom_max_c_kernel ;
145
146
@@ -282,3 +283,91 @@ template void
282
283
template void
283
284
custom_min_c<long >(void * array1_in, void * result1, size_t * shape, size_t ndim, size_t * axis, size_t naxis);
284
285
template void custom_min_c<int >(void * array1_in, void * result1, size_t * shape, size_t ndim, size_t * axis, size_t naxis);
286
+
287
+
288
+ template <typename _DataType, typename _ResultType>
289
+ void custom_std_c (void * array1_in, void * result1, size_t * shape, size_t ndim, size_t * axis, size_t naxis, size_t ddof)
290
+ {
291
+ _DataType* array1 = reinterpret_cast <_DataType*>(array1_in);
292
+ _ResultType* result = reinterpret_cast <_ResultType*>(result1);
293
+
294
+ _ResultType* var = reinterpret_cast <_ResultType*>(dpnp_memory_alloc_c (1 * sizeof (_ResultType)));
295
+ custom_var_c<_DataType, _ResultType>(array1, var, shape, ndim, axis, naxis, ddof);
296
+
297
+ custom_elemwise_sqrt_c<_ResultType, _ResultType>(var, result, 1 );
298
+
299
+ dpnp_memory_free_c (var);
300
+
301
+ #if 0
302
+ std::cout << "std result " << res[0] << "\n";
303
+ #endif
304
+ }
305
+
306
+ template void custom_std_c<int , double >(void * array1_in, void * result1, size_t * shape,
307
+ size_t ndim, size_t * axis, size_t naxis, size_t ddof);
308
+ template void custom_std_c<long , double >(void * array1_in, void * result1, size_t * shape,
309
+ size_t ndim, size_t * axis, size_t naxis, size_t ddof);
310
+ template void custom_std_c<float , float >(void * array1_in, void * result1, size_t * shape,
311
+ size_t ndim, size_t * axis, size_t naxis, size_t ddof);
312
+ template void custom_std_c<double , double >(void * array1_in, void * result1, size_t * shape,
313
+ size_t ndim, size_t * axis, size_t naxis, size_t ddof);
314
+
315
+
316
+ template <typename _DataType, typename _ResultType>
317
+ class custom_var_c_kernel ;
318
+
319
+ template <typename _DataType, typename _ResultType>
320
+ void custom_var_c (void * array1_in, void * result1, size_t * shape, size_t ndim, size_t * axis, size_t naxis, size_t ddof)
321
+ {
322
+ cl::sycl::event event;
323
+ _DataType* array1 = reinterpret_cast <_DataType*>(array1_in);
324
+ _ResultType* result = reinterpret_cast <_ResultType*>(result1);
325
+
326
+ _ResultType* mean = reinterpret_cast <_ResultType*>(dpnp_memory_alloc_c (1 * sizeof (_ResultType)));
327
+ custom_mean_c<_DataType, _ResultType>(array1, mean, shape, ndim, axis, naxis);
328
+ _ResultType mean_val = mean[0 ];
329
+
330
+ size_t size = 1 ;
331
+ for (size_t i = 0 ; i < ndim; ++i) {
332
+ size *= shape[i];
333
+ }
334
+
335
+ _ResultType* squared_deviations = reinterpret_cast <_ResultType*>(dpnp_memory_alloc_c (size * sizeof (_ResultType)));
336
+
337
+ cl::sycl::range<1 > gws (size);
338
+ event = DPNP_QUEUE.submit ([&](cl::sycl::handler& cgh) {
339
+ cgh.parallel_for <class custom_var_c_kernel <_DataType, _ResultType> >(
340
+ gws,
341
+ [=](cl::sycl::id<1 > global_id)
342
+ {
343
+ size_t i = global_id[0 ]; /* for (size_t i = 0; i < size; ++i)*/
344
+ {
345
+ _ResultType deviation = (_ResultType)array1[i] - mean_val;
346
+ squared_deviations[i] = deviation * deviation;
347
+ }
348
+ }); /* parallel_for */
349
+ }); /* queue.submit */
350
+
351
+ event.wait ();
352
+
353
+ custom_mean_c<_ResultType, _ResultType>(squared_deviations, mean, shape, ndim, axis, naxis);
354
+ mean_val = mean[0 ];
355
+
356
+ result[0 ] = mean_val * size / (size - ddof);
357
+
358
+ dpnp_memory_free_c (mean);
359
+ dpnp_memory_free_c (squared_deviations);
360
+
361
+ #if 0
362
+ std::cout << "var result " << res[0] << "\n";
363
+ #endif
364
+ }
365
+
366
+ template void custom_var_c<int , double >(void * array1_in, void * result1, size_t * shape,
367
+ size_t ndim, size_t * axis, size_t naxis, size_t ddof);
368
+ template void custom_var_c<long , double >(void * array1_in, void * result1, size_t * shape,
369
+ size_t ndim, size_t * axis, size_t naxis, size_t ddof);
370
+ template void custom_var_c<float , float >(void * array1_in, void * result1, size_t * shape,
371
+ size_t ndim, size_t * axis, size_t naxis, size_t ddof);
372
+ template void custom_var_c<double , double >(void * array1_in, void * result1, size_t * shape,
373
+ size_t ndim, size_t * axis, size_t naxis, size_t ddof);
0 commit comments