问题标签 [half-precision-float]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opencl - 带有 OpenCL 1.2 的 NVIDIA Ampere 代 GPU 支持或不支持半精度浮点
我在 OpenCL 中使用 float4 元素实现了一个带有 read_imagef 和 write_imagef 操作的内核,它工作正常。
然后我尝试使用半精度浮点元素来实现。在这种情况下,我收到一个构建错误,指示“ptxas fatal: Cannot take address of function read_imageh”或访问 halfn 变量时的其他类似错误消息。
在使用 CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF 参数检查 clGetDeviceInfo 时,得到 0 表示不支持。我认为情况不应该如此,因为 NVIDIA Ampere 架构支持半精度浮点运算。
使用的设备是带有 OpenCL 版本 1.2 的 NVIDIA GeForce RTX 3060 Ti。
flutter - 在 Flutter 中将 ieee754 半精度字节转换为双精度,反之亦然
我有一个以 ieee754 半精度浮点格式提供温度数据的设备,即[78, 100] = +25.5C
.
现在,Dart/Flutter 不支持开箱即用的 HP-Float 转换。在谷歌搜索之后,我发现了几种解决方案,我能够将它们组合成一个似乎工作正常的解决方案。多年来没有这样做,我要求专业人士检查一下。此外,我相信这将为像我这样需要此功能的人节省一些时间。这已经在 -10C 到 +35C 的温度下进行了测试,并且似乎可以正确转换两种方式。这里_ieee754HpBytesToDouble
将 HPF 字节转换为 64 位双精度,_ieee754HpBytesFromDouble
并将 64 位双精度字节转换为半精度字节。
tensorflow - 如何为您的训练模型选择半精度(BFLOAT16 vs FLOAT16)?
您将如何决定哪种精度最适合您的推理模型?BF16 和 F16 都占用两个字节,但它们对分数和指数使用不同的位数。
范围会有所不同,但我试图理解为什么一个人选择了一个而不是另一个。
谢谢
c - 如何在编译时正确确定支持 _Float16?
我试图在编译时确定_Float16
支持的:
调用:
在这里,我们看到 gcc 和 clang:
- 定义
FLT16_MAX
- 不支持
_Float16
主要问题:如何在编译时正确确定_Float16
支持的?
额外的问题:如果不支持相应的浮动类型,C11(或更新的)标准是否要求不定义 _MIN
/宏?_MAX
例如,对于整数类型 ( <stdint.h>
),它是真的:“它也不应该定义关联的宏”(C11,7.20 整数类型 <stdint.h>,4)。浮动类型也一样吗?
UPD20211117:
- 调用 gcc w/o
-pedantic
会导致警告消失。并且_Float16
得到支持。伟大的! - 调用 clang w/o
-pedantic
不会导致错误消失。可能这是一个错误。
感谢用户 n。1.8e9-where's-my-share m。为了这个想法。
UPD20211118:gcc:-pedantic
已FLT16_MAX
定义,这是意外的(或不是?)。
javascript - 在 Javascript 中读取二进制结构
我有一个我正在尝试用 Javascript 读取的表,其中的数据足够大,我希望以二进制格式保存它以节省空间。该表的大部分内容不是数字就是枚举,但也有一些数据是字符串。我正在尝试找出用 Javascript 读取该数据的最佳方法。有什么建议么?
仅供参考,压缩后的文本版本约为 33 MB,而压缩后的二进制文件约为 20 MB,这就是我尝试减小大小的原因,希望能够更快地加载。我打算用 Python 对数据进行一些预处理,这会将数据减少到我真正关心的数据。我可能正在对这些数据进行一些过滤,但理想情况下我最终想要一个静态网站,所以我强烈希望不必依赖任何类型的服务器端代码。几乎有任何值得注意的文件只有约 1 MB,所以我希望这不是一个大问题。
如果任何系统允许 16 位浮点数,则加分,因为有许多浮点数,16 位的精度足以充分捕获。
到目前为止,我的代码很简单,如下所示。请注意发生任何有用的事情的缺失块......
数据看起来像这样。注意我可能会删除其中的一些列,但这是源数据。在某些引用中,实际上只有第一列将存储为字符串,其他列可以存储为某种类型的数字或转换为数字的枚举。可能会有两个实际的字符串,我想我要把一根字符串分成两部分。
作为参考,打包的 Python 代码如下。如果需要,我可以将e
s 更改为其他值,float32s 或转换为小数的整数,但如果能原生支持会很好。
c++ - 在 x86 CPU 上使用半精度浮点
我打算在我的代码中使用半精度浮点,但我不知道如何声明它们。例如,我想做如下的事情 -
但是,编译器似乎不知道这些类型(出于演示目的fp16
,bfloat
它们只是虚拟类型)
我记得读到bfloat
支持被添加到 GCC-10 中,但我无法在手册中找到它。我对bfloat
浮点数特别感兴趣
其他问题 -
- FP16 现在有硬件支持 Intel / AMD 支持吗?我认为自 Ivy Bridge 本身以来就添加了本机硬件支持。(https://scicomp.stackexchange.com/questions/35187/is-half-precision-supported-by-modern-architecture)
- 我想确认使用 FP16 是否确实会增加 FLOPs。我记得在某处读到,所有算术运算
fp16
都首先在内部转换为 fp32,并且只会影响缓存占用空间和带宽。 - SIMD 对半精度浮点数的内在支持,特别是
bfloat
(我知道_mm256_mul_ph
像 - 这些类型是否也添加到了英特尔编译器中?
PS - 相关帖子 - Intel 芯片上的半精度浮点运算,但不包括声明半精度浮点数。
TIA
opencl - 在 SYCL 中声明半精度浮点内存
我想知道并理解如何在 SYCL 中声明半精度缓冲区和指针,即通过以下方式 -
- 通过缓冲区类。
- 使用 malloc_device() 函数。
另外,假设我在主机端有一个现有的 fp32 矩阵/数组。如何将其内容复制到 GPU 端的 fp16 内存。
TIA
c - GCC:为什么不能在 -std=c11 -Wall 下编译干净的 printf("%f\n", f16)?
示例代码:
调用:
预期诊断:
实际诊断:
这是否意味着在__STDC_WANT_IEC_60559_TYPES_EXT__
AND 下如果FLT16_MAX
定义了 gcc 不知道printf
可以与 一起使用_Float16
?它应该意识到吗?
另外:printf("%f\n", f);
when f
is afloat
导致上面没有警告,尽管format '%f' expects argument of type 'double', but argument 2 has type 'float'
. 使困惑。
c++ - 将半浮点数移位为浮点数
我别无选择,只能读入构成半浮点数的 2 个字节。我想以 4 字节浮点数的形式使用它。我做了一些研究,我唯一能想到的就是位移。我唯一的问题是我不完全理解如何只抓取一些位并将它们放入浮动中。我有这个功能,但它不起作用。
这是 16 位(2 字节)结构 ,这是典型的 32 位(4 字节)浮点数
如果您要为我编写代码,请详细说明。我想了解位运算符和位放置的实际情况。