Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Implementation:Microsoft Onnxruntime Fp16Conversions Android

From Leeroopedia


Knowledge Sources Description
Source File java/src/main/android/ai/onnxruntime/platform/Fp16Conversions.java
Repository Microsoft/onnxruntime

Domains

  • Machine Learning Runtime
  • Floating Point Conversion
  • Android Platform

Overview

Fp16Conversions (Android variant) is a final utility class providing conversions between IEEE fp16, bfloat16, and fp32 formats on the Android platform. Unlike the JVM variant, the Android version directly calls the MLAS-ported conversion methods without attempting to use Java 20+ Float.float16ToFloat/Float.floatToFloat16 intrinsics, since Android does not support those methods.

Description

The class provides buffer-level and scalar-level conversions:

Buffer conversions:

  • convertFloatBufferToFp16Buffer(FloatBuffer): Rounds fp32 values to fp16 (stored as shorts).
  • convertFp16BufferToFloatBuffer(ShortBuffer): Casts fp16 shorts to fp32 floats.
  • convertFloatBufferToBf16Buffer(FloatBuffer): Rounds fp32 values to bf16 (stored as shorts).
  • convertBf16BufferToFloatBuffer(ShortBuffer): Casts bf16 shorts to fp32 floats.

Scalar conversions:

  • fp16ToFloat(short) / floatToFp16(float): Aliases to the MLAS conversion methods.
  • mlasFp16ToFloat(short): Port of MLAS_Half2Float, handles normal, subnormal, Inf, and NaN.
  • mlasFloatToFp16(float): Port of MLAS_Float2Half with round-to-nearest-even.
  • bf16ToFloat(short): Simple left-shift by 16 bits.
  • floatToBf16(float): Truncation with round-to-nearest-even bias.

All buffer methods allocate new direct buffers and respect input position/limit.

Code Reference

Source Location

// File: java/src/main/android/ai/onnxruntime/platform/Fp16Conversions.java
// Package: ai.onnxruntime.platform

Signature

public final class Fp16Conversions {
    public static ShortBuffer convertFloatBufferToFp16Buffer(FloatBuffer buf);
    public static FloatBuffer convertFp16BufferToFloatBuffer(ShortBuffer buf);
    public static ShortBuffer convertFloatBufferToBf16Buffer(FloatBuffer buf);
    public static FloatBuffer convertBf16BufferToFloatBuffer(ShortBuffer buf);
    public static float fp16ToFloat(short input);
    public static short floatToFp16(float input);
    public static float mlasFp16ToFloat(short input);
    public static short mlasFloatToFp16(float input);
    public static float bf16ToFloat(short input);
    public static short floatToBf16(float input);
}

Import

import ai.onnxruntime.platform.Fp16Conversions;

I/O Contract

Inputs

Name Type Description
buf FloatBuffer or ShortBuffer Buffer of source values to convert
input float or short Single value to convert

Outputs

Name Type Description
ShortBuffer ShortBuffer Direct buffer containing fp16/bf16 values as shorts
FloatBuffer FloatBuffer Direct buffer containing fp32 values
float float Single converted fp32 value
short short Single converted fp16/bf16 value

Usage Examples

import ai.onnxruntime.platform.Fp16Conversions;
import java.nio.*;

// Convert fp32 buffer to fp16
FloatBuffer floatBuf = FloatBuffer.wrap(new float[]{1.0f, 0.5f, -3.14f});
ShortBuffer fp16Buf = Fp16Conversions.convertFloatBufferToFp16Buffer(floatBuf);

// Convert back to fp32
FloatBuffer roundTrip = Fp16Conversions.convertFp16BufferToFloatBuffer(fp16Buf);

// Scalar conversions
short fp16Val = Fp16Conversions.floatToFp16(3.14f);
float fp32Val = Fp16Conversions.fp16ToFloat(fp16Val);

// BF16 conversions
short bf16Val = Fp16Conversions.floatToBf16(2.71828f);
float fromBf16 = Fp16Conversions.bf16ToFloat(bf16Val);

Related Pages

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment