@@ -34,6 +34,26 @@ void CalibComputeFp32ToInt8<Ptype, DLType>::Run() {
3434 din, dout, scale.data (), 1 , 1 , param.input ->numel ());
3535}
3636
37+ template <PrecisionType Ptype, DataLayoutType DLType>
38+ void CalibComputeFp32ToFp16<Ptype, DLType>::Run() {
39+ auto & param = this ->template Param <operators::CalibParam>();
40+ const auto * din = param.input ->template data <float >();
41+ auto * dout = param.output ->template mutable_data <float16>();
42+ for (auto i = 0 ; i < param.input ->numel (); ++i) {
43+ dout[i] = static_cast <float16>(din[i]);
44+ }
45+ }
46+
47+ template <PrecisionType Ptype, DataLayoutType DLType>
48+ void CalibComputeFp16ToFp32<Ptype, DLType>::Run() {
49+ auto & param = this ->template Param <operators::CalibParam>();
50+ const auto * din = param.input ->template data <float16>();
51+ auto * dout = param.output ->template mutable_data <float >();
52+ for (auto i = 0 ; i < param.input ->numel (); ++i) {
53+ dout[i] = static_cast <float >(din[i]);
54+ }
55+ }
56+
3757template <PrecisionType Ptype, DataLayoutType DLType>
3858void CalibComputeInt64ToInt32<Ptype, DLType>::Run() {
3959 auto & param = this ->template Param <operators::CalibParam>();
@@ -84,6 +104,26 @@ void CalibComputeFp32ToInt32<Ptype, DLType>::Run() {
84104 }
85105}
86106
107+ template <PrecisionType Ptype, DataLayoutType DLType>
108+ void CalibComputeInt32ToFp16<Ptype, DLType>::Run() {
109+ auto & param = this ->template Param <operators::CalibParam>();
110+ const auto * din = param.input ->template data <int32_t >();
111+ auto * dout = param.output ->template mutable_data <float16>();
112+ for (auto i = 0 ; i < param.input ->numel (); ++i) {
113+ dout[i] = static_cast <float16>(din[i]);
114+ }
115+ }
116+
117+ template <PrecisionType Ptype, DataLayoutType DLType>
118+ void CalibComputeFp16ToInt32<Ptype, DLType>::Run() {
119+ auto & param = this ->template Param <operators::CalibParam>();
120+ const auto * din = param.input ->template data <float16>();
121+ auto * dout = param.output ->template mutable_data <int32_t >();
122+ for (auto i = 0 ; i < param.input ->numel (); ++i) {
123+ dout[i] = static_cast <int32_t >(din[i]);
124+ }
125+ }
126+
87127template <PrecisionType Ptype, DataLayoutType DLType>
88128void CalibComputeInt64ToFp32<Ptype, DLType>::Run() {
89129 auto & param = this ->template Param <operators::CalibParam>();
@@ -171,6 +211,23 @@ REGISTER_LITE_KERNEL(
171211 .BindOutput(" Out" , {LiteType::GetTensorTy (TARGET (kX86 ), PRECISION (kFloat ))})
172212 .Finalize();
173213
214+ typedef paddle::lite::kernels::x86::CalibComputeFp32ToFp16<PRECISION(kFloat ),
215+ DATALAYOUT (kNCHW )>
216+ fp_fp32_to_fp16;
217+ REGISTER_LITE_KERNEL (calib, kX86 , kFloat , kNCHW , fp_fp32_to_fp16, fp32_to_fp16)
218+ .BindInput(" Input" ,
219+ {LiteType::GetTensorTy (TARGET (kX86 ), PRECISION (kFloat ))})
220+ .BindOutput(" Out" , {LiteType::GetTensorTy (TARGET (kX86 ), PRECISION (kFP16 ))})
221+ .Finalize();
222+
223+ typedef paddle::lite::kernels::x86::CalibComputeFp16ToFp32<PRECISION(kFP16 ),
224+ DATALAYOUT (kNCHW )>
225+ fp16_fp16_to_fp32;
226+ REGISTER_LITE_KERNEL (calib, kX86 , kFP16 , kNCHW , fp16_fp16_to_fp32, fp16_to_fp32)
227+ .BindInput(" Input" , {LiteType::GetTensorTy (TARGET (kX86 ), PRECISION (kFP16 ))})
228+ .BindOutput(" Out" , {LiteType::GetTensorTy (TARGET (kX86 ), PRECISION (kFloat ))})
229+ .Finalize();
230+
174231REGISTER_LITE_KERNEL (
175232 calib_once, kX86 , kInt8 , kNCHW , i8_fp32_to_int8, fp32_to_int8)
176233 .BindInput(" Input" ,
@@ -223,3 +280,21 @@ REGISTER_LITE_KERNEL(
223280 {LiteType::GetTensorTy (TARGET (kX86 ), PRECISION (kInt64 ))})
224281 .BindOutput(" Out" , {LiteType::GetTensorTy (TARGET (kX86 ), PRECISION (kFloat ))})
225282 .Finalize();
283+
284+ typedef paddle::lite::kernels::x86::CalibComputeInt32ToFp16<PRECISION(kFloat ),
285+ DATALAYOUT (kNCHW )>
286+ fp_int32_to_fp16;
287+ REGISTER_LITE_KERNEL (
288+ calib, kX86 , kFloat , kNCHW , fp_int32_to_fp16, int32_to_fp16)
289+ .BindInput(" Input" ,
290+ {LiteType::GetTensorTy (TARGET (kX86 ), PRECISION (kInt32 ))})
291+ .BindOutput(" Out" , {LiteType::GetTensorTy (TARGET (kX86 ), PRECISION (kFP16 ))})
292+ .Finalize();
293+ typedef paddle::lite::kernels::x86::CalibComputeFp16ToInt32<PRECISION(kFloat ),
294+ DATALAYOUT (kNCHW )>
295+ fp_fp16_to_int32;
296+ REGISTER_LITE_KERNEL (
297+ calib, kX86 , kFloat , kNCHW , fp_fp16_to_int32, fp16_to_int32)
298+ .BindInput(" Input" , {LiteType::GetTensorTy (TARGET (kX86 ), PRECISION (kFP16 ))})
299+ .BindOutput(" Out" , {LiteType::GetTensorTy (TARGET (kX86 ), PRECISION (kInt32 ))})
300+ .Finalize();
0 commit comments