求助,我是最近才开始使用taichi的新手,
在win11, python 3.10.16, taichi 1.7.3环境下,自己写了一个粒子法的程序。
(官网上的大佬的example看不懂 )
折腾了一阵子终于能够运行了,但是现在出现了个问题。
在ti.init(arch=ti.cpu, default_fp=ti.f64)时,程序运行到一半就自动退出,退出时不会给出任何报错信息。
比如希望程序运行10万步,结果2万步就停止了,没有报错信息。
程序中使用了ti.root.dense和ti.root.pointer等储存了一些动态大小的的粒子位置和相互作用信息。
但是哪怕把这些都用固定长度的field代替,程序会比之前多运行一些,比如到4万步,但是还是会不给出任何报错信息直接退出。
在ti.init(arch=ti.gpu, default_fp=ti.f64,device_memory_fraction=0.6)时,程序会运行到5万步(打比方),但是会因为显存占满,报gpu oom的错误。
在ubuntu上运行时,ti.init(arch=ti.cpu, default_fp=ti.f64)时,报错
Fatal glibc error: tpp.c:83 (__pthread_tpp_change_priority): assertion failed: new_prio == -1 || (new_prio >= fifo_min_prio && new_prio <= fifo_max_prio)
Aborted (core dumped)
在ubuntu上运行时,ti.init(arch=ti.gpu, default_fp=ti.f64,device_memory_fraction=0.6)时,报错
[E 02/27/25 18:54:04.105 17639] [cuda_driver.h:operator()@92] CUDA Error CUDA_ERROR_OUT_OF_MEMORY: out of memory while calling malloc_async_impl (cuMemAllocAsync)
我只有3060 12G,但是有128GB的内存,所以还是希望能够在cpu上运行。
顺带一提,计算结果看起来是收敛的,所以应该不是计算过程中出现nan或者inf之类的东西造成的错误。
求各位大佬帮小弟看看啊!
补足,我在运行过程中生成了一些field, 可能是因为生成的field太多,而且没有“删除”或者"回收"导致的上述问题。将生成的field改为更新field之后,问题解决了一部分。
请问各位大佬,在taichi中需要注意不要生成太多field吗?