求助,程序运行到一半不报错直接退出

求助,我是最近才开始使用taichi的新手,
在win11, python 3.10.16, taichi 1.7.3环境下,自己写了一个粒子法的程序。
(官网上的大佬的example看不懂 :sob:
折腾了一阵子终于能够运行了,但是现在出现了个问题。
在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之类的东西造成的错误。

求各位大佬帮小弟看看啊!
:sob:

补足,我在运行过程中生成了一些field, 可能是因为生成的field太多,而且没有“删除”或者"回收"导致的上述问题。将生成的field改为更新field之后,问题解决了一部分。
请问各位大佬,在taichi中需要注意不要生成太多field吗?

field应该是不要太多,应该是一直存在显存里的,所以不停生产新的field肯定会占满显存
建议最好每隔几步都输出下结果,有时候一些奇怪的报错,可能都是算法层面的问题

谢谢大佬回复,gpu显存占满了报错可以理解,但是明明cpu的内存还有很多的情况下,生成很多field也会报错(或者静默退出),这就不是那么容易理解了。
虽说使用更新field而不是新生成field的确能够节约内存,是一个更好的习惯。
但是如果文档里写明“生成很多field会内存泄漏”、“生成多少field会造成内存泄漏”之类的说明就更好了。
如果真的需要在运行过程中生成field的话,这里是不是需要手动内存管理了。
好吧,我记住了,谢谢大佬回复。