@@ -110,6 +110,37 @@ void dpnp_full_like_c(void* array_in, void* result, const size_t size)
110110 dpnp_full_c<_DataType>(array_in, result, size);
111111}
112112
113+ template <typename _KernelNameSpecialization>
114+ class dpnp_identity_c_kernel ;
115+
116+ template <typename _DataType>
117+ void dpnp_identity_c (void * result1, const size_t n)
118+ {
119+ if (n == 0 )
120+ {
121+ return ;
122+ }
123+
124+ cl::sycl::event event;
125+
126+ _DataType* result = reinterpret_cast <_DataType*>(result1);
127+
128+ cl::sycl::range<2 > gws (n, n);
129+ auto kernel_parallel_for_func = [=](cl::sycl::id<2 > global_id) {
130+ size_t i = global_id[0 ];
131+ size_t j = global_id[1 ];
132+ result[i * n + j] = i == j;
133+ };
134+
135+ auto kernel_func = [&](cl::sycl::handler& cgh) {
136+ cgh.parallel_for <class dpnp_identity_c_kernel <_DataType>>(gws, kernel_parallel_for_func);
137+ };
138+
139+ event = DPNP_QUEUE.submit (kernel_func);
140+
141+ event.wait ();
142+ }
143+
113144template <typename _DataType>
114145void dpnp_ones_c (void * result, size_t size)
115146{
@@ -478,6 +509,13 @@ void func_map_init_arraycreation(func_map_t& fmap)
478509 fmap[DPNPFuncName::DPNP_FN_FULL_LIKE][eft_C128][eft_C128] = {eft_C128,
479510 (void *)dpnp_full_like_c<std::complex <double >>};
480511
512+ fmap[DPNPFuncName::DPNP_FN_IDENTITY][eft_INT][eft_INT] = {eft_INT, (void *)dpnp_identity_c<int >};
513+ fmap[DPNPFuncName::DPNP_FN_IDENTITY][eft_LNG][eft_LNG] = {eft_LNG, (void *)dpnp_identity_c<long >};
514+ fmap[DPNPFuncName::DPNP_FN_IDENTITY][eft_FLT][eft_FLT] = {eft_FLT, (void *)dpnp_identity_c<float >};
515+ fmap[DPNPFuncName::DPNP_FN_IDENTITY][eft_DBL][eft_DBL] = {eft_DBL, (void *)dpnp_identity_c<double >};
516+ fmap[DPNPFuncName::DPNP_FN_IDENTITY][eft_BLN][eft_BLN] = {eft_BLN, (void *)dpnp_identity_c<bool >};
517+ fmap[DPNPFuncName::DPNP_FN_IDENTITY][eft_C128][eft_C128] = {eft_C128, (void *)dpnp_identity_c<std::complex <double >>};
518+
481519 fmap[DPNPFuncName::DPNP_FN_ONES][eft_INT][eft_INT] = {eft_INT, (void *)dpnp_ones_c<int >};
482520 fmap[DPNPFuncName::DPNP_FN_ONES][eft_LNG][eft_LNG] = {eft_LNG, (void *)dpnp_ones_c<long >};
483521 fmap[DPNPFuncName::DPNP_FN_ONES][eft_FLT][eft_FLT] = {eft_FLT, (void *)dpnp_ones_c<float >};
0 commit comments