视频在这
P1 基础回顾
上一节,主要讲了这4点。
Taichi里所有的拷贝,默认是值传递
Python里,址传递,某个大作业里用过,一处改,处处改
关于field的要注意的一点
shape为空,表示标量。
直接赋值,是python里的地址传递,会出问题。
应该用copy——from
关于python全局变量要注意的一点
编译的时候,会把python-scope中的变量都编译成常量。
及时编译,编译的时候是啥值,以后就认为是啥值……当常数看了……
可以用field,或直接从python向里面传参。
回顾完了,下面是正文。
元编程,和OOP。主要是为了让代码写的更好读。
例子是这段代码
GitHub - taichiCourse01/--Galaxy
P2 元编程
介绍
元。。是啥?
3条流水线——》3条车
1个图纸,稍微修改——》3条车
元,有点实例化的感觉?
并行计算,模板化。
大概是两点,先看第一点
第一点
field 不能直接赋值,因为会指向同一段内存,所以有了一个普通的copy函数。
高级了一点:
又高级了一点,并行拷贝,加速
有ti.kernel,就并行了
但是,那个ti.template()有什么用?
有什么用?
可以传参数。Taichi最多只能传8个强类型的标量,field不是标量,不能传。
但是template什么都可以,可以传field进去的。
模板,泛型什么的
能传很多东西
但也有不能传的东西,不如python的list,Taichi不认识就传不了。可以改成ti.vector
而且,都是引用传递
因为,python的参数,传进去以后,就是常量了,就不能改了。硬改就会报错。
可以改全局的这个field
还可以把size去掉
如果是2D的,还这么for会出问题
如果这么搞,就行了
还可以group一下,这个是什么?
Metadata,描述数据的数据……啊?
比如矩阵的Metadata就是矩阵的R,C...
debug为true,assert才被执行……emm……不会。
模板的实例化
第二点
一点加速的建议
类似define吧,少走点if,else的分支,对应CPU的分支预测加速。
有时,必须用static,比如里面的for
总结
维度无关编程能用到
static能加速
实际例子
P3 面向对象编程
面向过程的
面向对象的
了解过一点
还可以继承,QT里继承的就不少,继承窗口类什么的
加点太极特色:
这个@。。。有啥用?
包含很多结构体的数组,包含很多数组的结构体
两种数据表示方法
- 100个结构体数组,每个结构体里是3个参数,身高体重什么的
- 3个结构体,表示身高体重什么的,每个结构体里是100个参数
taichi倾向后一种
可以加速,并行
类里,kernel,可能会出问题
比如被编译成常量
原理和这个一样的
封装
继承
多态
实际例子
averagePerson/Galaxy (gitee.com)
总结
讲了俩
模板,加速
太极类
也可以改点其他的