Rust分布式账务系统 - 胡宇
接受转账请求,转换成 events ● 2. 将 events 送入 Raft 共识,等待 events 被多数节点保存 ● 3. 处理被共识的 events ,更新状态机 (账户表) ● 4. 回调完成请求 账户层: Auticuro 分布式账务系统 1 2 3 4 事务层: Marker 分布式账务系统 A,B,C 在不同分区执行一个事务的 TCC 转账计划 ● 转账计划0 码力 | 27 页 | 12.60 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 性能优化之无分支编程 Branchless Programming
字节的 eax ,零扩展:高 3 字节 填充零) • 返回类型 int 占据 4 字节( eax 寄存器就是 4 字节的) • 返回值都放 eax 寄存器(刚刚算得的就在 eax ,直接返 回) 无分支优化:从语法角度分析 • 刚刚其实是利用了 C 语言把 bool 类型的 true 当做 1 , false 当做 0 的特性。 • (int)true == 1 (int)false0 码力 | 47 页 | 8.45 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型
uint8_t (范围从 0 到 255 ),着色器在读取的时候才会把他 转换成 float (范围从 0.0 到 1.0 )。这就是浮点数的 量化,存储时转换成低精度的定点数,读取时再转换 回高精度的浮点数,从而节省 4 倍内存带宽,提升 GPU 性能。 有没有更小的浮点类型? • 浮点数在接近 0 的时候精度更高,在一些图形学应用中还是很必要的(比如表示粒子的速 度),定点数就做不到。0 码力 | 102 页 | 9.50 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 14 C++ 标准库系列课 - 你所不知道的 set 容器
ForwardIt end); set 的妙用:排序 • 刚刚说,把 vector 转成 set 会让元素自动排序和去 重。 • 我们其实可以利用这一点,把 vector 转成 set 再转 回 vector ,这样就实现去重了。 • template• void assign(ForwardIt beg, ForwardIt end); 清空 set 0 码力 | 83 页 | 10.23 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程
true 。 • 第二次上锁,由于自己已经上锁,所以失败 了,返回 false 。 只等待一段时间: try_lock_for() • try_lock() 碰到已经上锁的情况,会立即返 回 false 。 • 如果需要等待,但仅限一段时间,可以用 std::timed_mutex 的 try_lock_for() 函数, 他的参数是最长等待时间,同样是由 chrono 指定时间单位。超过这个时间还没0 码力 | 79 页 | 14.11 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化
char data[64]; • }; • CacheEntry cache[512]; • 当 CPU 读取一个地址时: • 缓存会查找和该地址匹配的条目。如果找到,则给 CPU 返 回缓存中的数据。如果找不到,则向主内存发送请求,等读 取到该地址的数据,就创建一个新条目。 • 在 x86 架构中每个条目的存储 64 字节的数据,这个条目 又称之为缓存行( cacheline )。0 码力 | 147 页 | 18.88 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程
里的板块数和线程数可以动态指定,无需 先传回到 CPU 再进行调用,这是 CUDA 特有的能力。 常用于这种情况:需要从 GPU 端动态计算出 blockDim 和 gridDim ,而又不希望导回数据到 CPU 导致强制同步影响性能。 这种模式被称为动态并行( dynamic parallelism ), OpenGL 有一 个 glDispatchComputeIndirect 的 API 和这个很像,但毕竟没有0 码力 | 142 页 | 13.52 MB | 1 年前3
共 7 条
- 1