C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型从稀疏数据结构到量化数据类型 by 彭于斌( @archibate ) 往期录播: https://www.bilibili.com/video/BV1fa411r7zp 课程 PPT 和代码: https://github.com/parallel101/course 本课涵盖:稀疏矩阵、 unordered_map 、空间稀 疏网格、位运算、浮点的二进制格式、内存带宽优 化 面向人群:图形学、 :每个占据 8 字节 • 如果用更大的数据类型,用时会直接提升两倍! • 这是因为 i % 2 的计算时间,完全隐藏在内存 的超高延迟里了。 • 可见,当数据量足够大,计算量却不多时,读写 数据量的大小唯一决定着你的性能。 • 特别是并行以后,计算量可以被并行加速,而访 存却不行。 使用 int8_t :每个占据 1 字节 • 因此我们可以把数据类型变小,这样所需的内存 量就变小,从而内存带宽也可以减小! 对于右边这种内存瓶颈的循环体,从 4 字节的 int 改成 int8_t ,理论上可以增加 4 倍速度! • 这就是量化数据类型的思想,把占空间大的数据 类型转换成较小的(损失一定精度,换来性能) 。 • 因此如果你的程序不需要那么高精度,可以考虑 用小点的数据类型。 8 个 bit 合并进一个 int8_t :每个占据 1/8 字节 • 考虑到我们的 i % 2 只可能是 0 和 10 码力 | 102 页 | 9.50 MB | 1 年前3
MoonBit月兔编程语言 现代编程思想 第五课 数据类型:树、二叉树、二叉搜索树、AVL树也有的定义将树的⾼度等同于最⼤层次,以根为第⼀层 6 树的存储结构 树的存储⽅式有多种(以⼆叉树为例,省略节点存储的数据) 节点与⼦节点关系的列表: [ (0, 1), (0, 2), (1, 3) ] 代数数据结构定义 1. Node(0, 2. Node(1, 3. Leaf(3), 4. Empty), 5. Leaf(2)) 列表定义 数据的逻辑结构独⽴于存储结构0 码力 | 29 页 | 1015.26 KB | 1 年前3
MoonBit月兔编程语言 现代编程思想 第四课 多元组, 结构体,枚举类型 现代编程思想 多元组,结构体与枚举类型 Hongbo Zhang 1 基础数据类型:多元组与结构体 2 回顾:多元组 多元组:固定⻓度的不同类型数据的集合 定义: (<表达式>, <表达式>, ...) 类型: (<表达式类型>, <表达式类型>, ...) 例如: 身份信息: ("Bob", 2023, 10, 24): (String, Int, Int, Int) 成员访问: 5. } 此时枚举类型对应可区分的并集,⼜称和类型 21 代数数据类型 22 代数数据类型 我们将多元组、结构体、枚举类型等称为代数数据类型,它们具有代数结构 类型相等:同构 类型相乘:积类型 类型相加:和类型 加法的单位元: enum Nothing {} 乘法的单位元: (): Unit 23 代数数据类型 对于任意类型 T , (T, Unit) 与 T 同构 1 PlusZero { CaseT(t) } 24 代数数据类型 enum Coins { Head; Tail } enum DaysOfWeek { Monday; Tuesday; ...; } List 的定义(以 List[Int] 为例): 25 总结 本章节介绍了⽉兔中的诸多⾃定义数据类型,包括 多元组 结构体 枚举类型 并介绍了代数数据类型的概念 推荐阅读 Category0 码力 | 26 页 | 435.86 KB | 1 年前3
5 刘知杭 静态类型的Python 静态类型的Python Lyzh(刘知杭) 目录 CONTENTS 有关类型的概念 使用mypy对Python源 代码进行静态分析 代数数据类型 拓展知识 关于类型的一些基本概念 有类型不等于有类型系统 动态语言类型化的必要性 不久前的一个案例 正文 类型的概念 CPython定义了PyObject这个 结构体作为对象头。 CPython中的类型,是指在对 象头中指向类型元信息的指针。 返回值为None,以及NoReturn类型 正文 Callable可调用类型 正文 Final常量! 正文 TypeAlias类型别名 正文 类成员注释 简单的代数数据类型 作为mypy的凭依 像研究代数一样去研究类型之间的关系 待重写 简单的代数数据类型 当我们在计算类型的大小时,我们在计算什么? 我们通过将类型视为集合来定义类型的大小,并计算可能的元素数量 比如说,因为有两个可能的布尔值——True和False,因此0 码力 | 42 页 | 6.87 MB | 1 年前3
Golang 入门笔记"Runoob") 关键字 关键字或保留字 预定义标识符 Go 语言的空格 1. 变量声明必须用空格隔开。例如: var age int 2. 语句中适当的空格可以提升代码的可读性,容易理解。 数据类型 1. 布尔类型(bool) 基本介绍 1. 布尔类型也叫 bool 类型,bool 类型数据只允许取值 ture 和 flase 2. bool 类型占 1个字节 3. bool 类型适用与逻辑运算,一般用于程序流程控制 无符号整形,用于存放指针 7.基本数据类型的默认值 整型 ==> 0 浮点型 ==> 0 字符串 ==> "" 布尔类型 false 测试案例 8. 基本数据类型的相互转换 介绍:Golang 和 Java/C 不同, Go 在不同类型的变量之间的赋值时需要显式转换,就是说Golang不能自动转换 基本语法 表达式 T(v) 将 v 转换为类型 T T 就是数据类型,比如: int32 被转换的是变量存储的数据(即值),变量本省的数据类型并没有变化 3.在转换中,比如将 int64 转换为 int8, 编译的时候不会报错(需要考虑数据范围), 只是转换的结果是按照溢出处理,和我们希望的结果不一样。 测试案例 9. 基本数据类型和 string 的转换 介绍:开发过程中,我们经常需要将基本数据类型转换为 string , 或者讲 string 转换为基本数据类型 基本语法 1. fmt0 码力 | 2 页 | 511.29 KB | 1 年前3
Julia 中文文档. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 871 70 动态链接器 909 71 线性代数 913 71.1 特殊矩阵 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . --check-bounds={yes|no} 设置边界检查状态:始终检查或永不检查。永不检查时会忽略源文件中的 相应声明 --math-mode={ieee,fast} 开启或关闭非安全的浮点数代数计算优化,此选项会覆盖源文件中的 @fastmath 声明 --code-coverage={none|user|all} 对源文件中每行代码执行的次数计数 --code-coverage 等价于 (1) • 浮点类型: 类型 精度 比特数 Float16 half 16 Float32 single 32 Float64 double 64 此外,对复数和有理数的完整支持是在这些原始数据类型之上建立起来的。多亏了 Julia 有一个很灵 活的、用户可扩展的类型提升系统,所有的数值类型都无需显式转换就可以很自然地相互进行运算。 21 22 CHAPTER 5. 整数和浮点数 5.10 码力 | 1238 页 | 4.59 MB | 1 年前3
Python3 基础教程 - 廖雪峰............................................................................................ 32 数据类型和变量 .............................................................................................. iPhone)和 Java(针对 Android);写 3D 游戏,最好用 C 或 C++。 如果你是小白用户,满足以下条件: 会使用电脑,但从来没写过程序; 还记得初中数学学的方程式和一点点代数知识; 想从编程小白变成专业的软件架构师; 每天能抽出半个小时学习。 不要再犹豫了,这个教程就是为你准备的! 准备好了吗? Python3 基础教程【完整版】 http://www 交互式命令行又回到>>>状态了。 那我们刚才输入的内容到哪去了?答案是存放到 name 变量里了。可以直 接输入 name 查看变量内容: >>> name 'Michael' 什么是变量?请回忆初中数学所学的代数基础知识: 设正方形的边长为 a,则正方形的面积为 a x a。把边长 a 看做一个变量, 我们就可以根据 a 的值计算正方形的面积,比如: Python3 基础教程【完整版】 http://www0 码力 | 531 页 | 5.15 MB | 1 年前3
Nim 2.0.2 中文手册0B0_10001110100_0000101001000111101011101111111011000101001101001001'f64 根据 IEEE 浮点标准,约为 1.72826e35 。 字⾯值必须匹配数据类型,例如, 333'i8 是⼀个⽆效的字⾯值。以⾮ 10 进制表示的字⾯值主要⽤于标记和⽐特位模式, 因此检 查是对位宽⽽不是值范围进⾏的,所以: 0b10000000'u8 == 0x80'u8 system.new 。 对象变体 在需要简单变体类型的某些情况下,对象层次结构通常有点臃肿。对象变体是通过枚举类型标记和区分,以便运⾏时更加灵活, 可参照在其他语⾔中能找到的如 sum类型 和 代数数据类型(ADTs) 的概念。 ⼀个例⼦: 从示例中可以看出,对象层次结构的优点是,不需要在不同对象类型之间进⾏转换。但是,访问⽆效对象字段会引发异常。 在对象声明中的 case 语句和标准 case 类型类通过标准的布尔运算符可组合成更复杂的类型类。 泛型参数列表中的参数类型约束可以通过 , 进⾏分组,并以 ; 结束,就像宏和模板中的参数列表那样: 虽然类型类在语法上接近于类 ML 语⾔中的代数数据类型 (ADT),但应该知道,类型类只是实例化时所必须遵守的静态约束。 类型 类本身并⾮真的类型,只是⼀种检查系统,检查泛型是否最终被 解析 成某种单⼀类型。 与对象、变量和⽅法不同,类型类不允许0 码力 | 127 页 | 7.05 MB | 1 年前3
Hello 算法 1.0.0b1 C++版0.1.2. 内容结构 本书主要内容有: ‧ 复杂度分析:数据结构与算法的评价维度、算法效率的评估方法。时间复杂度、空间复杂度,包括推算 方法、常见类型、示例等。 ‧ 数据结构:常用的基本数据类型,数据在内存中的存储方式、数据结构分类方法。数组、链表、栈、队列、 散列表、树、堆、图等数据结构,内容包括定义、优劣势、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:查找算法、排序算法 root->right = buildTree(n - 1); return root; } Figure 2‑13. 满二叉树产生的指数阶空间复杂度 对数阶 ?(log ?) 对数阶常见于分治算法、数据类型转换等。 例如「归并排序」,长度为 ? 的数组可以形成高度为 log ? 的递归树,因此空间复杂度为 ?(log ?) 。 再例如「数字转化为字符串」,输入任意正整数 ? ,它的位数为 log10 (?) , ?(?2) , ?(2?) 。 37 3. 数据结构简介 3.1. 数据与内存 3.1.1. 基本数据类型 谈到计算机中的数据,我们能够想到文本、图片、视频、语音、3D 模型等等,这些数据虽然组织形式不同,但 都是由各种基本数据类型构成的。 「基本数据类型」是 CPU 可以直接进行运算的类型,在算法中直接被使用。 ‧「整数」根据不同的长度分为 byte, short, int0 码力 | 187 页 | 14.71 MB | 1 年前3
Hello 算法 1.0.0b1 Java版0.1.2. 内容结构 本书主要内容有: ‧ 复杂度分析:数据结构与算法的评价维度、算法效率的评估方法。时间复杂度、空间复杂度,包括推算 方法、常见类型、示例等。 ‧ 数据结构:常用的基本数据类型,数据在内存中的存储方式、数据结构分类方法。数组、链表、栈、队列、 散列表、树、堆、图等数据结构,内容包括定义、优劣势、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:查找算法、排序算法 return root; } 2. 复杂度分析 hello‑algo.com 34 Figure 2‑13. 满二叉树产生的指数阶空间复杂度 对数阶 ?(log ?) 对数阶常见于分治算法、数据类型转换等。 例如「归并排序」,长度为 ? 的数组可以形成高度为 log ? 的递归树,因此空间复杂度为 ?(log ?) 。 再例如「数字转化为字符串」,输入任意正整数 ? ,它的位数为 log10 (?) , ?(?2) , ?(2?) 。 38 3. 数据结构简介 3.1. 数据与内存 3.1.1. 基本数据类型 谈到计算机中的数据,我们能够想到文本、图片、视频、语音、3D 模型等等,这些数据虽然组织形式不同,但 都是由各种基本数据类型构成的。 「基本数据类型」是 CPU 可以直接进行运算的类型,在算法中直接被使用。 ‧「整数」根据不同的长度分为 byte, short, int0 码力 | 186 页 | 14.71 MB | 1 年前3
共 182 条
- 1
- 2
- 3
- 4
- 5
- 6
- 19













