视频在这
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)

总结
讲了俩

模板,加速
太极类
也可以改点其他的

本文深入讲解了太极编程中的元编程与面向对象编程两大核心概念。通过对比面向过程与面向对象编程,介绍了元编程如何实现代码复用及加速,并探讨了面向对象编程在太极中的应用方式。同时,文中还涉及了并行计算、模板化编程、维度无关编程等高级话题。
https://www.bilibili.com/video/BV11q4y1P7os?spm_id_from=333.999.0.0&vd_source=7b5f7987f682b668c4568616fa2beb2d
2010

被折叠的 条评论
为什么被折叠?



