太极图形课笔记s1
2021/10/1 23:10:43
本文主要是介绍太极图形课笔记s1,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
第一节
hello world
1.引入太极库
import taichi as ti ti.init(arch=gpu) #入口,支持cpu,gpu,cuda,opengl等
2.变量规则
- 有i32、i64、f32、f64等,默认32位
- 在taichi作用域中取第一次定义变量类型,如
#在taichi scope中 a=1 a=2.7 #a实际等于2
- ti.cast(a,ti.i32)转变变量类型
3.常用变量 - ti.Vector([1.0,2.0,3.0])
- ti.Matrix([1.6,1.4],[1.3,1.2])
- 使用[]寻址
- ti.field全局n维元素集合,标量访问需加[None]
heat_field = ti.field(dtype=ti.32, shape =(256,256)) #0维全局变量 a=ti.field(dtyoe=ti.f32,shape=()) a[None]=1.5
3.Kernels
在任何函数定义上方加@ti.kernel,表示下方的函数会以taichi高性能程序编译。
kernel只能在python scope(python域)中调用,即不能出现
@ti.kernel def foo(): print("foo") bar() @ti.kernel def bar(): print("bar")
这种情况
kernel比传统function快很多,主要原因是最外层for会被并行化,而最外层for内部的for是正常串行。
并行化for不能break!!!(可看作每次for单独执行互不影响)
使用+=或ti.atomic_add(total[None],x[i])会被原子锁保护,而拆开则不会被保护,可能出现for循环中两个分支同时写入的情况
N=10 x=ti.Vector.field(2,dtype=ti.i32,shape=(N,N))#field为N*N矩阵 @ti.kernel def foo(): for i,j in x: x[i,j]=ti.Vector([i,j]) foo() #for i,j遍历矩阵,但该方法只能在kernel最外层循环使用
kernel最多支持八个参数,且必须是type-hinted,只支持传标量参数,pass by value(传值,不改变外部变量)
@ti,kernel def my_kernel(x:ti.i32,y:ti.f32): print(x+y)
返回值必须是taichi类型
@ti.kernel def my_kernel()->ti.i32: return 233.666 #返回233
4.func
@ti.func
只能被ti.kernel调用
@ti.kernel def a(): b() @ti.func def b(): c()#func可嵌套调用,但不能递归,func会内联实现,仍是传值 @ti.func def c(): ...
func和kernel都是静态的
如果在python scope中定义a=32,在kernel或func中调用一次以后,再在python scope中修改,再使用kernel或func,里面的a仍是修改前的值,因为其不是全局变量,若想改变,请使用ti.field
5.其他
ti有很多计算函数(计算核17:13)
*乘法是逐位相乘,矩阵、向量乘法要用@
5.gui
这篇关于太极图形课笔记s1的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-21订单系统资料入门教程:轻松管理你的订单
- 2024-09-21Java部署资料:新手入门教程
- 2024-09-21Java部署资料:新手入门教程
- 2024-09-21Java订单系统资料:新手入门教程与实战指南
- 2024-09-21Java管理系统资料入门教程
- 2024-09-21从零开始学习Java监控系统资料
- 2024-09-21Java就业项目资料:新手入门的必备教程
- 2024-09-21Java全端资料:初学者指南
- 2024-09-21Java全栈资料入门教程及资源汇总
- 2024-09-21Java日志系统资料入门教程