[Openmp-commits] [openmp] r269365 - Adding new kmp_aligned_malloc() entry point
Hal Finkel via Openmp-commits
openmp-commits at lists.llvm.org
Fri May 13 05:49:23 PDT 2016
----- Original Message -----
> From: "Andrey Churbanov" <Andrey.Churbanov at intel.com>
> To: "Hal Finkel" <hfinkel at anl.gov>, "Jonathan L Peyton" <jonathan.l.peyton at intel.com>
> Cc: openmp-commits at lists.llvm.org
> Sent: Friday, May 13, 2016 7:34:18 AM
> Subject: RE: [Openmp-commits] [openmp] r269365 - Adding new kmp_aligned_malloc() entry point
>
> Hi Hal,
>
> Why the runtime/test/api/kmp_aligned_malloc.c test added by the
> commit not enough?
It is. Sorry, missed that.
-Hal
>
> Thanks,
> Andrey
>
> -----Original Message-----
> From: Openmp-commits [mailto:openmp-commits-bounces at lists.llvm.org]
> On Behalf Of Hal Finkel via Openmp-commits
> Sent: Friday, May 13, 2016 1:09 AM
> To: Peyton, Jonathan L <jonathan.l.peyton at intel.com>
> Cc: openmp-commits at lists.llvm.org
> Subject: Re: [Openmp-commits] [openmp] r269365 - Adding new
> kmp_aligned_malloc() entry point
>
> Hi Jonathan,
>
> Can you please add some basic test cases that use this interface?
>
> Thanks again,
> Hal
>
> ----- Original Message -----
> > From: "Jonathan Peyton via Openmp-commits"
> > <openmp-commits at lists.llvm.org>
> > To: openmp-commits at lists.llvm.org
> > Sent: Thursday, May 12, 2016 5:00:37 PM
> > Subject: [Openmp-commits] [openmp] r269365 - Adding new
> > kmp_aligned_malloc() entry point
> >
> > Author: jlpeyton
> > Date: Thu May 12 17:00:37 2016
> > New Revision: 269365
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=269365&view=rev
> > Log:
> > Adding new kmp_aligned_malloc() entry point
> >
> > This change adds a new entry point,
> > kmp_aligned_malloc(size_t size, size_t alignment), an entry point
> > corresponding to kmp_malloc() but with the capability to return
> > aligned memory as well.
> > Other allocator routines have been adjusted so that kmp_free() can
> > be
> > used for freeing memory blocks allocated by any kmp_*alloc()
> > routine,
> > including the new
> > kmp_aligned_malloc() routine.
> >
> > Differential Revision: http://reviews.llvm.org/D19814
> >
> > Added:
> > openmp/trunk/runtime/test/api/kmp_aligned_malloc.c (with
> > props)
> > Modified:
> > openmp/trunk/runtime/src/dllexports
> > openmp/trunk/runtime/src/include/30/omp.h.var
> > openmp/trunk/runtime/src/include/30/omp_lib.f.var
> > openmp/trunk/runtime/src/include/30/omp_lib.f90.var
> > openmp/trunk/runtime/src/include/30/omp_lib.h.var
> > openmp/trunk/runtime/src/include/40/omp.h.var
> > openmp/trunk/runtime/src/include/40/omp_lib.f.var
> > openmp/trunk/runtime/src/include/40/omp_lib.f90.var
> > openmp/trunk/runtime/src/include/40/omp_lib.h.var
> > openmp/trunk/runtime/src/include/41/omp.h.var
> > openmp/trunk/runtime/src/include/41/omp_lib.f.var
> > openmp/trunk/runtime/src/include/41/omp_lib.f90.var
> > openmp/trunk/runtime/src/include/41/omp_lib.h.var
> > openmp/trunk/runtime/src/kmp.h
> > openmp/trunk/runtime/src/kmp_alloc.c
> > openmp/trunk/runtime/src/kmp_ftn_entry.h
> > openmp/trunk/runtime/src/kmp_ftn_os.h
> > openmp/trunk/runtime/src/kmp_stub.c
> >
> > Modified: openmp/trunk/runtime/src/dllexports
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/dllexport
> > s?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/dllexports (original)
> > +++ openmp/trunk/runtime/src/dllexports Thu May 12 17:00:37 2016
> > @@ -396,6 +396,7 @@ kmpc_set_defaults
> > __kmpc_taskloop 266
> > %endif
> > %endif
> > +kmpc_aligned_malloc 265
> >
> > # User API entry points that have both lower- and upper- case
> > versions for Fortran.
> > # Number for lowercase version is indicated. Number for uppercase
> > is obtained by adding 1000.
> > @@ -448,6 +449,7 @@ kmp_get_num_known_threads
> > kmp_set_stacksize_s 744
> > kmp_get_stacksize_s 745
> > kmp_set_defaults 746
> > +kmp_aligned_malloc 747
> > kmp_set_warnings_on 779
> > kmp_set_warnings_off 780
> >
> >
> > Modified: openmp/trunk/runtime/src/include/30/omp.h.var
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/include/3
> > 0/omp.h.var?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/include/30/omp.h.var (original)
> > +++ openmp/trunk/runtime/src/include/30/omp.h.var Thu May 12
> > 17:00:37
> > 2016
> > @@ -141,6 +141,7 @@
> > extern int __KAI_KMPC_CONVENTION
> > kmp_get_affinity_mask_proc
> > (int, kmp_affinity_mask_t *);
> >
> > extern void * __KAI_KMPC_CONVENTION kmp_malloc (size_t);
> > + extern void * __KAI_KMPC_CONVENTION kmp_aligned_malloc
> > (size_t, size_t);
> > extern void * __KAI_KMPC_CONVENTION kmp_calloc (size_t,
> > size_t);
> > extern void * __KAI_KMPC_CONVENTION kmp_realloc (void *,
> > size_t);
> > extern void __KAI_KMPC_CONVENTION kmp_free (void *);
> >
> > Modified: openmp/trunk/runtime/src/include/30/omp_lib.f.var
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/include/3
> > 0/omp_lib.f.var?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/include/30/omp_lib.f.var (original)
> > +++ openmp/trunk/runtime/src/include/30/omp_lib.f.var Thu May 12
> > 17:00:37 2016
> > @@ -323,6 +323,13 @@
> > integer (kind=kmp_size_t_kind) size
> > end function kmp_malloc
> >
> > + function kmp_aligned_malloc(size, alignment)
> > + use omp_lib_kinds
> > + integer (kind=kmp_pointer_kind) kmp_aligned_malloc
> > + integer (kind=kmp_size_t_kind) size
> > + integer (kind=kmp_size_t_kind) alignment
> > + end function kmp_aligned_malloc
> > +
> > function kmp_calloc(nelem, elsize)
> > use omp_lib_kinds
> > integer (kind=kmp_pointer_kind) kmp_calloc @@ -416,6
> > +423,7 @@ !dec$ attributes
> > alias:'KMP_UNSET_AFFINITY_MASK_PROC'::kmp_unset_affinity_mask_proc
> > !dec$ attributes
> > alias:'KMP_GET_AFFINITY_MASK_PROC'::kmp_get_affinity_mask_proc
> > !dec$ attributes alias:'KMP_MALLOC'::kmp_malloc
> > +!dec$ attributes alias:'KMP_ALIGNED_MALLOC'::kmp_aligned_malloc
> > !dec$ attributes alias:'KMP_CALLOC'::kmp_calloc !dec$ attributes
> > alias:'KMP_REALLOC'::kmp_realloc !dec$ attributes
> > alias:'KMP_FREE'::kmp_free @@ -482,6 +490,7 @@ !dec$ attributes
> > alias:'_KMP_UNSET_AFFINITY_MASK_PROC'::kmp_unset_affinity_mask_proc
> > !dec$ attributes
> > alias:'_KMP_GET_AFFINITY_MASK_PROC'::kmp_get_affinity_mask_proc
> > !dec$ attributes alias:'_KMP_MALLOC'::kmp_malloc
> > +!dec$ attributes alias:'_KMP_ALIGNED_MALLOC'::kmp_aligned_malloc
> > !dec$ attributes alias:'_KMP_CALLOC'::kmp_calloc !dec$ attributes
> > alias:'_KMP_REALLOC'::kmp_realloc !dec$ attributes
> > alias:'_KMP_FREE'::kmp_free @@ -551,6 +560,7 @@ !dec$ attributes
> > alias:'kmp_unset_affinity_mask_proc_'::kmp_unset_affinity_mask_proc
> > !dec$ attributes
> > alias:'kmp_get_affinity_mask_proc_'::kmp_get_affinity_mask_proc
> > !dec$ attributes alias:'kmp_malloc_'::kmp_malloc
> > +!dec$ attributes alias:'kmp_aligned_malloc_'::kmp_aligned_malloc
> > !dec$ attributes alias:'kmp_calloc_'::kmp_calloc !dec$ attributes
> > alias:'kmp_realloc_'::kmp_realloc !dec$ attributes
> > alias:'kmp_free_'::kmp_free @@ -620,6 +630,7 @@ !dec$ attributes
> > alias:'_kmp_unset_affinity_mask_proc_'::kmp_unset_affinity_mask_proc
> > !dec$ attributes
> > alias:'_kmp_get_affinity_mask_proc_'::kmp_get_affinity_mask_proc
> > !dec$ attributes alias:'_kmp_malloc_'::kmp_malloc
> > +!dec$ attributes alias:'_kmp_aligned_malloc_'::kmp_aligned_malloc
> > !dec$ attributes alias:'_kmp_calloc_'::kmp_calloc !dec$
> > attributes
> > alias:'_kmp_realloc_'::kmp_realloc
> > !dec$ attributes alias:'_kmp_free_'::kmp_free
> >
> > Modified: openmp/trunk/runtime/src/include/30/omp_lib.f90.var
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/include/3
> > 0/omp_lib.f90.var?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/include/30/omp_lib.f90.var (original)
> > +++ openmp/trunk/runtime/src/include/30/omp_lib.f90.var Thu May 12
> > 17:00:37 2016
> > @@ -328,6 +328,13 @@
> > integer (kind=kmp_size_t_kind), value :: size
> > end function kmp_malloc
> >
> > + function kmp_aligned_malloc(size, alignment) bind(c)
> > + use omp_lib_kinds
> > + integer (kind=kmp_pointer_kind) kmp_aligned_malloc
> > + integer (kind=kmp_size_t_kind), value :: size
> > + integer (kind=kmp_size_t_kind), value :: alignment
> > + end function kmp_aligned_malloc
> > +
> > function kmp_calloc(nelem, elsize) bind(c)
> > use omp_lib_kinds
> > integer (kind=kmp_pointer_kind) kmp_calloc
> >
> > Modified: openmp/trunk/runtime/src/include/30/omp_lib.h.var
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/include/3
> > 0/omp_lib.h.var?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/include/30/omp_lib.h.var (original)
> > +++ openmp/trunk/runtime/src/include/30/omp_lib.h.var Thu May 12
> > 17:00:37 2016
> > @@ -321,6 +321,13 @@
> > integer (kind=kmp_size_t_kind) size
> > end function kmp_malloc
> >
> > + function kmp_aligned_malloc(size, alignment)
> > + import
> > + integer (kind=kmp_pointer_kind) kmp_aligned_malloc
> > + integer (kind=kmp_size_t_kind) size
> > + integer (kind=kmp_size_t_kind) alignment
> > + end function kmp_aligned_malloc
> > +
> > function kmp_calloc(nelem, elsize)
> > import
> > integer (kind=kmp_pointer_kind) kmp_calloc @@ -416,6
> > +423,7
> > @@ !dec$ attributes
> > alias:'KMP_UNSET_AFFINITY_MASK_PROC'::kmp_unset_affinity_mask_proc
> > !dec$ attributes
> > alias:'KMP_GET_AFFINITY_MASK_PROC'::kmp_get_affinity_mask_proc
> > !dec$ attributes alias:'KMP_MALLOC'::kmp_malloc
> > +!dec$ attributes alias:'KMP_ALIGNED_MALLOC'::kmp_aligned_malloc
> > !dec$ attributes alias:'KMP_CALLOC'::kmp_calloc !dec$ attributes
> > alias:'KMP_REALLOC'::kmp_realloc !dec$ attributes
> > alias:'KMP_FREE'::kmp_free @@ -484,6 +492,7 @@ !dec$ attributes
> > alias:'_KMP_UNSET_AFFINITY_MASK_PROC'::kmp_unset_affinity_mask_proc
> > !dec$ attributes
> > alias:'_KMP_GET_AFFINITY_MASK_PROC'::kmp_get_affinity_mask_proc
> > !dec$ attributes alias:'_KMP_MALLOC'::kmp_malloc
> > +!dec$ attributes alias:'_KMP_ALIGNED_MALLOC'::kmp_aligned_malloc
> > !dec$ attributes alias:'_KMP_CALLOC'::kmp_calloc !dec$ attributes
> > alias:'_KMP_REALLOC'::kmp_realloc !dec$ attributes
> > alias:'_KMP_FREE'::kmp_free @@ -555,6 +564,7 @@ !dec$ attributes
> > alias:'kmp_unset_affinity_mask_proc_'::kmp_unset_affinity_mask_proc
> > !dec$ attributes
> > alias:'kmp_get_affinity_mask_proc_'::kmp_get_affinity_mask_proc
> > !dec$ attributes alias:'kmp_malloc_'::kmp_malloc
> > +!dec$ attributes alias:'kmp_aligned_malloc_'::kmp_aligned_malloc
> > !dec$ attributes alias:'kmp_calloc_'::kmp_calloc !dec$ attributes
> > alias:'kmp_realloc_'::kmp_realloc !dec$ attributes
> > alias:'kmp_free_'::kmp_free @@ -626,6 +636,7 @@ !dec$ attributes
> > alias:'_kmp_unset_affinity_mask_proc_'::kmp_unset_affinity_mask_proc
> > !dec$ attributes
> > alias:'_kmp_get_affinity_mask_proc_'::kmp_get_affinity_mask_proc
> > !dec$ attributes alias:'_kmp_malloc_'::kmp_malloc
> > +!dec$ attributes alias:'_kmp_aligned_malloc_'::kmp_aligned_malloc
> > !dec$ attributes alias:'_kmp_calloc_'::kmp_calloc !dec$
> > attributes
> > alias:'_kmp_realloc_'::kmp_realloc
> > !dec$ attributes alias:'_kmp_free_'::kmp_free
> >
> > Modified: openmp/trunk/runtime/src/include/40/omp.h.var
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/include/4
> > 0/omp.h.var?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/include/40/omp.h.var (original)
> > +++ openmp/trunk/runtime/src/include/40/omp.h.var Thu May 12
> > 17:00:37
> > 2016
> > @@ -137,6 +137,7 @@
> > extern omp_proc_bind_t __KAI_KMPC_CONVENTION omp_get_proc_bind
> > (void);
> >
> > extern void * __KAI_KMPC_CONVENTION kmp_malloc (size_t);
> > + extern void * __KAI_KMPC_CONVENTION kmp_aligned_malloc
> > (size_t, size_t);
> > extern void * __KAI_KMPC_CONVENTION kmp_calloc (size_t,
> > size_t);
> > extern void * __KAI_KMPC_CONVENTION kmp_realloc (void *,
> > size_t);
> > extern void __KAI_KMPC_CONVENTION kmp_free (void *);
> >
> > Modified: openmp/trunk/runtime/src/include/40/omp_lib.f.var
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/include/4
> > 0/omp_lib.f.var?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/include/40/omp_lib.f.var (original)
> > +++ openmp/trunk/runtime/src/include/40/omp_lib.f.var Thu May 12
> > 17:00:37 2016
> > @@ -406,6 +406,13 @@
> > integer (kind=kmp_size_t_kind) size
> > end function kmp_malloc
> >
> > + function kmp_aligned_malloc(size, alignment)
> > + use omp_lib_kinds
> > + integer (kind=kmp_pointer_kind) kmp_aligned_malloc
> > + integer (kind=kmp_size_t_kind) size
> > + integer (kind=kmp_size_t_kind) alignment
> > + end function kmp_aligned_malloc
> > +
> > function kmp_calloc(nelem, elsize)
> > use omp_lib_kinds
> > integer (kind=kmp_pointer_kind) kmp_calloc @@ -513,6
> > +520,7 @@ !dec$ attributes
> > alias:'KMP_UNSET_AFFINITY_MASK_PROC'::kmp_unset_affinity_mask_proc
> > !dec$ attributes
> > alias:'KMP_GET_AFFINITY_MASK_PROC'::kmp_get_affinity_mask_proc
> > !dec$ attributes alias:'KMP_MALLOC'::kmp_malloc
> > +!dec$ attributes alias:'KMP_ALIGNED_MALLOC'::kmp_aligned_malloc
> > !dec$ attributes alias:'KMP_CALLOC'::kmp_calloc !dec$ attributes
> > alias:'KMP_REALLOC'::kmp_realloc !dec$ attributes
> > alias:'KMP_FREE'::kmp_free @@ -589,6 +597,7 @@ !dec$ attributes
> > alias:'_KMP_UNSET_AFFINITY_MASK_PROC'::kmp_unset_affinity_mask_proc
> > !dec$ attributes
> > alias:'_KMP_GET_AFFINITY_MASK_PROC'::kmp_get_affinity_mask_proc
> > !dec$ attributes alias:'_KMP_MALLOC'::kmp_malloc
> > +!dec$ attributes alias:'_KMP_ALIGNED_MALLOC'::kmp_aligned_malloc
> > !dec$ attributes alias:'_KMP_CALLOC'::kmp_calloc !dec$ attributes
> > alias:'_KMP_REALLOC'::kmp_realloc !dec$ attributes
> > alias:'_KMP_FREE'::kmp_free @@ -668,6 +677,7 @@ !dec$ attributes
> > alias:'kmp_unset_affinity_mask_proc_'::kmp_unset_affinity_mask_proc
> > !dec$ attributes
> > alias:'kmp_get_affinity_mask_proc_'::kmp_get_affinity_mask_proc
> > !dec$ attributes alias:'kmp_malloc_'::kmp_malloc
> > +!dec$ attributes alias:'kmp_aligned_malloc_'::kmp_aligned_malloc
> > !dec$ attributes alias:'kmp_calloc_'::kmp_calloc !dec$ attributes
> > alias:'kmp_realloc_'::kmp_realloc !dec$ attributes
> > alias:'kmp_free_'::kmp_free @@ -743,6 +753,7 @@ !dec$ attributes
> > alias:'_kmp_unset_affinity_mask_proc_'::kmp_unset_affinity_mask_proc
> > !dec$ attributes
> > alias:'_kmp_get_affinity_mask_proc_'::kmp_get_affinity_mask_proc
> > !dec$ attributes alias:'_kmp_malloc_'::kmp_malloc
> > +!dec$ attributes alias:'_kmp_aligned_malloc_'::kmp_aligned_malloc
> > !dec$ attributes alias:'_kmp_calloc_'::kmp_calloc !dec$
> > attributes
> > alias:'_kmp_realloc_'::kmp_realloc
> > !dec$ attributes alias:'_kmp_free_'::kmp_free
> >
> > Modified: openmp/trunk/runtime/src/include/40/omp_lib.f90.var
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/include/4
> > 0/omp_lib.f90.var?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/include/40/omp_lib.f90.var (original)
> > +++ openmp/trunk/runtime/src/include/40/omp_lib.f90.var Thu May 12
> > 17:00:37 2016
> > @@ -412,6 +412,13 @@
> > integer (kind=kmp_size_t_kind), value :: size
> > end function kmp_malloc
> >
> > + function kmp_aligned_malloc(size, alignment) bind(c)
> > + use omp_lib_kinds
> > + integer (kind=kmp_pointer_kind) kmp_aligned_malloc
> > + integer (kind=kmp_size_t_kind), value :: size
> > + integer (kind=kmp_size_t_kind), value :: alignment
> > + end function kmp_aligned_malloc
> > +
> > function kmp_calloc(nelem, elsize) bind(c)
> > use omp_lib_kinds
> > integer (kind=kmp_pointer_kind) kmp_calloc
> >
> > Modified: openmp/trunk/runtime/src/include/40/omp_lib.h.var
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/include/4
> > 0/omp_lib.h.var?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/include/40/omp_lib.h.var (original)
> > +++ openmp/trunk/runtime/src/include/40/omp_lib.h.var Thu May 12
> > 17:00:37 2016
> > @@ -393,6 +393,13 @@
> > integer (kind=kmp_size_t_kind), value :: size
> > end function kmp_malloc
> >
> > + function kmp_aligned_malloc(size, alignment) bind(c)
> > + import
> > + integer (kind=kmp_pointer_kind) kmp_aligned_malloc
> > + integer (kind=kmp_size_t_kind), value :: size
> > + integer (kind=kmp_size_t_kind), value :: alignment
> > + end function kmp_aligned_malloc
> > +
> > function kmp_calloc(nelem, elsize) bind(c)
> > import
> > integer (kind=kmp_pointer_kind) kmp_calloc @@ -481,6
> > +488,7
> > @@ !DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_unset_affinity_mask_proc
> > !DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_affinity_mask_proc !DIR$
> > ATTRIBUTES OFFLOAD:MIC :: kmp_malloc
> > +!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_aligned_malloc
> > !DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_calloc !DIR$ ATTRIBUTES
> > OFFLOAD:MIC :: kmp_realloc !DIR$ ATTRIBUTES OFFLOAD:MIC ::
> > kmp_free
> > @@ -548,6 +556,7 @@ !$omp declare
> > target(kmp_unset_affinity_mask_proc
> > ) !$omp declare target(kmp_get_affinity_mask_proc ) !$omp declare
> > target(kmp_malloc )
> > +!$omp declare target(kmp_aligned_malloc )
> > !$omp declare target(kmp_calloc )
> > !$omp declare target(kmp_realloc )
> > !$omp declare target(kmp_free )
> >
> > Modified: openmp/trunk/runtime/src/include/41/omp.h.var
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/include/4
> > 1/omp.h.var?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/include/41/omp.h.var (original)
> > +++ openmp/trunk/runtime/src/include/41/omp.h.var Thu May 12
> > 17:00:37
> > 2016
> > @@ -173,6 +173,7 @@
> > extern void __KAI_KMPC_CONVENTION omp_get_partition_place_nums
> > (int *);
> >
> > extern void * __KAI_KMPC_CONVENTION kmp_malloc (size_t);
> > + extern void * __KAI_KMPC_CONVENTION kmp_aligned_malloc
> > (size_t, size_t);
> > extern void * __KAI_KMPC_CONVENTION kmp_calloc (size_t,
> > size_t);
> > extern void * __KAI_KMPC_CONVENTION kmp_realloc (void *,
> > size_t);
> > extern void __KAI_KMPC_CONVENTION kmp_free (void *);
> >
> > Modified: openmp/trunk/runtime/src/include/41/omp_lib.f.var
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/include/4
> > 1/omp_lib.f.var?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/include/41/omp_lib.f.var (original)
> > +++ openmp/trunk/runtime/src/include/41/omp_lib.f.var Thu May 12
> > 17:00:37 2016
> > @@ -453,6 +453,13 @@
> > integer (kind=kmp_size_t_kind) size
> > end function kmp_malloc
> >
> > + function kmp_aligned_malloc(size, alignment)
> > + use omp_lib_kinds
> > + integer (kind=kmp_pointer_kind) kmp_aligned_malloc
> > + integer (kind=kmp_size_t_kind) size
> > + integer (kind=kmp_size_t_kind) alignment
> > + end function kmp_aligned_malloc
> > +
> > function kmp_calloc(nelem, elsize)
> > use omp_lib_kinds
> > integer (kind=kmp_pointer_kind) kmp_calloc @@ -575,6
> > +582,7 @@ !dec$ attributes
> > alias:'KMP_UNSET_AFFINITY_MASK_PROC'::kmp_unset_affinity_mask_proc
> > !dec$ attributes
> > alias:'KMP_GET_AFFINITY_MASK_PROC'::kmp_get_affinity_mask_proc
> > !dec$ attributes alias:'KMP_MALLOC'::kmp_malloc
> > +!dec$ attributes alias:'KMP_ALIGNED_MALLOC'::kmp_aligned_malloc
> > !dec$ attributes alias:'KMP_CALLOC'::kmp_calloc !dec$ attributes
> > alias:'KMP_REALLOC'::kmp_realloc !dec$ attributes
> > alias:'KMP_FREE'::kmp_free @@ -654,6 +662,7 @@ !dec$ attributes
> > alias:'_KMP_UNSET_AFFINITY_MASK_PROC'::kmp_unset_affinity_mask_proc
> > !dec$ attributes
> > alias:'_KMP_GET_AFFINITY_MASK_PROC'::kmp_get_affinity_mask_proc
> > !dec$ attributes alias:'_KMP_MALLOC'::kmp_malloc
> > +!dec$ attributes alias:'_KMP_ALIGNED_MALLOC'::kmp_aligned_malloc
> > !dec$ attributes alias:'_KMP_CALLOC'::kmp_calloc !dec$ attributes
> > alias:'_KMP_REALLOC'::kmp_realloc !dec$ attributes
> > alias:'_KMP_FREE'::kmp_free @@ -736,6 +745,7 @@ !dec$ attributes
> > alias:'kmp_unset_affinity_mask_proc_'::kmp_unset_affinity_mask_proc
> > !dec$ attributes
> > alias:'kmp_get_affinity_mask_proc_'::kmp_get_affinity_mask_proc
> > !dec$ attributes alias:'kmp_malloc_'::kmp_malloc
> > +!dec$ attributes alias:'kmp_aligned_malloc_'::kmp_aligned_malloc
> > !dec$ attributes alias:'kmp_calloc_'::kmp_calloc !dec$ attributes
> > alias:'kmp_realloc_'::kmp_realloc !dec$ attributes
> > alias:'kmp_free_'::kmp_free @@ -814,6 +824,7 @@ !dec$ attributes
> > alias:'_kmp_unset_affinity_mask_proc_'::kmp_unset_affinity_mask_proc
> > !dec$ attributes
> > alias:'_kmp_get_affinity_mask_proc_'::kmp_get_affinity_mask_proc
> > !dec$ attributes alias:'_kmp_malloc_'::kmp_malloc
> > +!dec$ attributes alias:'_kmp_aligned_malloc_'::kmp_aligned_malloc
> > !dec$ attributes alias:'_kmp_calloc_'::kmp_calloc !dec$
> > attributes
> > alias:'_kmp_realloc_'::kmp_realloc
> > !dec$ attributes alias:'_kmp_free_'::kmp_free
> >
> > Modified: openmp/trunk/runtime/src/include/41/omp_lib.f90.var
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/include/4
> > 1/omp_lib.f90.var?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/include/41/omp_lib.f90.var (original)
> > +++ openmp/trunk/runtime/src/include/41/omp_lib.f90.var Thu May 12
> > 17:00:37 2016
> > @@ -464,6 +464,13 @@
> > integer (kind=kmp_size_t_kind), value :: size
> > end function kmp_malloc
> >
> > + function kmp_aligned_malloc(size, alignment) bind(c)
> > + use omp_lib_kinds
> > + integer (kind=kmp_pointer_kind) kmp_aligned_malloc
> > + integer (kind=kmp_size_t_kind), value :: size
> > + integer (kind=kmp_size_t_kind), value :: alignment
> > + end function kmp_aligned_malloc
> > +
> > function kmp_calloc(nelem, elsize) bind(c)
> > use omp_lib_kinds
> > integer (kind=kmp_pointer_kind) kmp_calloc
> >
> > Modified: openmp/trunk/runtime/src/include/41/omp_lib.h.var
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/include/4
> > 1/omp_lib.h.var?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/include/41/omp_lib.h.var (original)
> > +++ openmp/trunk/runtime/src/include/41/omp_lib.h.var Thu May 12
> > 17:00:37 2016
> > @@ -445,6 +445,13 @@
> > integer (kind=kmp_size_t_kind), value :: size
> > end function kmp_malloc
> >
> > + function kmp_aligned_malloc(size, alignment) bind(c)
> > + import
> > + integer (kind=kmp_pointer_kind) kmp_aligned_malloc
> > + integer (kind=kmp_size_t_kind), value :: size
> > + integer (kind=kmp_size_t_kind), value :: alignment
> > + end function kmp_aligned_malloc
> > +
> > function kmp_calloc(nelem, elsize) bind(c)
> > import
> > integer (kind=kmp_pointer_kind) kmp_calloc @@ -546,6
> > +553,7
> > @@ !DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_unset_affinity_mask_proc
> > !DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_affinity_mask_proc !DIR$
> > ATTRIBUTES OFFLOAD:MIC :: kmp_malloc
> > +!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_aligned_malloc
> > !DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_calloc !DIR$ ATTRIBUTES
> > OFFLOAD:MIC :: kmp_realloc !DIR$ ATTRIBUTES OFFLOAD:MIC ::
> > kmp_free
> > @@ -616,6 +624,7 @@ !$omp declare
> > target(kmp_unset_affinity_mask_proc
> > ) !$omp declare target(kmp_get_affinity_mask_proc ) !$omp declare
> > target(kmp_malloc )
> > +!$omp declare target(kmp_aligned_malloc )
> > !$omp declare target(kmp_calloc )
> > !$omp declare target(kmp_realloc )
> > !$omp declare target(kmp_free )
> >
> > Modified: openmp/trunk/runtime/src/kmp.h
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/kmp.h?rev
> > =269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/kmp.h (original)
> > +++ openmp/trunk/runtime/src/kmp.h Thu May 12 17:00:37 2016
> > @@ -3214,6 +3214,7 @@ extern void __kmp_initialize_bget( kmp_i
> > extern
> > void __kmp_finalize_bget( kmp_info_t *th );
> >
> > KMP_EXPORT void *kmpc_malloc( size_t size );
> > +KMP_EXPORT void *kmpc_aligned_malloc( size_t size, size_t
> > alignment
> > );
> > KMP_EXPORT void *kmpc_calloc( size_t nelem, size_t elsize );
> > KMP_EXPORT void *kmpc_realloc( void *ptr, size_t size );
> > KMP_EXPORT
> > void kmpc_free( void *ptr );
> >
> > Modified: openmp/trunk/runtime/src/kmp_alloc.c
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/kmp_alloc
> > .c?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/kmp_alloc.c (original)
> > +++ openmp/trunk/runtime/src/kmp_alloc.c Thu May 12 17:00:37 2016
> > @@ -1427,7 +1427,37 @@ void *
> > kmpc_malloc( size_t size )
> > {
> > void * ptr;
> > - ptr = bget( __kmp_entry_thread(), (bufsize) size );
> > + ptr = bget( __kmp_entry_thread(), (bufsize)(size +
> > sizeof(ptr))
> > );
> > + if( ptr != NULL ) {
> > + // save allocated pointer just before one returned to user
> > + *(void**)ptr = ptr;
> > + ptr = (void**)ptr + 1;
> > + }
> > + return ptr;
> > +}
> > +
> > +#define IS_POWER_OF_TWO(n) (((n)&((n)-1))==0)
> > +
> > +void *
> > +kmpc_aligned_malloc( size_t size, size_t alignment ) {
> > + void * ptr;
> > + void * ptr_allocated;
> > + KMP_DEBUG_ASSERT( alignment < 32 * 1024 ); // Alignment should
> > not be too big
> > + if( !IS_POWER_OF_TWO(alignment) ) {
> > + // AC: do we need to issue a warning here?
> > + errno = EINVAL;
> > + return NULL;
> > + }
> > + size = size + sizeof( void* ) + alignment;
> > + ptr_allocated = bget( __kmp_entry_thread(), (bufsize)size );
> > + if( ptr_allocated != NULL ) {
> > + // save allocated pointer just before one returned to user
> > + ptr = (void*)(((kmp_uintptr_t)ptr_allocated + sizeof(
> > void*
> > ) + alignment) & ~(alignment - 1));
> > + *((void**)ptr - 1) = ptr_allocated;
> > + } else {
> > + ptr = NULL;
> > + }
> > return ptr;
> > }
> >
> > @@ -1435,7 +1465,12 @@ void *
> > kmpc_calloc( size_t nelem, size_t elsize ) {
> > void * ptr;
> > - ptr = bgetz( __kmp_entry_thread(), (bufsize) (nelem * elsize)
> > );
> > + ptr = bgetz( __kmp_entry_thread(), (bufsize) (nelem * elsize +
> > sizeof(ptr)) );
> > + if( ptr != NULL ) {
> > + // save allocated pointer just before one returned to user
> > + *(void**)ptr = ptr;
> > + ptr = (void**)ptr + 1;
> > + }
> > return ptr;
> > }
> >
> > @@ -1445,14 +1480,24 @@ kmpc_realloc( void * ptr, size_t size )
> > void * result = NULL;
> > if ( ptr == NULL ) {
> > // If pointer is NULL, realloc behaves like malloc.
> > - result = bget( __kmp_entry_thread(), (bufsize) size );
> > + result = bget( __kmp_entry_thread(), (bufsize)(size +
> > sizeof(ptr)) );
> > + // save allocated pointer just before one returned to user
> > + if( result != NULL ) {
> > + *(void**)result = result;
> > + result = (void**)result + 1;
> > + }
> > } else if ( size == 0 ) {
> > // If size is 0, realloc behaves like free.
> > // The thread must be registered by the call to
> > kmpc_malloc() or kmpc_calloc() before.
> > // So it should be safe to call __kmp_get_thread(), not
> > __kmp_entry_thread().
> > - brel( __kmp_get_thread(), ptr );
> > + KMP_ASSERT(*((void**)ptr - 1));
> > + brel( __kmp_get_thread(), *((void**)ptr - 1) );
> > } else {
> > - result = bgetr( __kmp_entry_thread(), ptr, (bufsize) size
> > );
> > + result = bgetr( __kmp_entry_thread(), *((void**)ptr - 1),
> > (bufsize)(size + sizeof(ptr)) );
> > + if( result != NULL ) {
> > + *(void**)result = result;
> > + result = (void**)result + 1;
> > + }
> > }; // if
> > return result;
> > }
> > @@ -1468,7 +1513,9 @@ kmpc_free( void * ptr )
> > if ( ptr != NULL ) {
> > kmp_info_t *th = __kmp_get_thread();
> > __kmp_bget_dequeue( th ); /* Release any queued
> > buffers */
> > - brel( th, ptr );
> > + // extract allocated pointer and free it
> > + KMP_ASSERT(*((void**)ptr - 1));
> > + brel( th, *((void**)ptr - 1) );
> > };
> > }
> >
> >
> > Modified: openmp/trunk/runtime/src/kmp_ftn_entry.h
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/kmp_ftn_e
> > ntry.h?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/kmp_ftn_entry.h (original)
> > +++ openmp/trunk/runtime/src/kmp_ftn_entry.h Thu May 12 17:00:37
> > 2016
> > @@ -1142,6 +1142,13 @@ FTN_MALLOC( size_t KMP_DEREF size ) }
> >
> > void * FTN_STDCALL
> > +FTN_ALIGNED_MALLOC( size_t KMP_DEREF size, size_t KMP_DEREF
> > alignment )
> > +{
> > + // kmpc_aligned_malloc initializes the library if needed
> > + return kmpc_aligned_malloc( KMP_DEREF size, KMP_DEREF
> > alignment
> > );
> > +}
> > +
> > +void * FTN_STDCALL
> > FTN_CALLOC( size_t KMP_DEREF nelem, size_t KMP_DEREF elsize ) {
> > // kmpc_calloc initializes the library if needed
> >
> > Modified: openmp/trunk/runtime/src/kmp_ftn_os.h
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/kmp_ftn_o
> > s.h?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/kmp_ftn_os.h (original)
> > +++ openmp/trunk/runtime/src/kmp_ftn_os.h Thu May 12 17:00:37 2016
> > @@ -45,6 +45,7 @@
> > #define FTN_GET_AFFINITY_MASK_PROC
> > kmp_get_affinity_mask_proc
> >
> > #define FTN_MALLOC kmp_malloc
> > + #define FTN_ALIGNED_MALLOC
> > kmp_aligned_malloc
> > #define FTN_CALLOC kmp_calloc
> > #define FTN_REALLOC kmp_realloc
> > #define FTN_FREE kmp_free
> > @@ -151,6 +152,7 @@
> > #define FTN_GET_AFFINITY_MASK_PROC
> > kmp_get_affinity_mask_proc_
> >
> > #define FTN_MALLOC kmp_malloc_
> > + #define FTN_ALIGNED_MALLOC
> > kmp_aligned_malloc_
> > #define FTN_CALLOC kmp_calloc_
> > #define FTN_REALLOC kmp_realloc_
> > #define FTN_FREE kmp_free_
> > @@ -258,6 +260,7 @@
> > #define FTN_GET_AFFINITY_MASK_PROC
> > KMP_GET_AFFINITY_MASK_PROC
> >
> > #define FTN_MALLOC KMP_MALLOC
> > + #define FTN_ALIGNED_MALLOC
> > KMP_ALIGNED_MALLOC
> > #define FTN_CALLOC KMP_CALLOC
> > #define FTN_REALLOC KMP_REALLOC
> > #define FTN_FREE KMP_FREE
> > @@ -365,6 +368,7 @@
> > #define FTN_GET_AFFINITY_MASK_PROC
> > KMP_GET_AFFINITY_MASK_PROC_
> >
> > #define FTN_MALLOC KMP_MALLOC_
> > + #define FTN_ALIGNED_MALLOC
> > KMP_ALIGNED_MALLOC_
> > #define FTN_CALLOC KMP_CALLOC_
> > #define FTN_REALLOC KMP_REALLOC_
> > #define FTN_FREE KMP_FREE_
> >
> > Modified: openmp/trunk/runtime/src/kmp_stub.c
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/kmp_stub.
> > c?rev=269365&r1=269364&r2=269365&view=diff
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/src/kmp_stub.c (original)
> > +++ openmp/trunk/runtime/src/kmp_stub.c Thu May 12 17:00:37 2016
> > @@ -42,6 +42,7 @@
> > #define kmp_set_library kmpc_set_library
> > #define kmp_set_defaults kmpc_set_defaults
> > #define kmp_malloc kmpc_malloc
> > +#define kmp_aligned_malloc kmpc_aligned_malloc
> > #define kmp_calloc kmpc_calloc
> > #define kmp_realloc kmpc_realloc
> > #define kmp_free kmpc_free
> > @@ -102,6 +103,17 @@ void kmp_set_defaults( char const * str
> >
> > /* KMP memory management functions. */
> > void * kmp_malloc( size_t size ) { i; return
> > malloc(
> > size ); }
> > +void * kmp_aligned_malloc( size_t sz, size_t a ) {
> > + i;
> > +#if KMP_OS_WINDOWS
> > + errno = ENOSYS; // not supported
> > + return NULL; // no standard aligned allocator on Windows
> > (pre
> > - C11)
> > +#else
> > + void **res;
> > + errno = posix_memalign( res, a, sz );
> > + return *res;
> > +#endif
> > +}
> > void * kmp_calloc( size_t nelem, size_t elsize ) { i; return
> > calloc(
> > nelem, elsize ); }
> > void * kmp_realloc( void *ptr, size_t size ) { i; return
> > realloc( ptr, size ); }
> > void kmp_free( void * ptr ) { i; free( ptr );
> > }
> >
> > Added: openmp/trunk/runtime/test/api/kmp_aligned_malloc.c
> > URL:
> > http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/test/api/kmp_
> > aligned_malloc.c?rev=269365&view=auto
> > ======================================================================
> > ========
> > --- openmp/trunk/runtime/test/api/kmp_aligned_malloc.c (added)
> > +++ openmp/trunk/runtime/test/api/kmp_aligned_malloc.c Thu May 12
> > 17:00:37 2016
> > @@ -0,0 +1,62 @@
> > +// RUN: %libomp-compile-and-run
> > +#include <stdio.h>
> > +#include <stdint.h>
> > +#include <omp.h>
> > +#include "omp_testsuite.h"
> > +
> > +int alignments[] = {64, 128, 256, 512, 1024, 2048, 4096};
> > +
> > +unsigned aligned_by(uint64_t addr) {
> > + uint64_t alignment = 1;
> > + while((addr & (alignment-1)) == 0) {
> > + alignment <<= 1;
> > + }
> > + return (alignment >> 1);
> > +}
> > +
> > +int test_kmp_aligned_malloc()
> > +{
> > + int err = 0;
> > + #pragma omp parallel shared(err)
> > + {
> > + int i;
> > + int* ptr;
> > + uint64_t addr;
> > + int tid = omp_get_thread_num();
> > +
> > + for(i = 0; i < sizeof(alignments)/sizeof(int); i++) {
> > + int alignment = alignments[i];
> > + // allocate 64 bytes with 64-byte alignment
> > + // allocate 128 bytes with 128-byte alignment, etc.
> > + ptr = (int*)kmp_aligned_malloc(alignment, alignment);
> > + addr = (uint64_t)ptr;
> > + if(addr & (alignment-1)) {
> > + printf("thread %d: addr = %p (aligned to %u bytes) but
> > expected "
> > + " alignment = %d\n", tid, ptr, aligned_by(addr),
> > alignment);
> > + err = 1;
> > + }
> > + kmp_free(ptr);
> > + }
> > +
> > + ptr = kmp_aligned_malloc(128, 127);
> > + if (ptr != NULL) {
> > + printf("thread %d: kmp_aligned_malloc() didn't return NULL
> > when "
> > + "alignment was not power of 2\n", tid);
> > + err = 1;
> > + }
> > + } /* end of parallel */
> > + return !err;
> > +}
> > +
> > +int main()
> > +{
> > + int i;
> > + int num_failed=0;
> > +
> > + for(i = 0; i < REPETITIONS; i++) {
> > + if(!test_kmp_aligned_malloc()) {
> > + num_failed++;
> > + }
> > + }
> > + return num_failed;
> > +}
> >
> > Propchange: openmp/trunk/runtime/test/api/kmp_aligned_malloc.c
> > ------------------------------------------------------------------------------
> > svn:eol-style = native
> >
> > Propchange: openmp/trunk/runtime/test/api/kmp_aligned_malloc.c
> > ------------------------------------------------------------------------------
> > svn:keywords = Author Date Id Rev URL
> >
> > Propchange: openmp/trunk/runtime/test/api/kmp_aligned_malloc.c
> > ------------------------------------------------------------------------------
> > svn:mime-type = text/plain
> >
> >
> > _______________________________________________
> > Openmp-commits mailing list
> > Openmp-commits at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-commits
> >
>
> --
> Hal Finkel
> Assistant Computational Scientist
> Leadership Computing Facility
> Argonne National Laboratory
> _______________________________________________
> Openmp-commits mailing list
> Openmp-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-commits
>
> --------------------------------------------------------------------
> Joint Stock Company Intel A/O
> Registered legal address: Krylatsky Hills Business Park,
> 17 Krylatskaya Str., Bldg 4, Moscow 121614,
> Russian Federation
>
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.
>
--
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory
More information about the Openmp-commits
mailing list