|
自从Python编程语言诞生以来,它的核心理念一直是最大限度地提高代码的可读性和简单性。Python对可读性和简单性的追求简直达到了如痴如狂的境地。一个事实即可证实这一点:只要你在Python系统的根目录中输入命令“import this”后按下回车键,竟然马上打印出一首英文小诗,翻译成中文大致意思是: 8 o! s5 \4 G: ~
“美丽胜过丑陋,显式优于隐式。 7 R" R1 X, A- K0 ~- O+ O
简单比复杂好,复杂比繁杂好。 7 I6 C) p- ~7 [6 |8 c% H
扁平优于嵌套,稀疏胜过密集。
- e0 F0 A( |3 h" T) v9 w$ M! Z可读性很重要……” , u5 d3 ?# S& n$ A! c
简单总比复杂好,可读性很重要。毫无疑问,Python确实在实现这些目标方面非常成功:它是迄今为止最友好的学习语言,并且一个普通的Python程序通常比等效的C++代码短5到10倍。不幸的是,这里有一个陷阱:Python的简单性是以降低性能为代价的!事实上,Python程序比C++对应的速度慢10到100倍。因此,似乎在速度和简单性之间存在着一种永久的权衡,任何编程语言都不可能同时拥有这两者。 # x3 K' M0 |- L* o3 u# r0 K+ R
但是,别担心,所有的希望都没有失去。 ! }* G* H% L5 O& G
+ [6 V) D, u) I5 b( G3 oTaichi可实现两全其美 Taichi编程语言是对Python编程语言进行扩展的一种尝试,其结构支持通用、高性能的计算。它支持无缝地嵌入到Python中,而同时可以发挥计算机中所有的计算能力——包括多核CPU功能以及更为重要的GPU性能。
' G3 A) k. e. g+ ^+ a* h7 w, f我们在本文中将展示一个使用Taichi编写的示例程序。该程序使用GPU对落在球体上的一块布进行实时物理模拟,同时渲染结果。 8 Q8 v! `: l/ m+ x
编写实时GPU物理模拟器绝非易事,但是实现本例程的Taichi源代码却异常简单。本文的其余部分将引导你完成整个实现,这样你就可以领略Taichi提供的功能,以及它们的强大和友好程度。 / F- W% Z$ f. E$ y0 _. N4 q: {
在我们开始之前,你不妨先猜猜这个程序大概由多少行代码组成。当然,你会在文章末尾找到这一答案。
( A9 r6 h" j9 u0 n' N算法概述 我们的程序将把一块布料建模为一个质量弹簧系统。更具体地说,我们将此布料表示为点质量的N×N网格,其中相邻点由弹簧连接。 & C/ l- r# ?$ C: i! i6 k! n0 S
该质量弹簧系统的运动受4个因素影响:
0 Y- ^. Q7 T) G% x% `重力 - r! ]7 O/ W5 O& u2 g* k9 t
弹簧的内力 6 }# [5 B: k* q: B
阻尼
8 J& r# ^: x4 ^2 Y- @$ X与夹在中间的红球碰撞 4 A$ P" {! z5 E {
为了简单起见,我们忽略了布料的自碰撞。我们的程序在t=0时开始。然后,在模拟的每一步,它将时间提前一个小常数dt。该程序通过评估上述4个因素中的每一个因素的影响来估计系统在这一小段时间内会发生什么,taichi并在时间步结束时更新每个质量点的位置和速度。然后,更新的质点位置用于更新屏幕上渲染的图像。taichi https://taichi-lang.cn/
' ]% s; t, P# L- Q9 q9 {6 m2 D" Q6 M) q |