一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

支持多格式半精度浮点的编译方法与流程

2022-03-22 20:13:40 来源:中国专利 TAG:


1.本发明涉及一种支持多格式半精度浮点的编译方法,属于深度学习技术领域。


背景技术:

2.代码程序可以使用半精度浮点格式来减少内存中移动数据的时间,提升计算速度。半精度浮点格式有fp16和bf16两种格式,这两种格式各有优缺点,bf16格式的指数位比fp16多,小数位比fp16少,因此bf16格式精度低,但是可以表示的数值空间大,而fp16格式精度高,可以表示的数值空间小。英伟达在2002年就提出了fp16半精度浮点格式,bf16半精度浮点格式是由google brain团队发明的,用于第三代tpu,如今已被google、intel、arm等许多公司的ai加速器广泛采用。现有的编译器不支持同时使用fp16格式和bf16格式,在同一个程序中要么使用fp16格式,要么使用bf16格式。
3.双精度和单精度浮点用于计算,半精度更多是为了降低数据传输和存储成本。深度学习促使了人们对半精度浮点数格式的兴趣,通常深度学习算法并不需要64位、甚至32位的浮点数精度,更低的精度可以使在内存中存放更多数据成为可能,并且减少在内存中移动进出数据的时间,低精度浮点数的电路也会更加简单。这些好处结合在一起,带来了明显的计算速度的提升。
4.cuda编译器对fp16格式和bf16格式的半精度浮点都进行了支持,使用fp16格式时包含cuda_fp16.h头文件进行编程,使用bf16格式时包含cuda_bf16.h进行编程,但不支持同时使用fp16格式和bf16格式,同一个程序中要么使用fp16格式,要么使用bf16格式。
5.在人工智能以外的其他计算领域,可能对计算的精度和数值空间都有一定的要求,又想要使用半精度浮点来加速计算,单纯使用fp16格式或bf16格式无法满足应用场景需求。


技术实现要素:

