|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once |
|
|
|
|
|
#include <cstddef> |
|
|
#include <cstdint> |
|
|
#include "fbgemm/FbgemmBuild.h" |
|
|
#include "fbgemm/Types.h" |
|
|
|
|
|
namespace fbgemm { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FBGEMM_API void |
|
|
FloatToBfloat16_ref(const float* src, bfloat16* dst, size_t size); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FBGEMM_API void |
|
|
Bfloat16ToFloat_ref(const bfloat16* src, float* dst, size_t size); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FBGEMM_API void |
|
|
FloatToBfloat16_simd(const float* src, bfloat16* dst, size_t size); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FBGEMM_API void |
|
|
Bfloat16ToFloat_simd(const bfloat16* src, float* dst, size_t size); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FBGEMM_API void |
|
|
FloatToBfloat16_avx2(const float* src, bfloat16* dst, size_t size); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(FBGEMM_FBCODE) || !defined(__aarch64__) |
|
|
FBGEMM_API void |
|
|
FloatToBfloat16_avx512(const float* src, bfloat16* dst, size_t size); |
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FBGEMM_API void |
|
|
Bfloat16ToFloat_avx2(const bfloat16* src, float* dst, size_t size); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(FBGEMM_FBCODE) || !defined(__aarch64__) |
|
|
FBGEMM_API void |
|
|
Bfloat16ToFloat_avx512(const bfloat16* src, float* dst, size_t size); |
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FBGEMM_API void FloatToFloat16_ref( |
|
|
const float* src, |
|
|
float16* dst, |
|
|
size_t size, |
|
|
bool do_clip = false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FBGEMM_API void Float16ToFloat_ref(const float16* src, float* dst, size_t size); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FBGEMM_API void FloatToFloat16_simd( |
|
|
const float* src, |
|
|
float16* dst, |
|
|
size_t size, |
|
|
bool do_clip = false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FBGEMM_API void |
|
|
Float16ToFloat_simd(const float16* src, float* dst, size_t size); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FBGEMM_API void FloatToFloat16_avx2( |
|
|
const float* src, |
|
|
float16* dst, |
|
|
size_t size, |
|
|
bool do_clip = false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(FBGEMM_FBCODE) || !defined(__aarch64__) |
|
|
FBGEMM_API void FloatToFloat16_avx512( |
|
|
const float* src, |
|
|
float16* dst, |
|
|
size_t size, |
|
|
bool do_clip = false); |
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FBGEMM_API void FloatToFloat16_sve2( |
|
|
const float* src, |
|
|
float16* dst, |
|
|
size_t size, |
|
|
bool do_clip = false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FBGEMM_API void |
|
|
Float16ToFloat_avx2(const float16* src, float* dst, size_t size); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(FBGEMM_FBCODE) || !defined(__aarch64__) |
|
|
FBGEMM_API void |
|
|
Float16ToFloat_avx512(const float16* src, float* dst, size_t size); |
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FBGEMM_API void RoundToFloat16( |
|
|
const float* input, |
|
|
float* output, |
|
|
size_t size, |
|
|
bool clamp = false, |
|
|
bool clamp_denorms = false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FBGEMM_API void FloatToFloat8_ref( |
|
|
float input, |
|
|
uint8_t* output, |
|
|
int exponent_bits, |
|
|
int exponent_bias); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FBGEMM_API void Float8ToFloat_ref( |
|
|
uint8_t input, |
|
|
float* output, |
|
|
int exponent_bits, |
|
|
int exponent_bias); |
|
|
|
|
|
} |
|
|
|