Skip to content

Commit 65d9d49

Browse files
q10facebook-github-bot
authored andcommitted
Add support for int64_t indices and offsets in TBE inference [9/N]
Summary: X-link: facebookresearch/FBGEMM#354 Convert `void embedding_inplace_update_cpu_kernel` to handle `int64_t` remap indices Differential Revision: D64619774
1 parent 25cff5c commit 65d9d49

1 file changed

Lines changed: 36 additions & 27 deletions

File tree

fbgemm_gpu/src/embedding_inplace_ops/embedding_inplace_update_cpu.cpp

Lines changed: 36 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -130,34 +130,43 @@ Tensor pruned_array_lookup_from_row_idx_cpu(
130130
const auto num_indices = update_row_indices.numel();
131131

132132
AT_DISPATCH_INDEX_TYPES(
133-
update_row_indices.scalar_type(),
134-
"pruned_array_lookup_from_row_idx_cpu_kernel",
133+
index_remappings.scalar_type(),
134+
"pruned_array_lookup_from_row_idx_cpu_0",
135135
[&] {
136-
const auto update_row_indices_acc =
137-
update_row_indices.accessor<index_t, 1>();
138-
auto dense_indices_acc = dense_indices.accessor<index_t, 1>();
139-
const auto update_table_indices_acc =
140-
update_table_indices.accessor<int32_t, 1>();
141-
142-
const auto index_remappings_acc =
143-
index_remappings.accessor<int32_t, 1>();
144-
const auto index_remappings_offsets_acc =
145-
index_remappings_offsets.accessor<int64_t, 1>();
146-
for (const auto idx : c10::irange(num_indices)) {
147-
const int table_idx = update_table_indices_acc[idx];
148-
const auto row_idx = update_row_indices_acc[idx];
149-
int64_t index_remappings_start =
150-
index_remappings_offsets_acc[table_idx];
151-
int64_t index_remappings_end =
152-
index_remappings_offsets_acc[table_idx + 1];
153-
int64_t capacity = index_remappings_end - index_remappings_start;
154-
if (capacity > 0) {
155-
dense_indices_acc[idx] =
156-
index_remappings_acc[index_remappings_start + row_idx];
157-
} else {
158-
dense_indices_acc[idx] = row_idx;
159-
}
160-
}
136+
using remap_t = index_t;
137+
138+
AT_DISPATCH_INDEX_TYPES(
139+
update_row_indices.scalar_type(),
140+
"pruned_array_lookup_from_row_idx_cpu_1",
141+
[&] {
142+
const auto update_row_indices_acc =
143+
update_row_indices.accessor<index_t, 1>();
144+
auto dense_indices_acc = dense_indices.accessor<index_t, 1>();
145+
const auto update_table_indices_acc =
146+
update_table_indices.accessor<int32_t, 1>();
147+
const auto index_remappings_acc =
148+
index_remappings.accessor<remap_t, 1>();
149+
const auto index_remappings_offsets_acc =
150+
index_remappings_offsets.accessor<int64_t, 1>();
151+
152+
for (const auto idx : c10::irange(num_indices)) {
153+
const auto table_idx = update_table_indices_acc[idx];
154+
const auto row_idx = update_row_indices_acc[idx];
155+
const auto index_remappings_start =
156+
index_remappings_offsets_acc[table_idx];
157+
const auto index_remappings_end =
158+
index_remappings_offsets_acc[table_idx + 1];
159+
const auto capacity =
160+
index_remappings_end - index_remappings_start;
161+
162+
if (capacity > 0) {
163+
dense_indices_acc[idx] = static_cast<index_t>(
164+
index_remappings_acc[index_remappings_start + row_idx]);
165+
} else {
166+
dense_indices_acc[idx] = static_cast<index_t>(row_idx);
167+
}
168+
}
169+
});
161170
});
162171
return dense_indices;
163172
}

0 commit comments

Comments
 (0)