6.本发明的目的是提供一种支持多格式半精度浮点的编译方法,其可以在不增加代码编写复杂度的前提下发挥fp16和bf16两种半精度浮点格式的优势,满足应用场景使用半精度浮点加速计算的需求。
7.为达到上述目的,本发明采用的技术方案是:提供一种支持多格式半精度浮点的编译方法,处理器设置浮点控制状态寄存器,用于确定使用fp16格式和bf16格式中的哪种半精度浮点格式来解析寄存器中的数据,处理器还提供半精度浮点数据转换指令,用于处理fp16格式和bf16格式半精度浮点数据间的相互转换;编译器提供统一的float16关键字用于申明fp16格式和bf16格式的半精度浮点类型,编译器还提供半精度浮点数据格式切换接口用于半精度浮点格式切换,分别为将fp16格式切换为bf16格式的convert_to_bf16()接口和将bf16格式切换为fp16格式的convert_to_fp16()接口,并将接口处理成设置浮点控制状态寄存器的指令;包括以下步骤:
s1、用户代码使用编译器提供的float16关键字来申明半精度浮点数据类型,默认使用fp16格式,还可根据需要通过-mbf16选项切换为使用bf16格式;s2、用户代码根据需要调用半精度浮点数据格式切换接口进行格式切换,在需要提高精度时调用convert_to_fp16()接口,在需要大数值空间时调用convert_to_bf16()接口,处理器通过执行设置浮点控制状态寄存器的指令进行半精度浮点数据格式的切换;s3、用户代码在切换半精度浮点数据格式后,调用编译器提供的半精度浮点数据转换接口convert_float16(float16 *addr, int length)进行数据格式转换,将起始地址为addr、长度为length的半精度浮点数据转换成当前使用的半精度浮点格式;s4、在完成半精度浮点数据格式切换与数据转换后,用户程序在当前半精度浮点格式下进行后续的计算,需要再次切换半精度浮点格式时重复s2、s3。
8.由于上述技术方案的运用,本发明与现有技术相比具有下列优点:本发明提供一种支持多格式半精度浮点的编译方法,支持程序在运行时切换半精度浮点格式,在需要大数值空间时使用bf16格式,在需要提升精度时使用fp16格式,在不增加代码编写复杂度的前提下发挥fp16和bf16两种半精度浮点格式的优势,满足应用场景使用半精度浮点加速计算的需求。
附图说明
9.附图1为本发明支持多格式半精度浮点的编译方法的流程示意图。
具体实施方式
10.实施例:本发明提供一种支持多格式半精度浮点的编译方法,处理器设置浮点控制状态寄存器,用于确定使用fp16格式和bf16格式中的哪种半精度浮点格式来解析寄存器中的数据,处理器还提供半精度浮点数据转换指令,用于处理fp16格式和bf16格式半精度浮点数据间的相互转换;编译器提供统一的float16关键字用于申明fp16格式和bf16格式的半精度浮点类型,编译器还提供半精度浮点数据格式切换接口用于半精度浮点格式切换,分别为将fp16格式切换为bf16格式的convert_to_bf16()接口和将bf16格式切换为fp16格式的convert_to_fp16()接口,并将接口处理成设置浮点控制状态寄存器的指令;包括以下步骤:s1、用户代码使用编译器提供的float16关键字来申明半精度浮点数据类型,默认使用fp16格式,还可根据需要通过-mbf16选项切换为使用bf16格式;s2、用户代码根据需要调用半精度浮点数据格式切换接口进行格式切换,在需要提高精度时调用convert_to_fp16()接口,在需要大数值空间时调用convert_to_bf16()接口,处理器通过执行设置浮点控制状态寄存器的指令进行半精度浮点数据格式的切换;s3、用户代码在切换半精度浮点数据格式后,调用编译器提供的半精度浮点数据转换接口convert_float16(float16 *addr, int length)进行数据格式转换,将起始地址为addr、长度为length的半精度浮点数据转换成当前使用的半精度浮点格式;s4、在完成半精度浮点数据格式切换与数据转换后,用户程序在当前半精度浮点格式下进行后续的计算,需要再次切换半精度浮点格式时重复s2、s3。
11.对上述实施例的进一步解释如下:本发明提出的支持多格式半精度浮点的编译方法,基于处理器支持fp16格式和bf16格式的半精度浮点格式,fp16格式和bf16格式对应的半精度浮点计算指令相同,处理器通过设置浮点控制状态寄存器来确定使用哪种半精度格式来解析寄存器中的数据;处理器还提供半精度浮点数据转换指令,用于处理fp16格式和bf16格式半精度浮点数据间的相互转换。
12.编译器提供统一的float16关键字用于申明fp16格式和bf16格式的半精度浮点类型,提供半精度浮点数据格式切换接口用于半精度浮点格式切换;用户程序使用上述关键字和接口编写代码,能够支持fp16格式和bf16格式两种半精度浮点格式的切换和数据转换。
13.用户使用支持多格式半精度浮点的编译方法的具体流程如下:步骤1、用户代码使用编译器提供的float16关键字来申明半精度浮点数据类型,默认使用fp16格式,用户可以根据需要通过-mbf16选项切换为使用bf16格式。编译器编译程序时根据用户指定的选项来初始化半精度浮点数据。
14.步骤2、用户代码调用半精度浮点数据格式切换接口进行格式切换。编译器提供fp16格式切换为bf16格式的convert_to_bf16()、bf16格式切换为fp16格式的convert_to_fp16()两个接口。用户代码根据需要调用接口,在需要提高精度时调用convert_to_fp16()接口,在需要大数值空间时调用convert_to_bf16()接口,编译器将接口处理成设置浮点控制状态寄存器的指令,处理器执行该指令进行半精度浮点数据格式的切换。
15.步骤3、用户代码在切换半精度浮点数据格式后调用编译器提供的半精度浮点数据转换接口convert_float16(float16 *addr, int length)进行数据格式转换,将起始地址为addr、长度为length的半精度浮点数据转换成当前使用的半精度浮点格式。
16.步骤4、在完成半精度浮点数据格式切换与数据转换后,用户程序在当前半精度浮点格式下进行后续的计算,需要再次切换半精度浮点格式时重复2、3步骤。
17.采用上述一种支持多格式半精度浮点的编译方法时,其支持程序在运行时切换半精度浮点格式,在需要大数值空间时使用bf16格式,在需要提升精度时使用fp16格式,在不增加代码编写复杂度的前提下发挥fp16和bf16两种半精度浮点格式的优势,满足应用场景使用半精度浮点加速计算的需求。
18.为了便于更好的理解本发明,下面将对本文中使用的术语进行简要的解释:fp16:遵循ieee754标准的半精度浮点格式,16位宽,包含1位符号位、5位指数位、10位尾数位。
19.bf16:一种针对人工智能/深度学习应用程序进行优化的半精度浮点格式,16位宽,包含1位符号位、8位指数位、7位尾数位。
20.上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献