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 JVM

From Leeroopedia
Revision as of 15:46, 16 February 2026 by Admin (talk | contribs) (Auto-imported from implementations/Microsoft_Onnxruntime_Fp16Conversions_JVM.md)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)


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

Domains

  • Machine Learning Runtime
  • Floating Point Conversion
  • JVM Platform

Overview

Fp16Conversions (JVM variant) is a final utility class providing conversions between IEEE fp16, bfloat16, and fp32 formats on standard JVM platforms. Unlike the Android variant, this version uses MethodHandle lookup to detect and use Java 20+ Float.float16ToFloat/Float.floatToFloat16 intrinsics at runtime. When running on Java 19 or earlier, it falls back to the MLAS-ported software conversion methods.

Description

The class uses a static initializer to probe for Java 20+ methods via MethodHandles.Lookup:

  • If Float.float16ToFloat and Float.floatToFloat16 are found, they are bound to MethodHandle fields for potential SIMD acceleration.
  • Otherwise, the MLAS-ported methods (mlasFp16ToFloat, mlasFloatToFp16) are bound.

Buffer conversions:

  • convertFloatBufferToFp16Buffer(FloatBuffer): Rounds fp32 to fp16.
  • convertFp16BufferToFloatBuffer(ShortBuffer): Casts fp16 to fp32.
  • convertFloatBufferToBf16Buffer(FloatBuffer): Rounds fp32 to bf16.
  • convertBf16BufferToFloatBuffer(ShortBuffer): Casts bf16 to fp32.

Scalar conversions:

  • fp16ToFloat(short) / floatToFp16(float): Invoke the detected MethodHandle (Java 20+ intrinsics or MLAS fallback).
  • mlasFp16ToFloat(short) / mlasFloatToFp16(float): Software implementations ported from MLAS.
  • bf16ToFloat(short) / floatToBf16(float): Direct bit manipulation.

Code Reference

Source Location

// File: java/src/main/jvm/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.*;

// On Java 20+, these use hardware-accelerated conversions
short fp16Val = Fp16Conversions.floatToFp16(3.14f);
float fp32Val = Fp16Conversions.fp16ToFloat(fp16Val);

// Buffer-level conversion (creates new direct buffers)
FloatBuffer floatBuf = FloatBuffer.wrap(new float[]{1.0f, 2.0f, 3.0f});
ShortBuffer fp16Buf = Fp16Conversions.convertFloatBufferToFp16Buffer(floatBuf);

// BF16 round-trip
short bf16 = Fp16Conversions.floatToBf16(2.71828f);
float fromBf16 = Fp16Conversions.bf16ToFloat(bf16);

// Force MLAS software conversion (always available)
float mlasResult = Fp16Conversions.mlasFp16ToFloat(fp16Val);

Related Pages

Page Connections

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