【发布时间】:2020-04-28 11:16:30
【问题描述】:
由于 C 语言没有半浮点实现,如何向 ONNXRuntime C API 发送数据?
【问题讨论】:
标签: c++ c onnx onnxruntime
由于 C 语言没有半浮点实现,如何向 ONNXRuntime C API 发送数据?
【问题讨论】:
标签: c++ c onnx onnxruntime
您可能可以从此处链接到一个示例:https://github.com/microsoft/onnxruntime/issues/1173#issuecomment-501088662
您可以使用 CreateTensorAsOrtValue 创建一个缓冲区以将输入数据写入其中,并使用 GetTensorMutableData 访问 OrtValue 内的缓冲区。
ONNXRuntime 使用 Eigen 将浮点数转换为可以写入该缓冲区的 16 位值。
uint16_t floatToHalf(float f) {
return Eigen::half_impl::float_to_half_rtne(f).x;
}
或者,您可以编辑模型以将 Cast 节点从 float32 添加到 float16,以便模型将 float32 作为输入。
【讨论】:
C 语言没有半浮点实现
是的,但是有语言扩展,您可以编写自己的库来处理数据。
例如,在某些架构上,gcc 支持 ISO/IEC TS 18661-3:2015 定义的 _Float16 类型。
您可以编写或find a library 来处理半浮点运算。
【讨论】: