[Openmp-commits] [openmp] r269365 - Adding new kmp_aligned_malloc() entry point

Churbanov, Andrey via Openmp-commits openmp-commits at lists.llvm.org
Fri May 13 05:34:18 PDT 2016


Hi Hal,

Why the runtime/test/api/kmp_aligned_malloc.c test added by the commit not enough?

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.


More information about the Openmp-commits mailing list