9.22 更新【Ti example 投稿】taichi实现等离子体模拟——以双流不稳定性为例

谢谢指点,虽然不知道改动后的物理意义,作了如下两处改变后,再跑64位代码,效果确实与之前不一样了。:
wc=20000
vpe1 = 100

再开个脑洞,这个双流不稳定性,也许可以用在天文学,星云演变上,也许吧

kempo1_book.pdf (4.1 MB)

您好,发给您了,可以参考一下

补一个GIF
two_stream_instability

3 个赞

刚跑了一下最新提交的代码

使用Taichi实现了一套简短的等离子体particle-in-cell code。

显卡和CPU占用都很低,但是帧数只能跑到 20 左右


我对比了一下,应该是 gui.circles 的执行效率比较低

我将 v_x_pos1 转为 numpy 数组,并保存到本地,进入 ipython 中单独测试 gui.circles 的速度,结果如图所示


单次执行 14 ms,而代码中,输出每帧的画面调用了两次 gui.circles,加上 to_numpy 的耗时,共计 30ms 左右,也就是每秒 33个 iter 左右。所以基本上,耗时全部集中在 gui.circles。
而且这个函数,从显卡和CPU的占用情况来看,并没有被很好地并行化,我再使用 %%timeit 进行测试 gui.circles 的速度时,显卡和CPU的占用与第一张图基本保持一致。

我进一步使用 viztracer,单独记录了 gui.circles 的耗时情况,如下:

该函数在python中执行的部分到图中圈出的 isinstance 部分结束,耗时只有36us左右,并没有造成太大的开销,而后续执行的 circles_batched 为主要开销,但是 viztracer 无法继续分析。

太极的 ti.GUI 是用 cpu 渲染的,速度可能较慢。可以考虑改成 ggui A New UI system: GGUI | Taichi Docs ,显示速度应该会快很多。

3 个赞

@Jiao_luhuai 我参照建议,尝试修改了代码中的main函数,改为使用 ggui,现在即使只使用cpu也能获得非常高的帧数了。

def main():
    initialize()
    window = ti.ui.Window("pic88", (800, 800))
    while window.running:
        for s in range(substepping):
            substep()
        vx_pos()
        canvas = window.get_canvas()
        canvas.circles(v_x_pos1, color=(0, 0, 1), radius=1 / 400)  # 0x0000ff
        canvas.circles(v_x_pos2, color=(1, 0, 0), radius=1 / 400)  # 0xff0000
        window.show()


使用CPU进行计算,我的电脑(10代i7)可以达到120fps。

1 个赞

试了一下,确实好快 :star_struck:

:star_struck:很棒的建议

你的效果很棒!可否请你给 Taichi 提一个 PR,在 examples 中加入你的这个作品?

顺便你还可以:

  • 在代码开头加几句话描述这个项目的目的 (reference 和 credit 信息也都是可以的)
  • 在代码中适当添加注释提高可读性

谢谢!

好啊好啊! 描述/注释已添加。后续会提交PR.

2 个赞

哈喽,你学会了吗??