@@ -32,7 +32,8 @@ class PaddingLoDTensorFunctor<platform::CPUDeviceContext, T> {
32
32
framework::LoD abs_offset_lod = framework::ToAbsOffset (lod);
33
33
34
34
auto seq_dims = seq.dims ();
35
- PADDLE_ENFORCE_EQ (seq_dims[0 ], abs_offset_lod[level].back (),
35
+ PADDLE_ENFORCE_EQ (seq_dims[0 ],
36
+ static_cast <int64_t >(abs_offset_lod[level].back ()),
36
37
" The first dimension of LoDTensor seq should be "
37
38
" equal to the sum of all sequences's length." );
38
39
@@ -41,32 +42,32 @@ class PaddingLoDTensorFunctor<platform::CPUDeviceContext, T> {
41
42
" The input padding should be a 3-D Tensor of shape "
42
43
" [max_sequence_length, num_sequences, sequence_width]." );
43
44
44
- const size_t max_sequence_length = MaximumSequenceLength (lod, level);
45
+ const int64_t max_sequence_length = MaximumSequenceLength (lod, level);
45
46
PADDLE_ENFORCE_EQ (padding_dims[0 ], max_sequence_length,
46
47
" The first dimension of Tensor padding should be the "
47
48
" maximum length of all sequences in LoDTensor seq." );
48
49
49
- const size_t num_sequences = abs_offset_lod[level].size () - 1 ;
50
+ const int64_t num_sequences = abs_offset_lod[level].size () - 1 ;
50
51
PADDLE_ENFORCE_EQ (padding_dims[1 ], num_sequences,
51
52
" The second dimension of Tensor padding should be the "
52
53
" number of sequences in LoDTensor seq." );
53
54
54
- const size_t sequence_width = seq.numel () / seq_dims[0 ];
55
+ const int64_t sequence_width = seq.numel () / seq_dims[0 ];
55
56
PADDLE_ENFORCE_EQ (padding_dims[2 ], sequence_width,
56
57
" The third dimension of Tensor padding should be the "
57
58
" width of sequence in LoDTensor seq." );
58
59
59
60
const T* seq_data = seq.data <T>();
60
61
T* padding_data = padding.data <T>();
61
- for (size_t i = 0 ; i < max_sequence_length; ++i) {
62
- for (size_t j = 0 ; j < num_sequences; ++j) {
63
- size_t start_pos = abs_offset_lod[level][j];
64
- size_t sequence_length = abs_offset_lod[level][j + 1 ] - start_pos;
62
+ for (int64_t i = 0 ; i < max_sequence_length; ++i) {
63
+ for (int64_t j = 0 ; j < num_sequences; ++j) {
64
+ int64_t start_pos = abs_offset_lod[level][j];
65
+ int64_t sequence_length = abs_offset_lod[level][j + 1 ] - start_pos;
65
66
if (i < sequence_length) {
66
67
// i > 0 => sequence_length > 0
67
68
T scale =
68
69
norm_by_times ? (1 .0f / static_cast <T>(sequence_length)) : 1 .0f ;
69
- for (size_t k = 0 ; k < sequence_width; ++k) {
70
+ for (int64_t k = 0 ; k < sequence_width; ++k) {
70
71
padding_data[(i * num_sequences + j) * sequence_width + k] =
71
72
seq_data[(start_pos + i) * sequence_width + k] * scale;
72
73
}
@@ -93,7 +94,8 @@ class UnpaddingLoDTensorFunctor<platform::CPUDeviceContext, T> {
93
94
framework::LoD abs_offset_lod = framework::ToAbsOffset (lod);
94
95
95
96
auto seq_dims = seq.dims ();
96
- PADDLE_ENFORCE_EQ (seq_dims[0 ], abs_offset_lod[level].back (),
97
+ PADDLE_ENFORCE_EQ (seq_dims[0 ],
98
+ static_cast <int64_t >(abs_offset_lod[level].back ()),
97
99
" The first dimension of LoDTensor seq should be "
98
100
" equal to the sum of all sequences's length." );
99
101
@@ -102,31 +104,31 @@ class UnpaddingLoDTensorFunctor<platform::CPUDeviceContext, T> {
102
104
" The input padding should be a 3-D Tensor of shape "
103
105
" [max_sequnece_length, num_sequences, sequence_width]." );
104
106
105
- const size_t max_sequence_length = MaximumSequenceLength (lod, level);
107
+ const int64_t max_sequence_length = MaximumSequenceLength (lod, level);
106
108
PADDLE_ENFORCE_EQ (padding_dims[0 ], max_sequence_length,
107
109
" The first dimension of Tensor padding should be "
108
110
" the maximum length of all sequences in LoDTensor seq." );
109
111
110
- const size_t num_sequences = abs_offset_lod[level].size () - 1 ;
112
+ const int64_t num_sequences = abs_offset_lod[level].size () - 1 ;
111
113
PADDLE_ENFORCE_EQ (padding_dims[1 ], num_sequences,
112
114
" The second dimension of Tensor padding should be "
113
115
" the number of sequences in LoDTensor seq." );
114
116
115
- const size_t sequence_width = seq.numel () / seq_dims[0 ];
117
+ const int64_t sequence_width = seq.numel () / seq_dims[0 ];
116
118
PADDLE_ENFORCE_EQ (padding_dims[2 ], sequence_width,
117
119
" The third dimension of Tensor padding should be the "
118
120
" width of sequence in LoDTensor seq." );
119
121
120
122
const T* padding_data = padding.data <T>();
121
123
T* seq_data = seq.data <T>();
122
- for (size_t i = 0 ; i < num_sequences; ++i) {
123
- size_t start_pos = abs_offset_lod[level][i];
124
- size_t sequence_length = abs_offset_lod[level][i + 1 ] - start_pos;
125
- for (size_t j = 0 ; j < sequence_length; ++j) {
124
+ for (int64_t i = 0 ; i < num_sequences; ++i) {
125
+ int64_t start_pos = abs_offset_lod[level][i];
126
+ int64_t sequence_length = abs_offset_lod[level][i + 1 ] - start_pos;
127
+ for (int64_t j = 0 ; j < sequence_length; ++j) {
126
128
// sequence_width > j > 0
127
129
T scale =
128
130
norm_by_times ? (1 .0f / static_cast <T>(sequence_length)) : 1 .0f ;
129
- for (size_t k = 0 ; k < sequence_width; ++k) {
131
+ for (int64_t k = 0 ; k < sequence_width; ++k) {
130
132
seq_data[(start_pos + j) * sequence_width + k] =
131
133
padding_data[(j * num_sequences + i) * sequence_width + k] *
132
134
scale;
0 commit comments