太极图形课S1第03讲:大规模计算的关键—高级数据结构

太极图形课S1第03讲:大规模计算的关键—高级数据结构_哔哩哔哩_bilibili

P1上期回顾

面向过程,面向对象,面向数据

 猛的人现在已经可以做这些了:

 我还啥也不会。。

习惯了,也不是第一次了……高中的时候也是这样呐。一节数学课完了,周练,别人90我40,习惯了……

这节,主要说如何让代码跑的更快。

P2 高级稠密数据结构

CPU上的算法,强调时间空间复杂度,因为CPU计算的时间占大头

GPU上的算法,并行,计算的时间往往不是大头,内存访问占的时间往往才是大头

简单的说,主要矛盾不同

 

 默认,会进行内存对齐

 catch,加速,预取

 多维的数据,怎么办?

内存都是1D线性存的,数据在内存里总得有个顺序。

按行存入内存的就是行主序,按列存入内存的就是列主序。

 把访问顺序和内存顺序,匹配起来,就快了

存数据的时候,怎么好读就怎么存

 那末,怎么存,才好读?

把3*2存成2*3,,这个是什么原理?列主序,按列存到内存里,容易读。

 能快,但是麻烦。

这里自动化了一下。

借助了这个root,i表示行,ij的i,

 

 常见的写法

 dense:稠密的,描述的是挂的东西的形状

place:对应前面声明的那个field

 可以干预怎么存了

这个图画的挺好的……要挂N行,这N行得挂在N列上,正好相互垂直。

 按需定义

 不用颠倒了,自动优化

 还可以接着套娃

 1D数据分组

 按块存了,但仍可以按1D的来

 还可以这么用,这么挂

 调用方式都一样

 为啥要有这个东西?

有的时候会用到邻域,比如模糊,锐化,高斯模糊。行主序,列主序,都不咋合适, 块主序最合适。

之前提过的俩种方式

 哪个更快呢?取决于如何访问,如何运用

 在Taichi里,这么写

 有时候,不知道这俩谁好,可以试,没啥成本

 实际运用

 组织数据的时候,相关的,放在一起,容易命中,就比较快。

 可以套娃套很多

 P3 高级稀疏数据结构

稀疏矩阵,空的还占空间,就浪费了

 比如这样的:

 可能大部分都是0,就浪费了

 引入指针,省空间

 定义的时候改一点就能实现这个了

 访问的时候,会自动跳过没有值的稀疏的没激活的部分

 也有问题,64位的指针,有时候比数据占的空间都大,可能会更慢

 怎么办?接着改,引入bitmask

 for循环,自动跳过

 一些手动操作方式,手动激活,不激活什么的

 有层级的1D数据

 还可以构造这个:

 还可以按层,搞出一个旋转的稀疏太极,最下面一层是pixel

 高级数据结构

 这个来自paper……不止这4种……

 

 作业

可以改改太极图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值