Skip to content

Commit

Permalink
Merge pull request #32171 from rosinL/wip-ec-isla-aarch64
Browse files Browse the repository at this point in the history
erasure-code: enable isa-l EC for aarch64 platform

Reviewed-by: Kefu Chai <kchai@redhat.com>
  • Loading branch information
tchaikov committed Mar 23, 2020
2 parents ec362f4 + b51f49b commit d6ead8b
Show file tree
Hide file tree
Showing 8 changed files with 121 additions and 79 deletions.
1 change: 0 additions & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,6 @@ if(HAVE_INTEL)
endif()
endif()


# require c++17
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_EXTENSIONS OFF)
Expand Down
2 changes: 1 addition & 1 deletion src/common/options.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2613,7 +2613,7 @@ std::vector<Option> get_global_options() {

Option("osd_erasure_code_plugins", Option::TYPE_STR, Option::LEVEL_ADVANCED)
.set_default("jerasure lrc"
#ifdef HAVE_BETTER_YASM_ELF64
#if defined(HAVE_BETTER_YASM_ELF64) || defined(HAVE_ARMV8_SIMD)
" isa"
#endif
)
Expand Down
45 changes: 28 additions & 17 deletions src/compressor/zlib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,42 @@ if(HAVE_INTEL_SSE4_1 AND HAVE_BETTER_YASM_ELF64 AND (NOT APPLE))
set(zlib_sources
CompressionPluginZlib.cc
ZlibCompressor.cc
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/crc32_gzip.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/crc32_gzip_base.c
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/detect_repeated_char.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/encode_df.c
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/encode_df_04.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/flatten_ll.c
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/huff_codes.c
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/hufftables_c.c
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip.c
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip.c
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/hufftables_c.c
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_base.c
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_body_01.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_body_02.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_body_04.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_finish.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_base.c
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_body_01.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_body_02.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_body_04.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/adler32_base.c
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/flatten_ll.c
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/encode_df.c
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_body.c
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_inflate.c
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/huff_codes.c
${CMAKE_SOURCE_DIR}/src/isa-l/crc/crc_base_aliases.c
${CMAKE_SOURCE_DIR}/src/isa-l/crc/crc_base.c
${CMAKE_SOURCE_DIR}/src/isa-l/crc/crc64_base.c
)
list(APPEND zlib_sources
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_body.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_finish.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_body_h1_gr_bt.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_finish.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/rfc1951_lookup.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/adler32_sse.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/adler32_avx2_4.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_multibinary.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_update_histogram_01.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_update_histogram_04.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_decode_block_stateless_01.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_decode_block_stateless_04.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_inflate_multibinary.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/encode_df_04.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/encode_df_06.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/proc_heap.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/rfc1951_lookup.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_deflate_hash.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_gen_icf_map_lh1_06.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_gen_icf_map_lh1_04.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_set_long_icf_fg_04.asm
${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_set_long_icf_fg_06.asm
)
else(HAVE_INTEL_SSE4_1 AND HAVE_BETTER_YASM_ELF64 AND (NOT APPLE))
set(zlib_sources
Expand Down
4 changes: 2 additions & 2 deletions src/erasure-code/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ add_subdirectory(lrc)
add_subdirectory(shec)
add_subdirectory(clay)

if (HAVE_BETTER_YASM_ELF64)
if(HAVE_BETTER_YASM_ELF64 OR HAVE_ARMV8_SIMD)
add_subdirectory(isa)
set(EC_ISA_LIB ec_isa)
endif (HAVE_BETTER_YASM_ELF64)
endif()

add_library(erasure_code STATIC ErasureCodePlugin.cc)
target_link_libraries(erasure_code ${CMAKE_DL_LIBS})
Expand Down
139 changes: 84 additions & 55 deletions src/erasure-code/isa/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,61 +2,90 @@
set(isal_src_dir ${CMAKE_SOURCE_DIR}/src/isa-l)
include_directories(${isal_src_dir}/include)

set(isa_srcs
${isal_src_dir}/erasure_code/ec_base.c
${isal_src_dir}/erasure_code/gf_2vect_dot_prod_sse.asm
${isal_src_dir}/erasure_code/gf_3vect_dot_prod_sse.asm
${isal_src_dir}/erasure_code/gf_4vect_dot_prod_sse.asm
${isal_src_dir}/erasure_code/gf_5vect_dot_prod_sse.asm
${isal_src_dir}/erasure_code/gf_6vect_dot_prod_sse.asm
${isal_src_dir}/erasure_code/gf_vect_dot_prod_sse.asm
${isal_src_dir}/erasure_code/gf_2vect_mad_avx2.asm
${isal_src_dir}/erasure_code/gf_3vect_mad_avx2.asm
${isal_src_dir}/erasure_code/gf_4vect_mad_avx2.asm
${isal_src_dir}/erasure_code/gf_5vect_mad_avx2.asm
${isal_src_dir}/erasure_code/gf_6vect_mad_avx2.asm
${isal_src_dir}/erasure_code/gf_vect_mad_avx2.asm
${isal_src_dir}/erasure_code/ec_highlevel_func.c
${isal_src_dir}/erasure_code/gf_2vect_mad_avx.asm
${isal_src_dir}/erasure_code/gf_3vect_mad_avx.asm
${isal_src_dir}/erasure_code/gf_4vect_mad_avx.asm
${isal_src_dir}/erasure_code/gf_5vect_mad_avx.asm
${isal_src_dir}/erasure_code/gf_6vect_mad_avx.asm
${isal_src_dir}/erasure_code/gf_vect_mad_avx.asm
${isal_src_dir}/erasure_code/ec_multibinary.asm
${isal_src_dir}/erasure_code/gf_2vect_mad_sse.asm
${isal_src_dir}/erasure_code/gf_3vect_mad_sse.asm
${isal_src_dir}/erasure_code/gf_4vect_mad_sse.asm
${isal_src_dir}/erasure_code/gf_5vect_mad_sse.asm
${isal_src_dir}/erasure_code/gf_6vect_mad_sse.asm
${isal_src_dir}/erasure_code/gf_vect_mad_sse.asm
${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx2.asm
${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx2.asm
${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx2.asm
${isal_src_dir}/erasure_code/gf_5vect_dot_prod_avx2.asm
${isal_src_dir}/erasure_code/gf_6vect_dot_prod_avx2.asm
${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx2.asm
${isal_src_dir}/erasure_code/gf_vect_mul_avx.asm
${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx.asm
${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx.asm
${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx.asm
${isal_src_dir}/erasure_code/gf_5vect_dot_prod_avx.asm
${isal_src_dir}/erasure_code/gf_6vect_dot_prod_avx.asm
${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx.asm
${isal_src_dir}/erasure_code/gf_vect_mul_sse.asm
${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx512.asm
${isal_src_dir}/erasure_code/gf_2vect_mad_avx512.asm
${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx512.asm
${isal_src_dir}/erasure_code/gf_3vect_mad_avx512.asm
${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx512.asm
${isal_src_dir}/erasure_code/gf_4vect_mad_avx512.asm
${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx512.asm
${isal_src_dir}/erasure_code/gf_vect_mad_avx512.asm
ErasureCodeIsa.cc
ErasureCodeIsaTableCache.cc
ErasureCodePluginIsa.cc
xor_op.cc
)
if(HAVE_BETTER_YASM_ELF64)
set(isa_srcs
${isal_src_dir}/erasure_code/ec_base.c
${isal_src_dir}/erasure_code/gf_2vect_dot_prod_sse.asm
${isal_src_dir}/erasure_code/gf_3vect_dot_prod_sse.asm
${isal_src_dir}/erasure_code/gf_4vect_dot_prod_sse.asm
${isal_src_dir}/erasure_code/gf_5vect_dot_prod_sse.asm
${isal_src_dir}/erasure_code/gf_6vect_dot_prod_sse.asm
${isal_src_dir}/erasure_code/gf_vect_dot_prod_sse.asm
${isal_src_dir}/erasure_code/gf_2vect_mad_avx2.asm
${isal_src_dir}/erasure_code/gf_3vect_mad_avx2.asm
${isal_src_dir}/erasure_code/gf_4vect_mad_avx2.asm
${isal_src_dir}/erasure_code/gf_5vect_mad_avx2.asm
${isal_src_dir}/erasure_code/gf_6vect_mad_avx2.asm
${isal_src_dir}/erasure_code/gf_vect_mad_avx2.asm
${isal_src_dir}/erasure_code/ec_highlevel_func.c
${isal_src_dir}/erasure_code/gf_2vect_mad_avx.asm
${isal_src_dir}/erasure_code/gf_3vect_mad_avx.asm
${isal_src_dir}/erasure_code/gf_4vect_mad_avx.asm
${isal_src_dir}/erasure_code/gf_5vect_mad_avx.asm
${isal_src_dir}/erasure_code/gf_6vect_mad_avx.asm
${isal_src_dir}/erasure_code/gf_vect_mad_avx.asm
${isal_src_dir}/erasure_code/ec_multibinary.asm
${isal_src_dir}/erasure_code/gf_2vect_mad_sse.asm
${isal_src_dir}/erasure_code/gf_3vect_mad_sse.asm
${isal_src_dir}/erasure_code/gf_4vect_mad_sse.asm
${isal_src_dir}/erasure_code/gf_5vect_mad_sse.asm
${isal_src_dir}/erasure_code/gf_6vect_mad_sse.asm
${isal_src_dir}/erasure_code/gf_vect_mad_sse.asm
${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx2.asm
${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx2.asm
${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx2.asm
${isal_src_dir}/erasure_code/gf_5vect_dot_prod_avx2.asm
${isal_src_dir}/erasure_code/gf_6vect_dot_prod_avx2.asm
${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx2.asm
${isal_src_dir}/erasure_code/gf_vect_mul_avx.asm
${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx.asm
${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx.asm
${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx.asm
${isal_src_dir}/erasure_code/gf_5vect_dot_prod_avx.asm
${isal_src_dir}/erasure_code/gf_6vect_dot_prod_avx.asm
${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx.asm
${isal_src_dir}/erasure_code/gf_vect_mul_sse.asm
${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx512.asm
${isal_src_dir}/erasure_code/gf_2vect_mad_avx512.asm
${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx512.asm
${isal_src_dir}/erasure_code/gf_3vect_mad_avx512.asm
${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx512.asm
${isal_src_dir}/erasure_code/gf_4vect_mad_avx512.asm
${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx512.asm
${isal_src_dir}/erasure_code/gf_vect_mad_avx512.asm
ErasureCodeIsa.cc
ErasureCodeIsaTableCache.cc
ErasureCodePluginIsa.cc
xor_op.cc
)
elseif(HAVE_ARMV8_SIMD)
set(isa_srcs
${isal_src_dir}/erasure_code/ec_base.c
${isal_src_dir}/erasure_code/aarch64/ec_aarch64_highlevel_func.c
${isal_src_dir}/erasure_code/aarch64/ec_aarch64_dispatcher.c
${isal_src_dir}/erasure_code/aarch64/gf_2vect_dot_prod_neon.S
${isal_src_dir}/erasure_code/aarch64/gf_2vect_mad_neon.S
${isal_src_dir}/erasure_code/aarch64/gf_3vect_dot_prod_neon.S
${isal_src_dir}/erasure_code/aarch64/gf_3vect_mad_neon.S
${isal_src_dir}/erasure_code/aarch64/gf_4vect_dot_prod_neon.S
${isal_src_dir}/erasure_code/aarch64/gf_4vect_mad_neon.S
${isal_src_dir}/erasure_code/aarch64/gf_5vect_dot_prod_neon.S
${isal_src_dir}/erasure_code/aarch64/gf_5vect_mad_neon.S
${isal_src_dir}/erasure_code/aarch64/gf_6vect_mad_neon.S
${isal_src_dir}/erasure_code/aarch64/gf_vect_dot_prod_neon.S
${isal_src_dir}/erasure_code/aarch64/gf_vect_mad_neon.S
${isal_src_dir}/erasure_code/aarch64/gf_vect_mul_neon.S
${isal_src_dir}/erasure_code/aarch64/ec_multibinary_arm.S
ErasureCodeIsa.cc
ErasureCodeIsaTableCache.cc
ErasureCodePluginIsa.cc
xor_op.cc
)
set_source_files_properties(
${isal_src_dir}/erasure_code/aarch64/ec_multibinary_arm.S
PROPERTIES COMPILE_FLAGS "-D__ASSEMBLY__"
)
endif()

add_library(ec_isa SHARED
${isa_srcs}
Expand Down
3 changes: 3 additions & 0 deletions src/include/config-h.in.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,9 @@
/* yasm can also build the isa-l */
#cmakedefine HAVE_BETTER_YASM_ELF64

/* Define if isa-l is compiled for arm64 */
#cmakedefine HAVE_ARMV8_SIMD

/* Define to 1 if strerror_r returns char *. */
#cmakedefine STRERROR_R_CHAR_P 1

Expand Down
2 changes: 1 addition & 1 deletion src/isa-l
Submodule isa-l updated 387 files
4 changes: 2 additions & 2 deletions src/test/erasure-code/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ target_link_libraries(unittest_erasure_code_plugin_jerasure
add_dependencies(unittest_erasure_code_plugin_jerasure
ec_jerasure)

if(HAVE_BETTER_YASM_ELF64)
if(HAVE_BETTER_YASM_ELF64 OR HAVE_ARMV8_SIMD)

#unittest_erasure_code_isa
add_executable(unittest_erasure_code_isa
Expand Down Expand Up @@ -110,7 +110,7 @@ target_link_libraries(unittest_erasure_code_plugin_isa
)
add_dependencies(unittest_erasure_code_plugin_isa
ec_isa)
endif(HAVE_BETTER_YASM_ELF64)
endif(HAVE_BETTER_YASM_ELF64 OR HAVE_ARMV8_SIMD)

# unittest_erasure_code_lrc
add_executable(unittest_erasure_code_lrc
Expand Down

0 comments on commit d6ead8b

Please sign in to comment.