@ -101,6 +101,18 @@ void DataFeed::AssignFeedVar(const Scope& scope) {
}
}
void DataFeed : : CopyToFeedTensor ( void * dst , const void * src , size_t size ) {
if ( platform : : is_cpu_place ( this - > place_ ) ) {
memcpy ( dst , src , size ) ;
} else {
# ifdef PADDLE_WITH_CUDA
cudaMemcpy ( dst , src , size , cudaMemcpyHostToDevice ) ;
# else
PADDLE_THROW ( " Not supported GPU, Please compile WITH_GPU option " ) ;
# endif
}
}
template < typename T >
void PrivateQueueDataFeed < T > : : SetQueueSize ( int queue_size ) {
PADDLE_ENFORCE ( queue_size > 0 , " Illegal queue size: %d. " , queue_size ) ;
@ -612,15 +624,16 @@ void MultiSlotDataFeed::PutToFeedVec(
if ( type [ 0 ] = = ' f ' ) { // float
const auto & feasign = ins_vec [ i ] . GetFloatData ( ) ;
float * tensor_ptr = feed_vec_ [ i ] - > mutable_data < float > (
{ total_instance , 1 } , platform : : CPUPlace ( ) ) ;
memcpy ( tensor_ptr , & feasign [ 0 ] , total_instance * sizeof ( float ) ) ;
float * tensor_ptr =
feed_vec_ [ i ] - > mutable_data < float > ( { total_instance , 1 } , this - > place_ ) ;
CopyToFeedTensor ( tensor_ptr , & feasign [ 0 ] , total_instance * sizeof ( float ) ) ;
} else if ( type [ 0 ] = = ' u ' ) { // uint64
// no uint64_t type in paddlepaddle
const auto & feasign = ins_vec [ i ] . GetUint64Data ( ) ;
int64_t * tensor_ptr = feed_vec_ [ i ] - > mutable_data < int64_t > (
{ total_instance , 1 } , platform : : CPUPlace ( ) ) ;
memcpy ( tensor_ptr , & feasign [ 0 ] , total_instance * sizeof ( int64_t ) ) ;
{ total_instance , 1 } , this - > place_ ) ;
CopyToFeedTensor ( tensor_ptr , & feasign [ 0 ] ,
total_instance * sizeof ( int64_t ) ) ;
}
LoD data_lod { offset } ;
@ -874,15 +887,15 @@ void MultiSlotInMemoryDataFeed::PutToFeedVec(
const auto & type = all_slots_type_ [ i ] ;
if ( type [ 0 ] = = ' f ' ) { // float
float * feasign = batch_float_feasigns [ i ] . data ( ) ;
float * tensor_ptr = feed_vec_ [ i ] - > mutable_data < float > (
{ total_instance , 1 } , platform : : CPUPlace ( ) ) ;
memcpy ( tensor_ptr , feasign , total_instance * sizeof ( float ) ) ;
float * tensor_ptr =
feed_vec_ [ i ] - > mutable_data < float > ( { total_instance , 1 } , this - > place_ ) ;
CopyToFeedTensor ( tensor_ptr , feasign , total_instance * sizeof ( float ) ) ;
} else if ( type [ 0 ] = = ' u ' ) { // uint64
// no uint64_t type in paddlepaddle
uint64_t * feasign = batch_uint64_feasigns [ i ] . data ( ) ;
int64_t * tensor_ptr = feed_vec_ [ i ] - > mutable_data < int64_t > (
{ total_instance , 1 } , platform : : CPUPlace ( ) ) ;
memcpy ( tensor_ptr , feasign , total_instance * sizeof ( int64_t ) ) ;
{ total_instance , 1 } , this - > place_ ) ;
CopyToFeedTensor ( tensor_ptr , feasign , total_instance * sizeof ( int64_t ) ) ;
}
auto & slot_offset = offset [ i ] ;
LoD data_lod { slot_offset } ;
@ -908,15 +921,16 @@ void PrivateInstantDataFeed<T>::PutToFeedVec() {
if ( type [ 0 ] = = ' f ' ) { // float
const auto & feasign = ins_vec_ [ i ] . GetFloatData ( ) ;
float * tensor_ptr = feed_vec_ [ i ] - > mutable_data < float > (
{ total_instance , 1 } , platform : : CPUPlace ( ) ) ;
memcpy ( tensor_ptr , & feasign [ 0 ] , total_instance * sizeof ( float ) ) ;
float * tensor_ptr =
feed_vec_ [ i ] - > mutable_data < float > ( { total_instance , 1 } , this - > place_ ) ;
CopyToFeedTensor ( tensor_ptr , & feasign [ 0 ] , total_instance * sizeof ( float ) ) ;
} else if ( type [ 0 ] = = ' u ' ) { // uint64
// no uint64_t type in paddlepaddle
const auto & feasign = ins_vec_ [ i ] . GetUint64Data ( ) ;
int64_t * tensor_ptr = feed_vec_ [ i ] - > mutable_data < int64_t > (
{ total_instance , 1 } , platform : : CPUPlace ( ) ) ;
memcpy ( tensor_ptr , & feasign [ 0 ] , total_instance * sizeof ( int64_t ) ) ;
{ total_instance , 1 } , this - > place_ ) ;
CopyToFeedTensor ( tensor_ptr , & feasign [ 0 ] ,
total_instance * sizeof ( int64_t ) ) ;
}
LoD data_lod { offset } ;