vallocを使用してメモリを割り当てました。たとえば、[15 * sizeof(double)]の配列Aとします。ここで、これを3つの部分に分割し、各部分(長さ5)を3つの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への3回の呼び出しは、&A [0]、&A [2052000]、および&A[4104000]で始まります。 ]その後、セグメンテーション違反が発生します(そして時々それがただそこにぶら下がっています)。なぜ小さいサイズでも問題なく動作するのに、大きいサイズではセグメンテーション違反が発生するのですか?ありがとう。