57 struct BroadcastUnroll
63 const bool src1_is_broadcast = (src1.
shape()[dim - 1] !=
dst.shape()[dim - 1]);
64 const bool src2_is_broadcast = (src2.
shape()[dim - 1] !=
dst.shape()[dim - 1]);
66 id_src1.
set(dim - 1, 0);
67 id_src2.
set(dim - 1, 0);
68 id_dst.
set(dim - 1, 0);
70 #pragma omp parallel for
72 for(
size_t i = 0; i <
dst.shape()[dim - 1]; ++i)
74 BroadcastUnroll < dim - 1 >::unroll(op, src1, src2,
dst, id_src1, id_src2, id_dst);
76 id_src1[dim - 1] += !src1_is_broadcast;
77 id_src2[dim - 1] += !src2_is_broadcast;
84 struct BroadcastUnroll<0>
88 Coordinates &id_src1, Coordinates &id_src2, Coordinates &id_dst)
107 template <
typename T>
120 template <
typename T>
125 #pragma omp parallel for
127 for(
int i = 0; i <
src.num_elements(); ++i)