编程|太极(taichi)图形编程语言的数据类型和作用域

编程|太极(taichi)图形编程语言的数据类型和作用域

之前我们介绍太极语言的ti.kernel内核的时候 , 提到它支持的参数类型 , 其中举例所i32和f32这两种 , 这是太极编程语言中的数据类型 。 机智客觉得在编程语言中 , 数据类型广泛用于函数和方法的参数中 , 比如在kernel中 , 比如在ti.field方法中 , 所以是基础 , 重要性毋庸置疑 。
和其他编程语言类似 , 太极目前的数据类型也有几种:有符号整数类型 , 无符号整数类型 , 浮点类型 。 太极不同的数据都是由数据类型和精度组成的 。 其中 , Signed integers包含ti.i8 , ti.i16 , ti.i32 , ti.i64 。 Unsigned integers类型则用u为前缀 , 比如ti.u8 , ti.u16等 。 而浮点则有两种 , ti.f32和ti.f64 。 机智客在以前的文章里提到的i32和f32 , 其实是太极语言里用得最普遍的 。 当然和其他编程语言不太一样的也有 , 太极语言的数据类型并不多 , 布尔类型则是由ti.i32表示 。

默认的数据类型精度都是32位 。 需要说明的是 , CPU和CUDA后端支持所有的数据类型 , 而其他则由于后端API的约束 , 要参考相应后端的API才能确定是否缺少某些数据类型支持 。
【编程|太极(taichi)图形编程语言的数据类型和作用域】上面是太极语言的数据类型 , 可用于函数里的参数 。 太极语言规定只能是标量 , 返回也是 。 如果函数有返回值 , 则要指定返回数据类型 。 而且返回值也只能是一个标量(不能是两个以上) , 而不能是矢量或矩阵 , 哪怕Python中的元组也不行 。 所以参数可以有多个标量 , 而返回只能是一个标量 。 比如这段来源于英文文档中的代码片段 。
@ti.kernel
def my_kernel() -> ti.f32:
return 233.33
我们以前介绍过 , 太极语言的初始化 , 说过 , 初始化 , 也可以指定数据类型 。 这里说下 , 如果我们要设置初始化的数据类型 , 可以这样ti.init(default_ip=ti.i64 default_fp=ti.f32) 。 当然了 , 数据类型这块 , 还有很多其他细节知识 , 比如数据类型转化 , 矢量和矩阵的知识等 。 我们以后遇到再学习 。
而关于太极语言的作用域 , 相信学习了上文或者以前文章的朋友 , 都了解了 。 其实就是@ti.kernel或@ti.func 装饰的代码区域内 。 ti.kernel里的是太极内核 , ti.func里的是太极函数 。 可以调用ti.func里的函数 , 也可以嵌套调用函数 , 然而不支持递归函数 。 外部就是普通Python代码了 , 不同代码不同处理 , 各找各妈 , 各归各管 。 如果用 CUDA 做类比的话 , Taichi作用域等于device side 。