当前位置: 首页 > news >正文

Taichi太极图形编程语言实践demo

目录

  • 引言
  • 一、太极(Taichi)编程语言是什么
  • 二、实践运行太极demo
    • 2.1 安装运行环境python
    • 2.2 安装太极编程语言
    • 2.3 运行太极demo

引言

小马无意中看到一种编程语言太极(Taichi),觉得挺有趣的。太极编程语言可以广泛应用在包括实时物理模拟、数字计算、增强现实、人工智能、视觉和机器人技术、电影和游戏中的视觉效果、通用计算等领域,属于计算机图形学。

在这里插入图片描述

还有搞游戏同学提议可以作为Unity中使用Nvidia的Flex插件的平替方案。用于搞游戏看起来贼拉爽,如下:
在这里插入图片描述
今天我们就来太极 Hello World一下。

一、太极(Taichi)编程语言是什么

至于语言的定义这里就不赘述了,网上非常多了。这里就是简单地介绍下我们关注的重点。

Taichi 是一种嵌入在 Python 中的领域特定语言。为了使 Taichi 能像 Python 包一样易于使用,基于这个目标我们做了大量的工程工作——使得每个 Python 程序员能够以最低的学习成本编写 Taichi 程序。你甚至可以选择你最喜欢的 Python 包管理系统、Python IDE 以及其他 Python 包和 Taichi 一起结合使用。

Taichi 既能在 CPU,也能在 GPU 上运行。 你只需根据你的硬件平台初始化 Taichi:

# 在 GPU 上运行,自动选择后端
ti.init(arch=ti.gpu)# 在 GPU 上运行, 使用 NVIDIA CUDA 后端
ti.init(arch=ti.cuda)
# 在 GPU 上运行, 使用 OpenGL 后端
ti.init(arch=ti.opengl)
# 在 GPU 上运行, 使用苹果 Metal 后端(仅对 OS X)有效
ti.init(arch=ti.metal)# 在 CPU 上运行 (默认)
ti.init(arch=ti.cpu)

不同操作系统所支持的后端:

平台CPUCUDAOpenGLMetal
Windows可用可用可用不可用
Linux可用可用可用不可用
Mac OS X可用不可用不可用可用

在参数 arch=ti.gpu 下,Taichi 将首先尝试在 CUDA 上运行。如果你的设备不支持 CUDA,那么 Taichi 将会转到 Metal 或 OpenGL。如果所在平台不支持 GPU 后端(CUDA、Metal 或 OpenGL),Taichi 将默认在 CPU 运行。

当在 Windows 平台 或者 ARM 设备(如 NVIDIA Jetson)上使用 CUDA 后端时, Taichi 会默认分配 1 GB 显存用于张量存储。如需重载显存分配,你可以在初始化的时候通过 ti.init(arch=ti.cuda, device_memory_GB=3.4) 来分配 3.4 GB 显存,或者使用 ti.init(arch=ti.cuda, device_memory_fraction=0.3) 来分配所有可用显存的 30%。
在其他平台上,Taichi 将会使用它的自适应内存分配器来动态分配内存。

我们有找到一个相对友好的教程《Taichi(太极) 0.6.24 编程语言文档》供大家参考,可惜文档中的版本偏低,部分示例代码可能不兼容新版本太极。

仓库:https://github.com/taichi-dev/taichi
仓库中也含了很多示例代码,大家可以直接debug,官方的比市面上的各种文档靠谱。可见目前Taichi的整个生态确实还是有待提升。

小马还找到个线上运行的地址:zoo.taichi。不过小马跑起来遇到远程接口报错不能用,大家不妨也可以试试。

二、实践运行太极demo

2.1 安装运行环境python

上文说到Taichi是一种嵌入在 Python 中的领域特定语言,所以运行太极需要先安装python环境。

如果已经有python环境的同学请绕过下面这个环节,不过需要注意检查版本,因为太极目前仅支持python 3.6/3.7/3.8版本。

从python官方下载python。
在这里插入图片描述
我调试用的是window,因此就找W的下载,但是这里再次注意不要直接安装最新版本的python 3.13.7,因为太极不支持。
在这里插入图片描述
所以我们应从链接进去选择3.8.10版本来安装。
在这里插入图片描述
如果安装成功可以看到如下画面。
在这里插入图片描述
当然如果你手快不小心安装了3.13版本,或者之前已经安装了太极支持以外的版本,那也没关系,我们可以更新版本或者再次安装其他版本,安装完我们设置好环境变量,就可以支持新装的版本了。

2.2 安装太极编程语言

准备好python环境后我们安装太极。

安装命令如下:

python -m pip install taichi

上面说到如果python版本不匹配,则会出现下面的提示。

在这里插入图片描述
如果版本匹配,如下:

在这里插入图片描述
不好意思,可能是遇到了些网络问题,不要慌,我们try again。再来!

