0

我目前正在编写一个使用大量 RAM 的 python 程序。我知道我可以使用垃圾收集器来“释放”内存并避免这个问题。但是,我使用 Numba 来加速我的代码,这使得我需要释放 RAM 的部分与垃圾收集器不兼容。另外,它会减慢我的代码到它无论如何都完全没用的地步。现在我正在一台 32 GB RAM 的 MacBook Pro 上测试代码。我对软件开发略知一二,但对硬件一窍不通。我要将我的代码从 Mac 翻译到树莓派和 Nano Pi Fire 3 上。这是因为我使用的是多处理模块(Raspberry Pi 有 4 个内核,Nano Pi Fire 3 有 8 个)。我显然也在使用 MPI 模块来传递消息。我发现在简单搜索后添加更多 RAM 的一种解决方案是交换文件,在我使用的两种类型的板上设置这些文件相当容易。但是,我想知道这对于 python 代码是否真的是一个可行的选择?如果我允许 128 GB 的交换文件并使用 zRAM。这适用于其唯一目的是运行此代码的板,我会不再遇到 RAM 问题吗?

这就是为什么我认为这是 RAM 的问题:

第一个迹象是,如果我不使用 Numba 加速特定功能,那么程序运行完全正常,除了慢一点。但是,当我使用 Numba 的加速时,这是我收到的崩溃报告:

VM Region Summary:
ReadOnly portion of Libraries: Total=688.6M resident=0K(0%) swapped_out_or_unallocated=688.6M(100%)
Writable regions: Total=1.0G written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=1.0G(100%)
 
                                VIRTUAL   REGION 
REGION TYPE                        SIZE    COUNT (non-coalesced) 
===========                     =======  ======= 
Dispatch continuations            32.0M        1 
Kernel Alloc Once                    8K        1 
MALLOC                           750.4M     1263 
MALLOC guard page                   16K        3 
MALLOC_LARGE (reserved)            384K        2         reserved VM address space (unallocated)
STACK GUARD                         32K        8 
Stack                             19.6M        8 
VM_ALLOCATE                      101.2M      723 
VM_ALLOCATE (reserved)           160.0M        2         reserved VM address space (unallocated)
__DATA                            28.3M      399 
__DATA_CONST                        20K        1 
__FONT_DATA                          4K        1 
__LINKEDIT                       407.9M      116 
__OBJC_RO                         32.2M        1 
__OBJC_RW                         1892K        2 
__TEXT                           280.7M      359 
__UNICODE                          564K        1 
shared memory                       12K        3 
===========                     =======  ======= 
TOTAL                              1.8G     2894 
TOTAL, minus reserved VM space     1.6G     2894 

Model: MacBookPro16,1, 8 processors, 8-Core Intel Core i9, 2.3 GHz, 16 GB, SMC

因此,可以看出在我的程序中使用了很多 RAM 和交换空间。如果我找不到解决方案,或者在板上添加交换空间不起作用,那么显然我将不得不牺牲实际工作的速度。但是,如果在我可能浪费时间这样做之前知道我认为可行的解决方案实际上会起作用,那就太好了。

4

0 回答 0