使用 PetscMalloc2 (PetscMallocX) 而不是 PetscMalloc 两次(X 次)的经验法则是什么?这些块是否应该具有相似的大小,或者将它们一起/同时分配总是更有效?该手册说“分配 2 (X) 块内存都与 PETSC_MEMALIGN 对齐”用于定义,但对于 PETSc 和精细 HPC 问题的新手来说,这对我来说意义不大。我一直认为编译器会处理这些问题。
问问题
161 次
1 回答
2
请参阅http://www.mcs.anl.gov/petsc/petsc-current/include/petscsys.h.html#PetscMalloc2,第 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
确保两个缓冲区在内存中一个接一个,由于内存对齐而有一点空间。http://en.wikipedia.org/wiki/Data_structure_alignment通过只调用一次进行分配PetscMalloc
,如果您在代码中多次调用此函数会更好。如果你偶尔调用它,它不会有太大变化!
再见,
于 2014-05-23T10:20:34.600 回答