C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型,成功算对结果了,代价是精度损失了 不少。 • 其实 GPU 存储贴图一般也是用的定点数 uint8_t (范围从 0 到 255 ),着色器在读取的时候才会把他 转换成 float (范围从 0.0 到 1.0 )。这就是浮点数的 量化,存储时转换成低精度的定点数,读取时再转换 回高精度的浮点数,从而节省 4 倍内存带宽,提升 GPU 性能。 有没有更小的浮点类型? • 浮点数在接近0 码力 | 102 页 | 9.50 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 03 现代 C++ 进阶:模板元编程有些函数,本来要返回 T 类型,但是有可 能会失败! • 上个例子中用 std::tuple,其中 第一个 bool 表示成功与否。但是这样尽 管失败了还是需要指定一个值 0.0f ,非常 麻烦。 • 这种情况推荐用 std::optional 。 • 成功时,直接返回 T 。失败时,只需返回 std::nullopt 即可。 optional : value_or() 0 码力 | 82 页 | 12.15 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 12 从计算机组成原理看 C 语言指针abs 这个函数取出一个整数的绝对值 。 abs 函数:取出绝对值 • 如果用来获取 float 类型的绝对值呢? • 编译通过了,但是结果却不对! • 你会发现 x 无论如何变化,都是 0.0 。 • 这其实是两个 bug 共同作用的结果。 printf 的错误:不会编译时检测参数类型是否正确 • 第一个 bug 是, printf 其实不知道他的参数是什 么类型,他只看到你字符串里写的0 码力 | 128 页 | 2.95 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串只收到了一个首地址指针,他只好把出现 ‘ \0’ 的位置当做字符的结尾。 • 对于字符串来说好像无所谓(谁说话会带个 ‘ \0’ 啊),但是对于其他类型的 数据,比如科学家用一个浮点数组,一不小心算出个 0.0 就自动结束了,不 合理。 • 2. ‘\0’ 本身也是一个字符,需要占据额外的空间,因此长度为 n 的字符串实 际上需要 n + 1 的内存空间,末尾多出来的那一格空间存放 ‘ \0’ 标志结束。0 码力 | 162 页 | 40.20 MB | 1 年前3
共 4 条
- 1













