我已经使用 valloc 分配了内存,比方说 [15*sizeof(double)] 的数组 A。现在我把它分成三块,我想将每一块(长度为 5)绑定到三个 NUMA 节点(比如 0、1 和 2)。目前,我正在执行以下操作:
double* A=(double*)valloc(15*sizeof(double));
piece=5;
nodemask=1;
mbind(&A[0],piece*sizeof(double),MPOL_BIND,&nodemask,64,MPOL_MF_MOVE);
nodemask=2;
mbind(&A[5],piece*sizeof(double),MPOL_BIND,&nodemask,64,MPOL_MF_MOVE);
nodemask=4;
mbind(&A[10],piece*sizeof(double),MPOL_BIND,&nodemask,64,MPOL_MF_MOVE);
第一个问题是我做得对吗?例如,与页面大小正确对齐是否有任何问题?目前,数组 A 的大小为 15,它运行良好,但如果我将数组大小重置为 6156000 和piece=2052000,随后对 mbind 的三个调用以 &A[0]、&A[2052000] 和 &A[4104000 ] 然后我得到一个分段错误(有时它只是挂在那里)。为什么它适用于小尺寸但对于较大的尺寸会给我带来段错误?谢谢。