Please find the attached, system Layout.
*uname -a*
Linux crill-010 3.11.10-21-desktop #1 SMP PREEMPT Mon Jul 21 15:28:46 UTC
2014 (9a9565d) x86_64 x86_64 x86_64 GNU/Linux

and below is the code snippet where I am getting error:

/* Find Location of a: 3rd QUARTER */
* err = hwloc_get_area_membind_nodeset(topology, array+ size/2, size/4,
nodeset_c, &policy, HWLOC_MEMBIND_THREAD ); *
* if (err < 0) {*
* printf("Error Occured, and error no:= %d \n", err);*
fprintf(stderr, "failed to retrieve the buffer binding and policy\n");
hwloc_topology_destroy(topology);
hwloc_bitmap_free(nodeset_c);
//return EXIT_FAILURE;
}

*Please ignore the segfault, here it gives the error no: = -1*

*My question is allocate an array to a NUMA node and bind it over nodes
partially is OK with hwloc API..?*

Thank you again.
- Raju



On Sun, Apr 24, 2016 at 4:58 PM, Brice Goglin <brice.gog...@inria.fr> wrote:

> Please find out which line is actually causing the segfault.
> Run your program under gdb. Once it crashes, type "bt full" and report the
> output here.
>
> By the way, what kind of machine are you using? (lstopo + uname -a)
>
> Brice
>
>
>
>
> Le 24/04/2016 23:46, Rezaul Karim Raju a écrit :
>
> Hi Brice,
>
> Thank you very much for your prompt care.
>
> I am retrieving as below:
>
> nodeset_c = hwloc_bitmap_alloc();
>
> */* Find Location of a: 3rd QUARTER */*
> err = *hwloc_get_area_membind_nodeset(*topology, *array+ size/2, size/4,*
> nodeset_c, &policy, HWLOC_MEMBIND_THREAD );
>
> /* print the corresponding NUMA nodes */
> hwloc_bitmap_asprintf(&s, nodeset_c);
> printf("Address:= %p  Variable:= <array [A]- 3rd quarter> bound to*
> nodeset %s with contains:*\n", (array+size/2), s);
> free(s);
> hwloc_bitmap_foreach_begin(hw_i, nodeset_c) {
> *obj_c = hwloc_get_numanode_obj_by_os_index(topology, hw_i);*
> * printf("[3rd Q]  node #%u (OS index %u) with %lld bytes of memory\n",
> obj_c->logical_index, hw_i, (unsigned long long)
> obj_c->memory.local_memory)*;
> } hwloc_bitmap_foreach_end();
> hwloc_bitmap_free(nodeset_c);
>
> *It prints as below:*
>
>
> *error no:= -1 and segmentation fault  *
> *my array size is =  262144 {data type long} and each Quarter = size/4
> =65536*
> Address of array:= 0x7f350e515000, tmp:= 0x7f34fe515000, tst_array:=
> 0x7f34ee515000
> Address of array:= 0x7f350e515000, array+size/4:= 0x7f352e515000,
> array+size/2:= 0x7f354e515000, array+3*size/4:= 0x7f356e515000
>
> Address:= 0x7f350e515000  Variable:= <array [A] - 1st quarter> bound to
> nodeset 0x00000001 with contains:
>  [1st Q]  node #0 (OS index 0) with 8387047424 bytes of memory
> Address:= 0x7f352e515000  Variable:= <array [A]- 2nd quarter> bound to
> nodeset 0x00000004 with contains:
> [2nd Q]  node #2 (OS index 2) with 8471621632 bytes of memory
>
> in case of [3rd Q]
> Error Occured, and error no:= -1 and segmentation fault happened.
>
> Thanks.!
>
>
> On Sun, Apr 24, 2016 at 4:08 PM, Brice Goglin <brice.gog...@inria.fr>
> wrote:
>
>> Hello,
>> What do you mean with " it can not bind the specified memory section
>> (addr, len) to the desired NUMA node"?
>> Did it fail? If so, what does errno contain?
>> If it didn't fail, what did it do instead?
>> thanks
>> Brice
>>
>>
>>
>>
>> Le 24/04/2016 23:02, Rezaul Karim Raju a écrit :
>>
>> Hi ...
>>
>> I was trying to bind each quarter of an array to 4 different NUMA nodes,
>> and doing as below:
>>
>> *//ALLOCATION *
>> *obj_a = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NODE, 0);*
>>
>> *array =* hwloc_alloc_membind_nodeset( topology, size, obj_a->nodeset,
>> HWLOC_MEMBIND_BIND, 1);
>> *tmp *= hwloc_alloc_membind_nodeset( topology, size, obj_a->nodeset,
>> HWLOC_MEMBIND_BIND, 1);
>>
>> *// DISTRIBUTED BINDING  [my system has 8 NUMA nodes (0-7)]*
>> printf("Address of array:= %p, array+size/4:= %p, array+size/2:= %p,
>> array+3*size/4:= %p \n", array, array+size/4, array+size/2, array+3*size/4);
>> // bind 1st quarter to node (n-1)
>> hwloc_set_area_membind_nodeset(topology, (array), size/4, obj_a->nodeset,
>> HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_MIGRATE);
>> hwloc_set_area_membind_nodeset(topology, (tmp), size/4, obj_a->nodeset,
>> HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_MIGRATE);
>> // bind 2nd quarter to node (2)
>> *obj_b = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NODE,  2);*
>> hwloc_set_area_membind_nodeset(topology, (array+size/4), size/4,
>> obj_b->nodeset, HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_MIGRATE);
>> hwloc_set_area_membind_nodeset(topology, (tmp +size/4), size/4,
>> obj_b->nodeset, HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_MIGRATE);
>>
>> // bind 3rd quarter to node (4)
>> * obj_c = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NODE, 4);*
>> hwloc_set_area_membind_nodeset(topology, array+size/2, size/4,
>> obj_c->nodeset, HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_MIGRATE);
>> hwloc_set_area_membind_nodeset(topology, tmp+size/2, size/4,
>> obj_c->nodeset, HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_MIGRATE);
>> // bind 4th quarter to node (6)
>> * obj_d = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NODE, 6);*
>> hwloc_set_area_membind_nodeset(topology, array+3*size/4, size/4,
>> obj_d->nodeset, HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_MIGRATE);
>> hwloc_set_area_membind_nodeset(topology, tmp+3*size/4, size/4,
>> obj_d->nodeset, HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_MIGRATE);
>>
>>
>> My intention here is to distribute 'array' (which is - long type element:
>>
>> array = (ELM *) malloc(bots_arg_size * sizeof(ELM));
>> tmp = (ELM *) malloc(bots_arg_size * sizeof(ELM));) over nodes through
>> hwloc memory binding.
>>
>> 1). But except only *obj_a, it can not bind the specified memory section
>> (addr, len) to the desired NUMA node. *
>> 2). I did tried with  MEMBIND_INTERLEAVE policy
>> array = hwloc_alloc_membind_nodeset(topology, size, cset_available,
>> HWLOC_MEMBIND_INTERLEAVE, HWLOC_MEMBIND_MIGRATE);
>> tmp = hwloc_alloc_membind_nodeset(topology, size, cset_available,
>> HWLOC_MEMBIND_INTERLEAVE, HWLOC_MEMBIND_MIGRATE);
>> but I did get it working here as well.
>>
>>
>> *Can you please comment on this..?  *
>>
>> Thank you very much in advance..!!
>> - Raju
>>
>> On Mon, Mar 21, 2016 at 11:25 AM, Rezaul Karim Raju <
>> <raju.cse.b...@gmail.com>raju.cse.b...@gmail.com> wrote:
>>
>>> Thanks, Brice.!
>>>
>>> On Mon, Mar 21, 2016 at 11:22 AM, Brice Goglin < <brice.gog...@inria.fr>
>>> brice.gog...@inria.fr> wrote:
>>>
>>>> For testing, you can use this tarball:
>>>>
>>>> https://ci.inria.fr/hwloc/job/zcustombranch-0-tarball/lastSuccessfulBuild/artifact/hwloc-getmemlocation-20160320.2208.gitd2f6537.tar.gz
>>>>
>>>>
>>>>
>>>>
>>>> Le 21/03/2016 17:21, Rezaul Karim Raju a écrit :
>>>>
>>>> Hi Brice,
>>>>
>>>> Thanks for your email.
>>>> I believe it is definitely helpful. Getting memory range within the
>>>> current process will be very good information to drill down.
>>>> Let me use this and I will get back if any clarification/comment I have.
>>>>
>>>> Regards-
>>>> Raju
>>>>
>>>> On Sun, Mar 20, 2016 at 4:26 PM, Brice Goglin < <brice.gog...@inria.fr>
>>>> brice.gog...@inria.fr> wrote:
>>>>
>>>>> I just pushed a proposal, see
>>>>> <https://github.com/open-mpi/hwloc/issues/97>
>>>>> https://github.com/open-mpi/hwloc/issues/97
>>>>>
>>>>> Brice
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Le 18/12/2015 20:45, Brice Goglin a écrit :
>>>>>
>>>>> Yes, we're "thinking" about it. But there are open questions as
>>>>> mentioned in the github issue.
>>>>> By the way, we wouldn't return NULL in case of
>>>>> non-physically-allocated buffer, but rather set the output nodeset to 0.
>>>>> You should comment on the issue directly, instead of replying here,
>>>>> otherwise your comments may get lost.
>>>>>
>>>>> Brice
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Le 18/12/2015 18:57, Rezaul Karim Raju a écrit :
>>>>>
>>>>> Hi Brice,
>>>>>
>>>>> Thanks for your time and nice explanation.
>>>>> I have looked at the issue with location return (the page proportion
>>>>> across multiple node & physical allocation). Are you thinking to add this
>>>>> function..? Like if we think list of node or nodes where the array is
>>>>> allocated (only if physically allocated otherwise NULL) is it possible..?
>>>>>
>>>>> I am looking for getting the physical location of data allocated by OS
>>>>> default policy. Appreciate any better idea and please share with me.
>>>>>
>>>>> Best Regards,
>>>>> - Raju
>>>>>
>>>>> On Tue, Dec 15, 2015 at 3:28 AM, Brice Goglin <
>>>>> <brice.gog...@inria.fr>brice.gog...@inria.fr> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> Le 15/12/2015 07:21, Brice Goglin a écrit :
>>>>>>
>>>>>>
>>>>>>
>>>>>> Le 15/12/2015 05:57, Rezaul Karim Raju a écrit :
>>>>>>
>>>>>> *OUTPUT: *
>>>>>> *Policy-->* buffer(Array: A) *membind [default OS binding] Policy
>>>>>> is:= 1 [1 refers to *HWLOC_MEMBIND_FIRSTTOUCH
>>>>>> <https://www.open-mpi.org/projects/hwloc/doc/v1.11.1/a00083.php#ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0>
>>>>>> *]*
>>>>>> *Nodeset --> *buffer(Array: A) bound to nodeset* 0x000000ff *with
>>>>>> contains*:*
>>>>>>  node #0 (OS index 0) with 8387047424 bytes of memory
>>>>>>  node #1 (OS index 1) with 8471617536 bytes of memory
>>>>>>  node #2 (OS index 2) with 8471621632 bytes of memory
>>>>>>  node #3 (OS index 3) with 8471617536 bytes of memory
>>>>>>  node #4 (OS index 4) with 8471621632 bytes of memory
>>>>>>  node #5 (OS index 5) with 8471617536 bytes of memory
>>>>>>  node #6 (OS index 6) with 8471621632 bytes of memory
>>>>>>  node #7 (OS index 7) with 8471564288 bytes of memory
>>>>>>
>>>>>> *why it shows allocated memory is bound to all available nodeset..?
>>>>>> should it not be allocated to a specific nodeset one ..?*
>>>>>>
>>>>>>
>>>>>> Hello
>>>>>>
>>>>>> You are confusing the "binding" and the "actual location". Your
>>>>>> memory buffer isn't bound to a specific location by default. But Linux 
>>>>>> has
>>>>>> to allocate it somewhere. So your buffer is "located" in some node after
>>>>>> the allocation, but it is not "bound" there (what get_area_membind 
>>>>>> returns)
>>>>>> which means Linux could have allocated it somewhere else.
>>>>>>
>>>>>> hwloc cannot currently return the "location" of a memory buffer. I
>>>>>> have been thinking about adding this feature in the past, but it looks 
>>>>>> like
>>>>>> you are the first actual user requesting this. We could add something 
>>>>>> like
>>>>>> hwloc_get_last_memory_location(topology, input buffer, outputnodeset)
>>>>>> At least on Linux that's possible.
>>>>>>
>>>>>> For clarity, this is similar to the difference between
>>>>>> hwloc_get_cpubind() and hwloc_get_last_cpu_location(): A task always runs
>>>>>> on a specific PU, even if it is not bound to anything specific PU.
>>>>>>
>>>>>>
>>>>>> By the way, there is already an issue for this:
>>>>>> <https://github.com/open-mpi/hwloc/issues/97>
>>>>>> https://github.com/open-mpi/hwloc/issues/97
>>>>>>
>>>>>> Feel to comment there.
>>>>>>
>>>>>> Brice
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> hwloc-users mailing list
>>>>>> <hwloc-us...@open-mpi.org>hwloc-us...@open-mpi.org
>>>>>> Subscription:
>>>>>> <http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-users>
>>>>>> http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-users
>>>>>> Link to this post:
>>>>>> <http://www.open-mpi.org/community/lists/hwloc-users/2015/12/1226.php>
>>>>>> http://www.open-mpi.org/community/lists/hwloc-users/2015/12/1226.php
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> ------------------------
>>>>> RaJu, Rezaul Karim
>>>>> Graduate Student (PhD) | Computer Science | University of Houston
>>>>> Research in High Performance Computing Tools
>>>>> Houston, Texas-77004
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> ------------------------
>>>> RaJu, Rezaul Karim
>>>> Graduate Student (PhD) | Computer Science | University of Houston
>>>> Research in High Performance Computing Tools
>>>> Houston, Texas-77004
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> ------------------------
>>> RaJu, Rezaul Karim
>>> Graduate Student (PhD) | Computer Science | University of Houston
>>> Research in High Performance Computing Tools
>>> Houston, Texas-77004
>>>
>>
>>
>>
>> --
>> ------------------------
>> RaJu, Rezaul Karim
>> Graduate Student (PhD) | Computer Science | University of Houston
>> Research in High Performance Computing Tools
>> Houston, Texas-77004
>>
>>
>>
>
>
> --
> ------------------------
> RaJu, Rezaul Karim
> Graduate Student (PhD) | Computer Science | University of Houston
> Research in High Performance Computing Tools
> Houston, Texas-77004
>
>
>


-- 
------------------------
RaJu, Rezaul Karim
Graduate Student (PhD) | Computer Science | University of Houston
Research in High Performance Computing Tools
Houston, Texas-77004

Reply via email to