在这里插入图片描述
看起来成功了。

2.3 运行太极demo

小马原本是计划参照文档示例代码跑一个经典案例。代码如下:

# fractal.py
import taichi as ti
ti.init(arch=ti.gpu)
n = 320
pixels = ti.var(dt=ti.f32, shape=(n * 2, n))
@ti.func
def complex_sqr(z):return ti.Vector([z[0] ** 2 - z[1] ** 2, z[1] * z[0] * 2])
@ti.kernel
def paint(t: ti.f32):for i, j in pixels: # 对于所有像素,并行执行c = ti.Vector([-0.8, ti.sin(t) * 0.2])z = ti.Vector([float(i) / n - 1, float(j) / n - 0.5]) * 2iterations = 0while z.norm() < 20 and iterations < 50:z = complex_sqr(z) + citerations += 1pixels[i, j] = 1 - iterations * 0.02
gui = ti.GUI("Fractal", (n * 2, n))
for i in range(1000000):paint(i * 0.03)gui.set_image(pixels)gui.show()

运行如下:
在这里插入图片描述
噢,出错了,跑不动。看起来这是语法版本问题呢。还有一个关于环境的告警,说是需要 添加环境变量TI_ENABLE_CUDA=0以跳过CUDA加载 才能解决。先不管,我们先更新代码解决代码问题。

于是调整代码如下:

import taichi as titi.init(arch=ti.gpu)n = 320
pixels = ti.field(dtype=float, shape=(n * 2, n))@ti.func
def complex_sqr(z):return ti.Vector([z[0]**2 - z[1]**2, z[1] * z[0] * 2])@ti.kernel
def paint(t: float):for i, j in pixels:  # Parallelized over all pixelsc = ti.Vector([-0.8, ti.cos(t) * 0.2])z = ti.Vector([i / n - 1, j / n - 0.5]) * 2iterations = 0while z.norm() < 20 and iterations < 50:z = complex_sqr(z) + citerations += 1pixels[i, j] = 1 - iterations * 0.02gui = ti.GUI("Hello World", res=(n * 2, n))for i in range(1000000):paint(i * 0.03)gui.set_image(pixels)gui.show()

看起来很OK了,我们再运行下。

在这里插入图片描述

在这里插入图片描述

成功啦!

在这里插入图片描述
更多效果案例参看官方这里 https://github.com/taichi-dev/taichi 吧,还是挺好玩的。小马也将继续探索 taichi 在游戏中的应用和大家分享,bye-bye!


  • 彩蛋时间~ ~
    在这里插入图片描述
http://www.dtcms.com/a/392473.html

相关文章:

  • [xboard]07-Makefile逐行分析1
  • 基于规则的专家系统对自然语言处理深层语义分析的影响与启示:历史演进、技术局限与未来融合路径
  • 鸿蒙分布式服务架构实战:从服务注册到远程调用的完整指南
  • PPT中设置和应用空白版式,和占位符干扰说再见
  • Elasticsearch 02
  • 283-基于Django的AppStore应用榜单数据可视化分析推荐系统
  • 星际漫游2025“∞无限”潮玩艺术周于顺德启幕,以东方符号重构潮流宇宙
  • Rust:重塑系统编程的未来,从安全到性能的技术革命
  • Vue 3 提供的 createElement 工具函数——h
  • 在开放系统互联参考模型(OSI)中,安全服务有哪些
  • 鸿蒙分布式文件操作实际开发案例
  • effect的参数和返回值
  • GAMIT 10.71 问题记录
  • 【愚公系列】《人工智能70年》032-机器翻译拆除语言樊篱(自然语言处理阔步前进)
  • 隐私与合规内建:Python医疗AI编程中的SBOM、依赖监测与威胁建模实践分析(下)
  • 基于C++11手撸前端Promise
  • C++学习笔记——内存管理
  • AI热点周报(09.14~09.20):Gemini集成到Chrome、Claude 强化记忆、Qwen3-Next快速落地,AI走向集成化,工程化?
  • 网络服务阶段——作业
  • OpenLayers地图交互 -- 章节三:选择交互详解
  • RocksDB:C++中的RAII锁应用解析
  • Linux920 RHEL 8 YUM配置;root密码;文件夹 磁盘分区 磁盘
  • yarn命令介绍(替代npm命令的JavaScript包管理工具)
  • MFC中开源布局库---ResizableLib
  • Scade 6 编译原理的参考实现 - LustreC
  • MFC List 控件详解:高效数据展示与管理
  • 从根到叶的二进制数之和(霍纳法则)
  • 隐私与合规内建:Python医疗AI编程中的SBOM、依赖监测与威胁建模实践分析(上)
  • 基于实战:如何高效调用陌讯AIGC检测RESTful API进行批量内容审核
  • 如何用kimi写一个最小excel软件