作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 PetscMalloc2 (PetscMallocX) 代替 PetscMalloc 两次(X 次)的经验法则是什么? block 是否应该具有相似的大小,或者将它们分配在一起/同时分配总是更有效?手册中的定义是“分配 2 (X) 个与 PETSC_MEMALIGN 对齐的内存块”,但这对我作为 PETSc 和精细 HPC 问题的新手来说意义不大。我一直认为编译器会处理此类问题。
最佳答案
参见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
如果处于 Debug模式,PetscMalloc2
相当于两个 PetscMalloc
。
否则,PetscMalloc2
确保两个缓冲区在内存中是一个接一个的,由于内存对齐而有一点空间。 http://en.wikipedia.org/wiki/Data_structure_alignment通过 PetscMalloc
进行的分配仅被调用一次,如果您在代码中多次调用此函数,效果会更好。如果你偶尔调用一次,它不会有太大变化!
再见,
关于c - PetscMalloc 与 PetscMallocX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22566896/
使用 PetscMalloc2 (PetscMallocX) 代替 PetscMalloc 两次(X 次)的经验法则是什么? block 是否应该具有相似的大小,或者将它们分配在一起/同时分配总是更有
我是一名优秀的程序员,十分优秀!