> -----Original Message-----
> From: Li, Xiaoyun
> Sent: Thursday, October 5, 2017 1:33 PM
> To: Ananyev, Konstantin <konstantin.anan...@intel.com>; Richardson, Bruce 
> <bruce.richard...@intel.com>
> Cc: Lu, Wenzhuo <wenzhuo...@intel.com>; Zhang, Helin <helin.zh...@intel.com>; 
> dev@dpdk.org; Li, Xiaoyun <xiaoyun...@intel.com>
> Subject: [PATCH v7 0/3] run-time Linking support
> 
> This patchset dynamically selects functions at run-time based on CPU flags
> that current machine supports.This patchset modifies mempcy, memcpy perf
> test and x86 EFD, using function pointers and bind them at constructor time.
> Then in the cloud environment, users can compiler once for the minimum target
> such as 'haswell'(not 'native') and run on different platforms (equal or above
> haswell) and can get ISA optimization based on running CPU.
> 
> Xiaoyun Li (3):
>   eal/x86: run-time dispatch over memcpy
>   app/test: run-time dispatch over memcpy perf test
>   efd: run-time dispatch over x86 EFD functions
> 
> ---
> v2
> * Use gcc function multi-versioning to avoid compilation issues.
> * Add macros for AVX512 and AVX2. Only if users enable AVX512 and the compiler
> supports it, the AVX512 codes would be compiled. Only if the compiler supports
> AVX2, the AVX2 codes would be compiled.
> 
> v3
> * Reduce function calls via only keep rte_memcpy_xxx.
> * Add conditions that when copy size is small, use inline code path.
> Otherwise, use dynamic code path.
> * To support attribute target, clang version must be greater than 3.7.
> Otherwise, would choose SSE/AVX code path, the same as before.
> * Move two mocro functions to the top of the code since they would be used in
> inline SSE/AVX and dynamic SSE/AVX codes.
> 
> v4
> * Modify rte_memcpy.h to several .c files and modify makefiles to compile
> AVX2 and AVX512 files.
> 
> v5
> * Delete redundant repeated codes of rte_memcpy_xxx.
> * Modify makefiles to enable reuse of existing rte_memcpy.
> * Delete redundant codes of rte_efd_x86.h in v4. Move it into .c file and 
> enable
> compilation -mavx2 for it in makefile since it is already chosen at run-time.
> 
> v6
> * Fix shared target build failure.
> * Safely remove redundant efd x86 avx2 codes since the file is compiled
> with -mavx2.
> 
> v7
> * Modify the added version map code in v6 to be more reasonable.
> * Safely remove redundant efd x86 avx2 codes since the file is compiled
> with -mavx2.
> 
>  lib/librte_eal/bsdapp/eal/Makefile                 |  19 +
>  lib/librte_eal/bsdapp/eal/rte_eal_version.map      |   7 +
>  .../common/include/arch/x86/rte_memcpy.c           |  59 ++
>  .../common/include/arch/x86/rte_memcpy.h           | 861 +------------------
>  .../common/include/arch/x86/rte_memcpy_avx2.c      |  44 +
>  .../common/include/arch/x86/rte_memcpy_avx512f.c   |  44 +
>  .../common/include/arch/x86/rte_memcpy_internal.h  | 909 
> +++++++++++++++++++++
>  .../common/include/arch/x86/rte_memcpy_sse.c       |  40 +
>  lib/librte_eal/linuxapp/eal/Makefile               |  19 +
>  lib/librte_eal/linuxapp/eal/rte_eal_version.map    |   7 +
>  lib/librte_efd/Makefile                            |   6 +
>  lib/librte_efd/rte_efd_x86.c                       |  77 ++
>  lib/librte_efd/rte_efd_x86.h                       |  48 +-
>  mk/rte.cpuflags.mk                                 |  14 +
>  test/test/test_memcpy_perf.c                       |  40 +-
>  15 files changed, 1289 insertions(+), 905 deletions(-)
>  create mode 100644 lib/librte_eal/common/include/arch/x86/rte_memcpy.c
>  create mode 100644 lib/librte_eal/common/include/arch/x86/rte_memcpy_avx2.c
>  create mode 100644 
> lib/librte_eal/common/include/arch/x86/rte_memcpy_avx512f.c
>  create mode 100644 
> lib/librte_eal/common/include/arch/x86/rte_memcpy_internal.h
>  create mode 100644 lib/librte_eal/common/include/arch/x86/rte_memcpy_sse.c
>  create mode 100644 lib/librte_efd/rte_efd_x86.c
> 
> --

Acked-by: Konstantin Ananyev <konstantin.anan...@intel.com>

> 2.7.4

Reply via email to