Files
wehub-resource-sync 2aaeece67c
Codestyle Check / Lint (push) Has been cancelled
Codestyle Check / Check bypass (push) Has been cancelled
Pipelines-Test / Pipelines-Test (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:37:14 +08:00

76 lines
2.5 KiB
Plaintext

// Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "helper.h"
template<typename T>
__global__ void SaveOutputDygraphKernel(
T* out_pool,
const T* cur_out,
const int64_t* step_idx,
const int* result_idx,
const int bsz,
const int result_num,
const int max_dec_len) {
for (int bid = blockIdx.x; bid < bsz; bid += gridDim.x) {
auto src_addr = cur_out + bid;
auto cur_step_idx = step_idx[bid] - 1;
for (int i = threadIdx.x; i < result_num; i += blockDim.x) {
auto tgt_id = result_idx[bid * result_num + i];
if (tgt_id >= 0) {
auto tgt_addr = out_pool + tgt_id * max_dec_len + cur_step_idx;
*tgt_addr = *src_addr;
}
}
}
}
void SaveOutputDygraph(
const paddle::Tensor& all_token_ids,
const paddle::Tensor& tokens,
const paddle::Tensor& result_ids,
const paddle::Tensor& step_idx
) {
auto cu_stream = all_token_ids.stream();
const int bsz = tokens.shape()[0];
const int result_num = result_ids.shape()[1];
const int max_dec_len = all_token_ids.shape()[1];
SaveOutputDygraphKernel<<<bsz, 256, 0, cu_stream>>>(
const_cast<int64_t*>(all_token_ids.data<int64_t>()),
tokens.data<int64_t>(),
step_idx.data<int64_t>(),
result_ids.data<int>(),
bsz,
result_num,
max_dec_len
);
// SaveOutputDygraphKernel<<<bsz, 256, 0, cu_stream>>>(
// const_cast<float*>(all_scores.data<float>()),
// scores.data<float>(),
// step_idx.data<int64_t>(),
// result_ids.data<int>(),
// bsz,
// result_num,
// max_dec_len
// );
}
PD_BUILD_OP(save_output_dygraph)
.Inputs({"all_token_ids", "tokens", "result_ids", "step_idx"})
.Outputs({"all_token_ids_out"})
.SetInplaceMap({{"all_token_ids", "all_token_ids_out"}})
.SetKernelFn(PD_KERNEL(SaveOutputDygraph));