pinning
First Touch policy
방법이 있음. OS 는 NUMA archi. 를 알고 있기 때문에, 첫번째로 memory 를 touch 한 thread 의 local memory 에 data 를 할당 함. #pragma omp parallel for
for(int i = 0; i < N; i++)
{
a[i] = 0.0;
b[i] = i;
}
#pragma omp parallel for
{
a[i] = a[i] + b[i];
}
pinning
이 옳바르게 적용되었으면, thread 별 local memory 에만 접근하면 되도록 data chunk 가 분배 됨.thread pinning
,thread affinity
,process binding
,process affinity
는 혼용되어 사용 됨.OMP_PLACES
,OMP_PROC_BINC
OMP_PLACES
<lowerbound>:<length>:<stride>
{0}:12:2
or {0:1}:12:2
-> Places : {0},{2},{4},{6},{8},{10},{12},{14},{16},{18},{20},{22}{0,1}:6:4
or {0:2}:6:4
-> Places : {0,1},{4,5},{8,9},{12,13},{16,17},{20,21}OMP_PLACES="{0,1,2,3}"
OMP_PROC_BIND
true
: thread 가 못 이동함false
: thread 가 이동 가능master
: worker thread
가 master thread
와 같은 partition 에 위치close
: worker thread
가 master thread
와 가깝게 에 위치spread
: worker thread
가 master thread
와 최대한 먼 partition 에 위치--bind-to
,--map-by
,--report-bindings
cpuinfo
,hwloc-ls
cmd 사용)출처 :