@@ -94,7 +94,7 @@ void Sum::forward_dev_impl(const MyDevice & dev, const vector<const Tensor*>& xs
94
94
// Not all the same batch size, so need to broadcast in the cases where they differ
95
95
TensorTools::zero (fx);
96
96
#ifdef __CUDACC__
97
- Eigen::array<int , 2 > bcast ({ 1 , ( int ) fx.d .bd });
97
+ Eigen::array<ptrdiff_t , 2 > bcast ({ 1 , fx.d .bd });
98
98
#endif
99
99
for (unsigned i = 0 ; i < num_args; ++i) {
100
100
if (xs[i]->d .bd == fx.d .bd ) {
@@ -123,7 +123,7 @@ void Sum::backward_dev_impl(const MyDevice & dev,
123
123
if (dEdxi.d .bd == fx.d .bd ) {
124
124
tvec (dEdxi).device (*dev.edevice ) += tvec (dEdf);
125
125
} else {
126
- Eigen::array<int , 1 > red_axis = {1 };
126
+ Eigen::array<ptrdiff_t , 1 > red_axis = {1 };
127
127
tvec (dEdxi).device (*dev.edevice ) += tbvec (dEdf).sum (red_axis);
128
128
}
129
129
}
@@ -149,7 +149,7 @@ Dim SumElements::dim_forward(const vector<Dim>& xs) const {
149
149
template <class MyDevice >
150
150
void SumElements::forward_dev_impl (const MyDevice & dev, const vector<const Tensor*>& xs, Tensor& fx) const {
151
151
DYNET_ARG_CHECK (xs.size () == 1 , " Failed dimension check in SumElements::forward" );
152
- Eigen::array<int , 1 > red_axis; red_axis[ 0 ] = 0 ;
152
+ Eigen::array<ptrdiff_t , 1 > red_axis = { 0 } ;
153
153
tb<0 >(fx).device (*dev.edevice ) = tbvec (*xs[0 ]).sum (red_axis);
154
154
}
155
155
@@ -161,7 +161,7 @@ void SumElements::backward_dev_impl(const MyDevice & dev,
161
161
unsigned i,
162
162
Tensor& dEdxi) const {
163
163
DYNET_ARG_CHECK (i == 0 , " Failed dimension check in SumElements::backward" );
164
- Eigen::array<int , 2 > bcast = {( int ) xs[0 ]->d .batch_size (), 1 };
164
+ Eigen::array<ptrdiff_t , 2 > bcast = {xs[0 ]->d .batch_size (), 1 };
165
165
tbvec (dEdxi).device (*dev.edevice ) += tbvec (dEdf).broadcast (bcast);
166
166
}
167
167
DYNET_NODE_INST_DEV_IMPL (SumElements)
@@ -199,19 +199,19 @@ void SumDimension::forward_dev_impl(const MyDevice & dev, const vector<const Ten
199
199
DYNET_ASSERT (xs.size () == 1 , " Failed input count check in SumDimension" );
200
200
201
201
if (dims.size ()==0 && include_batch_dim){
202
- Eigen::array<int , 1 > reduction_axis = {1 };
202
+ Eigen::array<ptrdiff_t , 1 > reduction_axis = {1 };
203
203
tvec (fx).device (*dev.edevice ) = tbvec (*xs[0 ]).sum (reduction_axis);
204
204
} else if (dims.size ()==1 && !include_batch_dim){
205
- Eigen::array<int , 1 > reduction_axis = {( int ) dims[0 ]};
205
+ Eigen::array<ptrdiff_t , 1 > reduction_axis = {dims[0 ]};
206
206
tb<2 >(fx).device (*dev.edevice ) = tb<3 >(*xs[0 ]).sum (reduction_axis);
207
207
} else if (dims.size ()==1 && include_batch_dim){
208
- Eigen::array<int , 2 > reduction_axis = {( int ) dims[0 ], 3 };
208
+ Eigen::array<ptrdiff_t , 2 > reduction_axis = {dims[0 ], 3 };
209
209
t<2 >(fx).device (*dev.edevice ) = tb<3 >(*xs[0 ]).sum (reduction_axis);
210
210
} else if (dims.size ()==2 && !include_batch_dim){
211
- Eigen::array<int , 2 > reduction_axis = {( int ) dims[0 ], ( int ) dims[1 ]};
211
+ Eigen::array<ptrdiff_t , 2 > reduction_axis = {dims[0 ], dims[1 ]};
212
212
tb<1 >(fx).device (*dev.edevice ) = tb<3 >(*xs[0 ]).sum (reduction_axis);
213
213
} else if (dims.size ()==2 && include_batch_dim){
214
- Eigen::array<int , 3 > reduction_axis = {( int ) dims[0 ], ( int ) dims[1 ], 3 };
214
+ Eigen::array<ptrdiff_t , 3 > reduction_axis = {dims[0 ], dims[1 ], 3 };
215
215
t<1 >(fx).device (*dev.edevice ) = tb<3 >(*xs[0 ]).sum (reduction_axis);
216
216
}
217
217
}
@@ -226,23 +226,23 @@ void SumDimension::backward_dev_impl(const MyDevice & dev,
226
226
DYNET_ARG_CHECK (i == 0 , " Failed dimension check in SumDimension::backward" );
227
227
228
228
if (dims.size ()==0 && include_batch_dim){
229
- Eigen::array<int , 2 > bcast = {1 , ( int ) xs[0 ]->d .bd };
229
+ Eigen::array<ptrdiff_t , 2 > bcast = {1 , xs[0 ]->d .bd };
230
230
tbvec (dEdxi).device (*dev.edevice ) += tbvec (dEdf).broadcast (bcast);
231
231
} else if (dims.size ()==1 && !include_batch_dim){
232
- Eigen::array<int , 4 > bcast = {1 ,1 ,1 ,1 }; bcast[dims[0 ]] = xs[0 ]->d [dims[0 ]];
233
- Eigen::array<int , 4 > morph = {( int ) xs[0 ]->d [0 ],( int ) xs[0 ]->d [1 ],( int ) xs[0 ]->d [2 ],( int ) xs[0 ]->d .bd }; morph[dims[0 ]] = 1 ;
232
+ Eigen::array<ptrdiff_t , 4 > bcast = {1 ,1 ,1 ,1 }; bcast[dims[0 ]] = xs[0 ]->d [dims[0 ]];
233
+ Eigen::array<ptrdiff_t , 4 > morph = {xs[0 ]->d [0 ],xs[0 ]->d [1 ],xs[0 ]->d [2 ],xs[0 ]->d .bd }; morph[dims[0 ]] = 1 ;
234
234
tb<3 >(dEdxi).device (*dev.edevice ) += tb<2 >(dEdf).reshape (morph).broadcast (bcast);
235
235
} else if (dims.size ()==1 && include_batch_dim){
236
- Eigen::array<int , 4 > bcast = {1 ,1 ,1 ,1 }; bcast[dims[0 ]] = xs[0 ]->d [dims[0 ]]; bcast[3 ] = xs[0 ]->d .bd ;
237
- Eigen::array<int , 4 > morph = {( int ) xs[0 ]->d [0 ],( int ) xs[0 ]->d [1 ],( int ) xs[0 ]->d [2 ],( int ) 1 }; morph[dims[0 ]] = 1 ;
236
+ Eigen::array<ptrdiff_t , 4 > bcast = {1 ,1 ,1 ,1 }; bcast[dims[0 ]] = xs[0 ]->d [dims[0 ]]; bcast[3 ] = xs[0 ]->d .bd ;
237
+ Eigen::array<ptrdiff_t , 4 > morph = {xs[0 ]->d [0 ],xs[0 ]->d [1 ],xs[0 ]->d [2 ],1 }; morph[dims[0 ]] = 1 ;
238
238
tb<3 >(dEdxi).device (*dev.edevice ) += t<2 >(dEdf).reshape (morph).broadcast (bcast);
239
239
} else if (dims.size ()==2 && !include_batch_dim){
240
- Eigen::array<int , 4 > bcast = {1 ,1 ,1 ,1 }; bcast[dims[0 ]] = xs[0 ]->d [dims[0 ]]; bcast[dims[1 ]] = xs[0 ]->d [dims[1 ]];
241
- Eigen::array<int , 4 > morph = {( int ) xs[0 ]->d [0 ],( int ) xs[0 ]->d [1 ],( int ) xs[0 ]->d [2 ],( int ) xs[0 ]->d .bd }; morph[dims[0 ]] = 1 ; morph[dims[1 ]] = 1 ;
240
+ Eigen::array<ptrdiff_t , 4 > bcast = {1 ,1 ,1 ,1 }; bcast[dims[0 ]] = xs[0 ]->d [dims[0 ]]; bcast[dims[1 ]] = xs[0 ]->d [dims[1 ]];
241
+ Eigen::array<ptrdiff_t , 4 > morph = {xs[0 ]->d [0 ],xs[0 ]->d [1 ],xs[0 ]->d [2 ],xs[0 ]->d .bd }; morph[dims[0 ]] = 1 ; morph[dims[1 ]] = 1 ;
242
242
tb<3 >(dEdxi).device (*dev.edevice ) += tb<1 >(dEdf).reshape (morph).broadcast (bcast);
243
243
} else if (dims.size ()==2 && include_batch_dim){
244
- Eigen::array<int , 4 > bcast = {1 ,1 ,1 ,1 }; bcast[dims[0 ]] = xs[0 ]->d [dims[0 ]]; bcast[dims[1 ]] = xs[0 ]->d [dims[1 ]]; bcast[3 ] = xs[0 ]->d .bd ;
245
- Eigen::array<int , 4 > morph = {( int ) xs[0 ]->d [0 ],( int ) xs[0 ]->d [1 ],( int ) xs[0 ]->d [2 ],( int ) 1 }; morph[dims[0 ]] = 1 ; morph[dims[1 ]] = 1 ;
244
+ Eigen::array<ptrdiff_t , 4 > bcast = {1 ,1 ,1 ,1 }; bcast[dims[0 ]] = xs[0 ]->d [dims[0 ]]; bcast[dims[1 ]] = xs[0 ]->d [dims[1 ]]; bcast[3 ] = xs[0 ]->d .bd ;
245
+ Eigen::array<ptrdiff_t , 4 > morph = {xs[0 ]->d [0 ],xs[0 ]->d [1 ],xs[0 ]->d [2 ],1 }; morph[dims[0 ]] = 1 ; morph[dims[1 ]] = 1 ;
246
246
tb<3 >(dEdxi).device (*dev.edevice ) += t<1 >(dEdf).reshape (morph).broadcast (bcast);
247
247
}
248
248
}
@@ -274,13 +274,13 @@ void AddVectorToAllColumns::forward_dev_impl(const MyDevice & dev, const vector<
274
274
// Broadcasting is slow on CPU, so split codepaths
275
275
#ifdef __CUDACC__
276
276
if (xs[0 ]->d .bd >= xs[1 ]->d .bd ) {
277
- Eigen::array<int , 3 > bcasts = {1 , ( int ) xs[0 ]->d [1 ], ( int )( xs[0 ]->d .bd /xs[1 ]->d .bd ) };
277
+ Eigen::array<ptrdiff_t , 3 > bcasts = {1 , xs[0 ]->d [1 ], xs[0 ]->d .bd /xs[1 ]->d .bd };
278
278
tb<2 >(fx).device (*dev.edevice ) = tb<2 >(*xs[0 ]) + tb<2 >(*xs[1 ]).broadcast (bcasts);
279
279
} else {
280
280
DYNET_ASSERT (xs[0 ]->d .bd == 1 ,
281
281
" Bad dimensions in AddVectorToAllColumns::forward: " << xs[0 ]->d << " , " << xs[1 ]->d );
282
- Eigen::array<int , 3 > bcasts0 = {1 , 1 , ( int ) xs[1 ]->d .bd };
283
- Eigen::array<int , 3 > bcasts1 = {1 , ( int ) xs[0 ]->d [1 ], 1 };
282
+ Eigen::array<ptrdiff_t , 3 > bcasts0 = {1 , 1 , xs[1 ]->d .bd };
283
+ Eigen::array<ptrdiff_t , 3 > bcasts1 = {1 , xs[0 ]->d [1 ], 1 };
284
284
tb<2 >(fx).device (*dev.edevice ) = tb<2 >(*xs[0 ]).broadcast (bcasts0) + tb<2 >(*xs[1 ]).broadcast (bcasts1);
285
285
}
286
286
#else
@@ -315,17 +315,17 @@ void AddVectorToAllColumns::backward_dev_impl(const MyDevice & dev,
315
315
if (dEdf.d .bd == dEdxi.d .bd ) {
316
316
tvec (dEdxi).device (*dev.edevice ) += tvec (dEdf);
317
317
} else {
318
- Eigen::array<int , 1 > red_axis = {2 };
318
+ Eigen::array<ptrdiff_t , 1 > red_axis = {2 };
319
319
t<2 >(dEdxi).device (*dev.edevice ) += tb<2 >(dEdf).sum (red_axis);
320
320
}
321
321
} else { // bias
322
322
if (dEdf.d .bd == dEdxi.d .bd ) {
323
- Eigen::array<int , 1 > red_axis = {1 };
323
+ Eigen::array<ptrdiff_t , 1 > red_axis = {1 };
324
324
tb<1 >(dEdxi).device (*dev.edevice ) += tb<2 >(dEdf).sum (red_axis);
325
325
} else {
326
326
DYNET_ASSERT (dEdxi.d .bd == 1 ,
327
327
" Bad dimensions in AddVectorToAllColumns::backward: " << xs[0 ]->d << " , " << xs[1 ]->d );
328
- Eigen::array<int , 2 > red_axis = {1 ,2 };
328
+ Eigen::array<ptrdiff_t , 2 > red_axis = {1 ,2 };
329
329
t<1 >(dEdxi).device (*dev.edevice ) += tb<2 >(dEdf).sum (red_axis);
330
330
}
331
331
}
0 commit comments