PetscMalloc を 2 回 (X 回) 使用する代わりに、PetscMalloc2 (PetscMallocX) を使用するための経験則は何ですか? チャンクは同様のサイズにする必要がありますか、それともそれらを一緒に/同時に割り当てる方が常に効率的ですか? マニュアルには、定義として「PETSC_MEMALIGN にアラインされた 2 (X) 個のメモリ チャンクを割り当てる」と記載されていますが、PETSc や細かい HPC の問題の初心者である私にとってはあまり意味がありません。私はいつも、コンパイラがそのような問題を処理してくれると思っていました。
1 に答える
2
http://www.mcs.anl.gov/petsc/petsc-current/include/petscsys.h.html#PetscMalloc2、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
は two に相当しPetscMalloc
ます。
それ以外の場合PetscMalloc2
、両方のバッファーがメモリ内で次々と存在し、メモリの配置によりわずかなスペースが確保されます。http://en.wikipedia.org/wiki/Data_structure_alignmentアロケーションPetscMalloc
は 1 回だけ呼び出されます。これは、コード内でこの関数を何度も呼び出す場合に適しています。たまに呼んでもあまり変わらない!
さよなら、
于 2014-05-23T10:20:34.600 に答える