PetscMalloc vs PetscMallocX

PetscMalloc vs PetscMallocX,c,malloc,petsc,C,Malloc,Petsc,使用PetscMalloc2(PetscMallocX)代替PetscMalloc两次(X次)的经验法则是什么?这些块应该有相似的大小,还是将它们一起/同时分配总是更有效?手册中的定义是“分配2(X)块内存,两块内存都与PETSC_MEMALIGN对齐”,但作为PETSC和精细HPC问题的新手,这对我来说意义不大。我一直认为编译器会处理这些问题。请参阅,ligne 566: #if defined(PETSC_USE_DEBUG) #define PetscMalloc2(m1,t1,r1,m2

使用PetscMalloc2(PetscMallocX)代替PetscMalloc两次(X次)的经验法则是什么?这些块应该有相似的大小,还是将它们一起/同时分配总是更有效?手册中的定义是“分配2(X)块内存,两块内存都与PETSC_MEMALIGN对齐”,但作为PETSC和精细HPC问题的新手,这对我来说意义不大。我一直认为编译器会处理这些问题。

请参阅,ligne 566:

#if defined(PETSC_USE_DEBUG)
#define PetscMalloc2(m1,t1,r1,m2,t2,r2) (PetscMalloc((m1)*sizeof(t1),r1) || PetscMalloc((m2)*sizeof(t2),r2))
#else
#define PetscMalloc2(m1,t1,r1,m2,t2,r2) ((*(r2) = 0,PetscMalloc((m1)*sizeof(t1) (m2)*sizeof(t2)+(PETSC_MEMALIGN-1),r1)) || (*(r2) = (t2*)PetscAddrAlign(*(r1)+m1),0))
#endif
如果您处于调试模式,
PetscMalloc2
相当于两个
PetscMalloc

否则,
PetscMalloc2
会确保两个缓冲区在内存中一个接一个,由于内存对齐,会有一点空间。通过
PetscMalloc
进行的分配只能调用一次,如果在代码中多次调用此函数会更好。如果你偶尔给它打个电话,它不会有多大变化

再见