> -----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