Le 25/09/2011 12:19, Gabriele Fatigati a écrit :
Hi Brice,
>The flag says "when the first touch occurs and the
physical memory is allocated for real, don't allocate on the
local node (default), but >rather allocate where specified by
set_membind".
If is it already allocated for real, how set_membind() can
allocate on other node?
Add the MIGRATE flag.
So, what's the difference between HWLOC_MEMBIND_BIND and
HWLOC_MEMBIND_FIRSTTOUCH?
First touch makes the allocation on the node local to the thread
that touches first (default on Linux).
BIND makes the allocation on the node specified in set_membind.
Doing the follow test:
omp parallel region
if(tid==0){
malloc(array)...
set_area_membind(HWLOCMEMBIND_BIND, node
0)
}
if (tid==1){
set_area_membind(HWLOCMEMBIND_BIND, node
1)
If both set_area_membind work on the same array (not on different
halves), this is doubly-wrong:
* you have no guarantee that thread 0 has already finished doing the
malloc before thread 1 does set_area_membind on the buffer.
* doing two set_area_membind on the same entire array is useless,
the second one will overwrite the first one.
Brice