精华内容
下载资源
问答
  • 分别是FP32(32位浮点或单精度),FP16(16位浮点精度),INT32(32位整数表示)和INT8(8位表示)。布局格式布局格式决定了存储值的顺序。通常,批次维度是最左侧的维度,其它维度指的是...

    TensorRT 数据格式说明

    NVIDIA ® TensorRT™支持不同的数据格式。需要考虑两个方面:数据类型和布局。

    数据类型格式

    数据类型是每个单独值的表示。它的大小决定了数值的范围和表示的精度;分别是FP32(32位浮点或单精度),FP16(16位浮点或半精度),INT32(32位整数表示)和INT8(8位表示)。

    布局格式

    布局格式决定了存储值的顺序。通常,批次维度是最左侧的维度,其它维度指的是每个数据项的各个方面,例如C 是频道 H 是高度,并且 w ^是宽度(以图片为单位)。总是忽略在这些之前的批量大小,C, H和 w ^ 通常依据以下示意图中。

    c6cf96bd34a9bb53443e40026d23ad7b.png

    1876363558cc5151ec6ef6c72f41d0b3.png

    定义了更多格式,以将通道值打包在一起并降低精度。因此,TensorRT也支持格式 NC/2HW2 和 NHWC8。

    在 NC/2HW2,每对通道值打包在一起 高宽矩阵(在奇数通道的情况下为空值)。结果是一种格式,其中的值 ⌈C/2⌉高宽矩阵是两个连续通道的值对。

    This ordering interleaves dimensions as values of channels that have stride 1 if they are in the same pair and stride 2xHxW otherwise.

    1c268b93cfce2b103945f0d8460d176d.png

    在 NHWC8, HxW矩阵包含所有通道的值。此外,这些值打包在一起⌈C/8⌉ 8元组里, C 四舍五入到最接近的8的倍数。

    dab3c3bbd98606e64b4c676abf1a30ff.png
    展开全文
  • TensorRT 数据格式说明

    2021-01-08 06:41:30
    分别是FP32(32位浮点或单精度),FP16(16位浮点精度),INT32(32位整数表示)和INT8(8位表示)。 布局格式 布局格式决定了存储值的顺序。通常,批次维度是最左侧的维度,其它维度指的是每个数据项的各个方面...

    TensorRT 数据格式说明
    NVIDIA ® TensorRT™支持不同的数据格式。需要考虑两个方面:数据类型和布局。
    数据类型格式
    数据类型是每个单独值的表示。它的大小决定了数值的范围和表示的精度;分别是FP32(32位浮点或单精度),FP16(16位浮点或半精度),INT32(32位整数表示)和INT8(8位表示)。
    布局格式
    布局格式决定了存储值的顺序。通常,批次维度是最左侧的维度,其它维度指的是每个数据项的各个方面,例如C 是频道 H 是高度,并且 w ^是宽度(以图片为单位)。总是忽略在这些之前的批量大小,C, H和 w ^ 通常依据以下示意图中。
    在这里插入图片描述
    在这里插入图片描述
    定义了更多格式,以将通道值打包在一起并降低精度。因此,TensorRT也支持格式 NC/2HW2 和 NHWC8。
    在 NC/2HW2,每对通道值打包在一起 高宽矩阵(在奇数通道的情况下为空值)。结果是一种格式,其中的值 ⌈C/2⌉高宽矩阵是两个连续通道的值对。
    This ordering interleaves dimensions as values of channels that have stride 1 if they are in the same pair and stride 2xHxW otherwise.
    在这里插入图片描述
    在 NHWC8, HxW矩阵包含所有通道的值。此外,这些值打包在一起⌈C/8⌉ 8元组里, C 四舍五入到最接近的8的倍数。
    在这里插入图片描述

    展开全文
  • C++数据类型之half float

    2020-08-06 17:19:31
    c++浮点类型只有float与double,最近工作需要用精度浮点。 首先我们得搞清楚float在内存的二进制表示,详情见:IEEE754浮点定义 如下图: float的内存表示由:1位符号为、8位指数位、23位有效数字位组成 组合公式为...

    c++浮点类型只有float与double,最近工作需要用半精度浮点。
    首先我们得搞清楚float在内存的二进制表示,详情见:IEEE754浮点定义
    如下图:
    在这里插入图片描述
    float的内存表示由:1位符号为、8位指数位、23位有效数字位组成
    组合公式为:
    在这里插入图片描述
    8指数位的理论取值范围为:[-128,127]或者[0,255],但此处的取值范围却是为:[-126,127],00000000和00000001都表示-126,11111111表示nan(not a number)。
    我们递推一下:
    00000000:-126
    00000001:-126
    00000010:-125
    00000011:-124
    ~
    ~
    ~
    11111110:127
    在加上底数2,指数的取值范围就为:[2**(-126) ,2127]
    有效数字位视为23位无符号整数就行了。
    符号位0表示正数
    举个例子:
    0 00000001 00000000000000000000001
    (2
    (-126)) * 1 = 1.17549449095e-38
    其实这就是C++float的最小值
    再看一个例子
    0 11111110 11111111111111111111111
    (2**(127))*8388607 = 3.40282346639e+38
    这是c++float的最大值。
    搞清楚float了,就很好理解 half float了:
    在这里插入图片描述
    解析规则按照float的解析规则递推就行了。
    C++ half包:
    C++ half float library
    最好用C++11及以上版本

    展开全文
  • 数据类型 Java 包含 8 种基本数据类型。 布尔型:boolean 整数型:byte、short、int、long 浮点型:float、double 字符型:char 除 char 的包装类 Character 和 ...我们可以在代码中,查看某种类型的取值范围,代...

    数据类型

    Java 包含 8 种基本数据类型

    • 布尔型:boolean
    • 整数型:byte、short、int、long
    • 浮点型:float、double
    • 字符型:char

    除 char 的包装类 Character 和 int 的包装类 Integer 之外,其他基本数据类型的包装类只需要首字母大写即可。包装类的作用和特点,本文下半部分详细讲解。
    在这里插入图片描述
    我们可以在代码中,查看某种类型的取值范围,代码如下:

    // Byte 取值:-128 ~ 127
    String.format("Byte 取值:%d ~ %d", Byte.MIN_VALUE, Byte.MAX_VALUE);
    
    // Int 取值:-2147483648 ~ 2147483647
    String.format("Int 取值:%d ~ %d", Integer.MIN_VALUE, Integer.MAX_VALUE);
    

    包装类型的特性有哪些?

    因为 Java 的设计思想是万物既对象,有很多时候我们需要以对象的形式操作某项功能,比如说获取哈希值(hashCode)或获取类(getClass)等

    • 功能丰富包装类本质上是一个对象,对象就包含有属性和方法。

      • 比如 hashCode()、getClass() 、max()、min() 等。
    • 可定义泛型类型参数:包装类可以定义泛型,而基本类型不行。

    • 序列化:因为包装类都实现了 Serializable 接口,所以包装类天然支持序列化和反序列化。

    • 类型转换:包装类提供了类型转换的方法,可以很方便的实现类型之间的转换。

      • 比如 shortValue()、longValue()、floatValue()、doubleValue()、toString() 等。
    • 高频区间的数据缓存:此特性为包装类很重要的用途之一,用于高频区间的数据缓存。

    数据转换的方法有哪些?

    Wrapper 表示所有包装类; Type 表示包装类对应的基本数据类型;types 表示所有基本数据类型。

    • 装箱
      • 构造方法 new $Wrapper($Type/String),例如 new Integer(int/String)
      • 静态方法 $Wrapper.valueOf($Type/String),例如 Integer.valueOf(int/String)
    • 拆箱
      • 成员方法 $typesValue(),例如 intValue()、floatValue()...
    • 字符串
      • 静态方法 $Wrapper.parse$Type(String),例如 Integer.parseInt(String)
      • 成员方法 toString()

    如图所示:
    在这里插入图片描述

    高频缓存区是什么?

    在缓存区内的数字,会直接复用已有对象,在这区间之外的数字才会在堆上产生。

    各包装类高频区域的取值范围:

    • Float 和 Double 不会有缓存,其他包装类都有缓存。
    • Boolean:使用静态 final 定义,就会返回静态值
    • Character:缓存区 0~127
    • Byte:缓存区 -128~127
    • Short:缓存区 -128~127
    • Integer:缓存区 -128~127
    • Long:缓存区 -128~127

    我们使用 == 对 Integer 进行验证,代码如下:

    // Integer 高频区缓存范围 -128~127
    Integer num1 = 127;
    Integer num2 = 127;
    System.out.println(num1 == num2); // true
    Integer num3 = 128;
    Integer num4 = 128;
    System.out.println(num3 == num4); // false
    

    由于上面赋值时使用了自动装箱,也就是自动调用了 valueOf 方法,所以我们查看 valueOf 方法的源码 :

    public static Integer valueOf(int i) {
    	if (i >= IntegerCache.low && i <= IntegerCache.high)
          	// 高频区域的数值会直接使用已有对象
    		return IntegerCache.cache[i + (-IntegerCache.low)];
        // 非高频区域的数值会重新 new 一个新的对象
    	return new Integer(i);
    }
    

    包装类的非高频区数据会在堆上产生(128),高频区则会复用缓存池中的已有对象(127),而这样会导致同样的代码,会因为取值的不同产生两种截然不同的结果。所以,推荐所有包装类对象之间的值比较使用 equals() 方法。

    Integer itg3 = 128;
    Integer itg4 = 128;
    System.out.println(itg3 == itg4); // false
    System.out.println(itg.equals(itg)); // true
    

    比较 的问题

    1.以下 Integer 代码输出的结果是?

    Integer age = 10;
    Integer age2 = 10;
    Integer age3 = 133;
    Integer age4 = 133;
    System.out.println((age == age2) + "," + (age3 == age4));
    

    true,false

    2.以下 Double 代码输出的结果是?

    Double num = 10d;
    Double num2 = 10d;
    Double num3 = 133d;
    Double num4 = 133d;
    System.out.println((num == num2) + "," + (num3 == num4));
    

    false,false

    3.以下程序输出结果是?

    int i = 100;
    Integer j = new Integer(100);
    System.out.println(i == j);
    System.out.println(j.equals(i));
    

    true,true

    题目分析:有人认为这和 Integer 高速缓存有关系,但你发现把值改为 10000 结果也是 true,true,这是因为 **Integer 和 int 比较时,会自动拆箱为 int **。相当于两个 int 比较,值一定是 true,true

    4.以下程序执行的结果是?

    Integer i1 = new Integer(10);
    Integer i2 = new Integer(10);
    Integer i3 = Integer.valueOf(10);
    Integer i4 = Integer.valueOf(10);
    System.out.println(i1 == i2);
    System.out.println(i2 == i3);
    System.out.println(i3 == i4);
    

    A:false,false,false
    B:false,false,true
    C:false,true,true
    D:true,false,false

    答:B

    题目解析:new Integer(10) 每次都会创建一个新对象,Integer.valueOf(10) 则会使用缓存池中的对象

    类型转换 的问题

    1.以下程序执行的结果是?

    Set<Short> set = new HashSet<>();
    for (short i = 0; i < 5; i++) {
        set.add(i);
        set.remove(i - 1);
    }
    System.out.println(set.size());
    

    A:1
    B:0
    C:5
    D:以上都不是

    题目解析:C,byte和short型在计算时会自动转换为int型计算,remove() 的时候在集合中找不到 Int 类型的数据,所以就没有删除任何元素,执行的结果就是 5。

    2.以下程序哪一句会报错?

    short s=2;s=s+1;
    short s=2;s+=1;
    

    答:s=s+1 会报错,s+=1 不会报错,因为 byte和short型在计算时会自动转换为int型计算,所以会报错,而 s+=1 还是原来的 short 类型,所以不会报错。

    3.以下程序哪一句会报错?

    byte a1 = 2, a2 = 4, a3;
    short s = 16;
    a2 = s;
    a3 = a1 * a2;
    

    第3行,数值型变量在默认情况下为Int型

    第4行,byte和short型在计算时会自动转换为int型计算,结果也是int 型。

    4.以下语句会报错吗?

    float f1 = 0.1f;
    float f2 = 1;
    float f3 = 0.1;
    
    f1+=0.1f;
    f1=f1+0.1f;
    
    f1+=1;
    f1=f1+1;
    
    f1+=0.1;
    f1=f1+0.1;
    

    答:第3行和第12行会报错,因为值 0.1 是 double 类型,float 类型级别小于 double 类型

    第6行 f1=0.3,第9行 f1=2.3,第11行 f1=2.3999999。

    包装类 的问题

    1.基本类 int 和包装类 Integer,在 -128~127 之间都会复用已有的缓存对象,这种说法正确吗?

    答:不正确,只有包装类高频区域数据才有缓存

    2.包装类 Double 和 Integer 一样都有高频区域数据缓存,这种说法正确吗?

    答:不正确,基本数据类型的包装类只有 Double 和 Float 没有高频区域的缓存。

    3.包装类的值比较要使用什么方法?

    答:包装类因为有高频区域数据缓存,所以推荐使用 equals() 方法进行值比较。

    4.包装类有哪些功能?

    答:包装类提供的功能有以下几个。

    • 功能丰富:包装类包含了有 hashCode、getClass 、max、min 等方法;
    • 可定义泛型类型参数:例如 List list = new ArrayList<>(); ;
    • 序列化:包装类实现了 Serializable 接口,所以包装类天然支持序列化和反序列化;
    • 类型转换:包装类提供了方便的类型转换方法,比如 Integer 的 parseInt() 方法;
    • 高频区域数据缓存:高频区域可使用已有的缓存对象。

    5.选择包装类还是基本类的原则有哪些?

    答:我们知道正确的使用包装类,可以提供程序的执行效率,可以使用已有的缓存,一般情况下选择基本数据类型还是包装类原则有以下几个。

    所有 POJO 类属性必须使用包装类
    RPC 方法返回值和参数必须使用包装类;
    所有局部变量推荐使用基本数据类型

    基本数据类型 的问题

    1.泛型可以为基本类型吗?为什么?

    答:泛型不能使用基本数据类型。泛型在 JVM(Java虚拟机)编译的时候会类型檫除,比如代码 List<Integer> list 在 JVM 编译的时候会转换为 List list因为泛型是在 JDK 5 时提供的,而 JVM 的类型檫除是为了兼容以前代码的一个折中方案,类型檫除之后就变成了 Object,而 Object 不能存储基本数据类型,但可以使用基本数据类型对应的包装类,所以像 List<int> list 这样的代码是不被允许的,编译器阶段会检查报错,而 List<Integer> list 是被允许的。

    2.基本数据类型在 JVM 中一定存储在栈中吗?为什么?

    答:基本数据类型不一定存储在栈中,因为基本类型的存储位置取决于声明的作用域,来看具体的解释。

    • 当基本数据类型为局部变量的时候,比如在方法中声明的变量,则存放在方法栈中的,当方法结束系统会释放方法栈,在该方法中的变量也会随着栈的销毁而结束,这也是局部变量只能在方法中使用的原因;
    • 当基本数据类型为全局变量的时候,比如类中的声明的变量,则存储在堆上,因为全局变量不会随着某个方法的执行结束而销毁。

    3.char 变量能不能存贮一个中文汉字?为什么?

    答:char 变量可以存贮一个汉字,因为 Java 中使用的默认编码是 Unicode ,一个 char 类型占 2 个字节(16 bit),所以放一个中文是没问题的。

    计算 的问题

    1.以下程序执行的结果是?

    final int iMax = Integer.MAX_VALUE;
    System.out.println(iMax + 1);
    

    A:2147483648
    B:-2147483648
    C:程序报错
    D:以上都不是

    题目解析:整数在内存中使用的是补码的形式表示,最高位是符号位 0 表示正数,1 表示负数。当执行 +1 时,最高位就变成了 1,结果就成了 -2147483648。

    Integer.MAX_VALUE = 2147483647 = 231-1,二进制位:0111 1111 1111 1111 1111 1111 1111 1111;

    Integer.MIN_VALUE = -2147483648 = 2-31,二进制位: 1000 0000 0000 0000 0000 0000 0000 0000;

    所以,由此可知 Integer.MAX_VALUE + 1 = Integer.MIN_VALUE

    2.以下程序执行的结果是? 返回值是多少?

    System.out.println( 3*0.1==0.3 );
    

    答:返回值为:false。因为有些浮点数不能完全精确的表示出来

    如下代码:System.out.println(3 * 0.1);,返回的结果是:0.30000000000000004。

    展开全文
  • 读取一定范围内的值 80 逻辑非运算符·德摩根定律 81 德摩根定律 81 求多个整数的和及平均值 82 复合赋值运算符 84 后置递增运算符和后置递减运算符 85 4-2 while语句 87 while语句 87 用递减运算符简化...
  • 它们是FP32(32位浮点或单精度)、FP16(16位浮点精度)、INT32(32位整数表示)和INT8(8位表示)。 布局格式 布局格式决定了存储值的顺序。通常,批处理维度是最左边的维度,其他维度是指图像中每
  • 刀尖2.4 CUTLASS 2.4-2020年11月 CUTLASS是CUDA C ++模板抽象的集合,用于在CUDA中的所有级别和规模上实现高性能矩阵乘法(GEMM)。... 为了支持各种应用,CUTLASS为混合精度计算提供了广泛的支持,为精度浮点(FP1
  • 资源仅供学习交流使用,可以官方免费下载,个人上传仅供国内需要的人搬运,链接见下面... 精度浮点 b. 容器向量 ii. 字节顺序 iii. 复合类型 a. 聚合体 b. 联合体 c. 数组 d. 位域 e. 均匀聚合 5. 基础程序调用标准
  • FMLDATA的源码

    2014-06-02 15:57:42
    一个文件由多个记录组成,每个记录两个字段,第一个字段为DZH时间,为INT型,保存的是与1970-1-1 00:00:00间隔秒数,第二个字段为指标/序列值,为Float型,保存具体数值,注意Float型的数据范围!文件要求每个记录的...
  • 深入浅出MIPS

    2013-08-29 16:39:05
    这条指令的操作符可以为 Load 或 Store,一次 Load/Store 操作的范围可以为字/字/ 字节(对应 gcc 的 int, short 和 char)。偏移量是一个带符号的 16bit 整数。两个作为操作数 的寄存器可以是任何通用寄存器。...
  • 14、数据验证相关 15、类操作相关 16、清除缓存/文件相关工具类 17、剪贴板相关工具类 18、关闭操作流相关 19、常量相关 20、转换操作相关 21、倒计时 22、崩溃相关 23、日期操作相关 24、设备信息相关 25、使用UUID...
  • 1.9 如何生成“全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 存储类型 1.10 同一个静态(static)函数或变量的所有声明都必需包含static存储类型吗? 1.11 extern在函数声明中是什么意思? ...
  • 17.8 精度浮点类型 412 17.9 长度为零的数组 413 17.10 对可变参数个数的宏的语法扩展 415 17.11 case语句中使用范围表达式 417 17.12 投射到一个联合体类型 418 17.13 使用二进制整数字面量 419 17.14 ...
  • 1.9 如何生成“全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 5 存储类型 6 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 6 1.11 extern在函数声明中是什么...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    1.9 如何生成“全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 5 存储类型 6 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 6 1.11 extern在函数声明中是什么...
  • C++ 资源大全中文版 awesome-cpp 就是 fffaraz 发起维护的 C++ 资源列表,内容包括:标准...PGM-index:能够快速查找、前导、范围搜索和更新数以亿计项数组的数据结构,其跟传统索引相比,使用梯度的顺序而不是空间。 ...
  • java基础入门教程

    热门讨论 2009-04-29 21:36:10
    1996年 5月 29 ~ 31日 ,在 美 国 旧 金 山 召 开 了 一 个 全 世 界 Java语言 开 发 者 大 会,(JavaOne Developer Confer-ence),出 席 会 议 的 多 达 6500多 人 ,来 自 工 业界 的 超 过 一 ,有人 评 价 说 :...

空空如也

空空如也

1
收藏数 20
精华内容 8
关键字:

半浮点数据范围