Loading ChangeLog +254 −0 Original line number Diff line number Diff line 2019-05-12 twu * gmap.c: Adding support for avx512bw * gsnap_select.c, gsnapl_select.c: Adding support for avx512bw * gsnap.c: Changed default parameter for --max-mismatches for DNA-seq * cpuid.c, cpuid.h, gmap_select.c, gmapl_select.c: Adding support for avx512bw * Makefile.gsnaptoo.am: Adding programs for avx512bw * configure.ac: Adding option for AVX512BW SIMD * ax_cpuid_intel.m4, ax_cpuid_non_intel.m4: Adding test for AVX512BW support * ax_ext.m4: Adding commands for AVX512BW * univdiagpool.c: Adding assertions * substring.c: Checking against substrings on the wrong chromosome * stage1hr.c: Commenting out extended algorithm, which can cause problems with repetitive reads * output.c: Consider excessive output to be a fail for the purpose of the --nofails flag. * merge-uint8.c: Fixed SIMD command for AVX512 machines 2019-03-25 twu * extension-search.c, extension-search.h: Implemented extension of elt sets in the opposite direction 2019-03-19 twu * segment-search.c: For alignments straddling a chromosome, recomputing querypos and queryend to cover the new chromosome * gsnap.c: Using new interface for Path_solve_setup * path-solve.h: New interface for Path_solve_setup * path-solve.c: Not allowing splices on circular chromosomes * concordance.c: Using field sensedir_for_concordance * stage3hr.c, stage3hrdef.h: Now using fields sensedir_for_concordance and sensedir * samprint.c: Removed references to Stage3end_sensedir_distant_guess 2019-03-16 twu * Makefile.gsnaptoo.am, VERSION, config.site.rescomp.tst, distant-dna.c, distant-dna.h, distant-rna.c, distant-rna.h, gsnap.c, index.html, method.c, method.h, output.c, path-solve.c, samprint.c, samprint.h, splice.c, splice.h, src, stage1hr.c, stage3hr.c, stage3hr.h, stage3hrdef.h, substring.c, substring.h, terminal.c, trunk: Merged revisions 218560 through 218674 from branches/2019-03-07-distant-dna to implement distant splicing and to fix some bugs in spliced alignments * genome128_hr.c: Added comment 2019-03-07 twu * distant-dna.h: Initial import * distant-dna.c: Initial import 2019-03-05 twu * gsnap.c: Added option --use-local-hash * VERSION, config.site.rescomp.tst, src, trunk: Updated for latest version 2019-03-04 twu * localdb.c, localdb.h, path-solve.c: Merged revisions 218528 and 218529 from branches/2019-03-04-fix-repetitive to limit recursive procedures * stage3hr.c: Fixed debugging statements * stage1hr.c: Added debugging statements * segment-search.c: Fixed debugging statement * kmer-search.c: Added debugging statements * gsnap.c: Removed variables relating to stage2 suboptimal alignments 2019-03-02 twu * path-solve.c: For compute_qstart_paths and compute_qend_paths, added a max_depth criterion, and checking for repetitive positions * stage3hr.c: Checking nmismatches when we are checking all assertions * path-solve.c: Revising qstart of middle segment if an insertion is present. Revised code for computing ninserts 2019-03-01 twu * path-solve.c: Fixed addition of alts substring to best path from all_child_paths, rather than to path 2019-02-27 twu * VERSION, config.site.rescomp.prd, index.html: Updated for latest version * substring.c: In trimming at ends without splicing, extending to the end if nmismatches is 0 * stage3hr.c: For score_within_trims, adding a penalty for long ambiguous ends * substring.c: Restored previous algorithm for computing trim at ends with no splice. For alts with good splice probability, counting substring as nmatches rather than amb. For alts with poor splice probability, counting substring as amb. 2019-02-25 twu * path-solve.c: Fixed cases in compute_qstart_paths and compute_qend_paths where terminalp was not being set 2019-02-22 twu * concordance.c, concordance.h, config.site.rescomp.prd, config.site.rescomp.tst, distant-rna.c, distant-rna.h, extension-search.c, extension-search.h, genome128_hr.c, gsnap.c, kmer-search.c, kmer-search.h, ladder.c, path-solve.c, path-solve.h, resulthr.c, segment-search.c, segment-search.h, src, stage1hr.c, stage3hr.c, stage3hr.h, stage3hrdef.h, substring.c, substring.h, terminal.c, terminal.h, trunk: Merged revisions 218419 through 218472 from branches/2019-02-19-restore-fusions * index.html: Updated for latest version 2019-02-19 twu * stage1hr.c: Using user_maxlevel_float for final filtering, and not for searching * concordance.c: Using score_ignore_trim instead of score_posttrim * gsnap.c: Added option for --ignore-trim-in-filtering * stage3hrdef.h: Changed field score_posttrim to score_ignore_trim * stage3hr.c, stage3hr.h: Changed Stage3hr_filter_coverage to Stage3hr_filter, which accounts for number of mismatches. Added parameter ignore_trim_p. Changed score_posttrim to score_ignore_trim, and computing this to be lower than score * terminal.c: Using Univ_IIT_get_chrnum and new interface to Substring_new * substring.c, substring.h: Substring_new now assumes that chrnum was set correctly * stage3hr.c: Using new interface to Substring_new * stage1hr.c: Using new interface to Segment_identify procedures * segment-search.c, segment-search.h: Handling alignments straddling more than two chromosomes. Removed plusp as a parameter * kmer-search.c: Using Univ_IIT_get_chrnum. Using new interface to Substring_new * iit-read-univ.c, iit-read-univ.h: Implemented Univ_IIT_update_chrnum and Univ_IIT_get_chrnum * extension-search.c: Calling Univ_IIT_update_chrnum to set chrnum 2019-02-18 twu * stage3hr.c: If qend <= qstart, do not calculate number of nmismatches, which is not defined. For nmatches, do not penalize for indels * substring.c: If trimming changes querystart or queryend, recalculate nmismatches 2019-02-16 twu * stage1hr.c: Skipping alignment when querylength is less than index1part + index1interval - 1 * segment-search.c: When advancing chrnum for straddled alignments, checking that we do not go past the last chromosome 2019-02-15 twu * VERSION: Updated version number * indexdb-write.c: Added code for comparing counts with compression and counts without compression * bitpack64-write.c, bitpack64-write.h: For huge genomes, using an array of UINT8 for calculations of genome position. Printing strerror for file-related errors. * substring.c: For circular chromosomes, checking if the entire substring resides in the next chromosome and returning the circularpos at that query position * segment-search.c: When a straddle calls for advancing to a later chromosome, using local data structures instead of mixing them with a call to Univ_IIT_get_one * path-solve.c: Using subtract_bounded to subtract the local1part amount * localdb.c: In Localdb_get_diagonals, checking for low < high, since low == high can occur when a substring is at the beginning or end of a chromosome * cigar.c: Checking for an initial M to be printed before printing any indel or splice 2019-02-13 twu * intersect-large.c, intersect.c: No longer initializing last_diagonal to be 0, and comparing against it, which fails if a diagonal is 0. Instead, checking explicitly for the first case 2019-01-31 twu * gsnap.c, path-solve.c, path-solve.h, segment-search.c, segment-search.h, stage1hr.c, stage1hr.h, stage3hr.c, stage3hr.h: Removed GMAP parameters from GSNAP code * VERSION, archive.html, config.site.rescomp.prd, index.html: Updated for latest version * intersect-large.c, intersect.c: In Intersect_approx_lower and Intersect_approx_higher, ignoring duplicates of diagonals0, in order to ensure that the result is in ascending order * substring.c: Using plusp in interpreting mandatory_trim_querystart and mandatory_trim_queryend * path-solve.c: When a mismatch extends a diagonal, computing the number of mismatches at that time * merge-diagonals-simd-uint4.c: Added code for checking that inputs are in ascending order * stage3hr.c: Improved tradeoffs between nmatches, nmatches_posttrim, splice score, nsegments, insertlength, and outerlength in Stage3end_optimal_score and Stage3pair_optimal_score_final * extension-search.c, segment-search.c: Handling the case where the middle or anchor diagonal straddles two chromosomes 2019-01-23 twu * Makefile.gsnaptoo.am, VERSION, changepoint.h, compress.c, concordance.h, Loading VERSION +1 −1 Original line number Diff line number Diff line 2019-01-24 No newline at end of file 2019-05-12 No newline at end of file config/ax_cpuid_intel.m4 +10 −1 Original line number Diff line number Diff line Loading @@ -46,7 +46,7 @@ AC_LANG_PUSH([C]) ax_cv_cpu_has_avx2_ext=yes], [AC_MSG_RESULT(no)]) # Test for AVX512 support # Test for AVX512 (F and CD) support AC_MSG_CHECKING(for avx512 support) AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <immintrin.h>]], Loading @@ -55,6 +55,15 @@ AC_LANG_PUSH([C]) ax_cv_cpu_has_avx512_ext=yes], [AC_MSG_RESULT(no)]) # Test for AVX512BW and VL support (not in Knights Landing or Knights Mill) AC_MSG_CHECKING(for avx512bw and avx512vl support) AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <immintrin.h>]], [[return _may_i_use_cpu_feature(_FEATURE_AVX512BW | _FEATURE_AVX512VL) ? 0 : 9;]])], [AC_MSG_RESULT(yes) ax_cv_cpu_has_avx512bw_ext=yes], [AC_MSG_RESULT(no)]) AC_LANG_POP([C]) ]) config/ax_cpuid_non_intel.m4 +34 −2 Original line number Diff line number Diff line Loading @@ -153,7 +153,7 @@ static void run_cpuid (uint32_t eax, uint32_t ecx, uint32_t *abcd) { [AC_MSG_RESULT(no)]) # Test for AVX512 support # Test for AVX512 (F and CD) support AC_MSG_CHECKING(for avx512 support) AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <stdint.h> Loading @@ -175,7 +175,7 @@ static int check_xcr0_zmm () { } else if (!check_xcr0_zmm()) { return 8; } else if ((abcd[/*EBX*/1] & avx512_mask) != avx512_mask) { return 0; /* Should fail here, but book/Web examples skip */ return 0; /* Should be false here, but book/Web examples skip this test */ } else { return 0; }]])], Loading @@ -183,5 +183,37 @@ static int check_xcr0_zmm () { ax_cv_cpu_has_avx512_ext=yes], [AC_MSG_RESULT(no)]) # Test for AVX512BW and VL support AC_MSG_CHECKING(for avx512bw and avx512vl support) AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <stdint.h> static void run_cpuid (uint32_t eax, uint32_t ecx, uint32_t *abcd) { uint32_t ebx, edx; __asm__ ("cpuid" : "+b" (ebx), "+a" (eax), "+c" (ecx), "=d" (edx)); abcd[0] = eax; abcd[1] = ebx; abcd[2] = ecx; abcd[3] = edx;} static int check_xcr0_zmm () { uint32_t xcr0; uint32_t zmm_ymm_xmm = ((7 << 5) | (1 << 2) | (1 << 1)); __asm__ ("xgetbv" : "=a" (xcr0) : "c" (0) : "%edx"); return ((xcr0 & zmm_ymm_xmm) == zmm_ymm_xmm);}]], [[uint32_t abcd[4]; uint32_t osxsave_mask = (1 << 27); uint32_t avx512bw_vl_mask = (/*512BW*/(1 << 30) | /*512VL*/(1 << 31)); run_cpuid(1, 0, abcd); if ((abcd[/*ECX*/2] & osxsave_mask) != osxsave_mask) { return 9; } else if (!check_xcr0_zmm()) { return 8; } else if ((abcd[/*EBX*/1] & avx512bw_vl_mask) != avx512bw_vl_mask) { return 9; } else { return 0; }]])], [AC_MSG_RESULT(yes) ax_cv_cpu_has_avx512bw_ext=yes], [AC_MSG_RESULT(no)]) AC_LANG_POP([C]) ]) config/ax_ext.m4 +6 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ # # HAVE_MMX / HAVE_SSE / HAVE_SSE2 / HAVE_SSE3 / HAVE_SSSE3 / HAVE_SSE4_1 / HAVE_SSE4_2 / HAVE_AVX # # # LICENSE # # Copyright (c) 2007 Christophe Tournayre <turn3r@users.sourceforge.net> Loading Loading @@ -342,8 +343,10 @@ AC_DEFUN([AX_EXT], CFLAGS= if test x"$ax_cv_c_compiler_vendor" = xintel; then TEST_CFLAGS="-xCOMMON-AVX512" elif test x"$ax_cv_cpu_has_avx512bw_ext" != xyes; then TEST_CFLAGS="$SIMD_AVX2_CFLAGS -mavx512f -mavx512cd -mno-avx512bw -mno-avx512vl" else TEST_CFLAGS="$SIMD_AVX2_CFLAGS -mavx512f -mavx512cd" TEST_CFLAGS="$SIMD_AVX2_CFLAGS -mavx512f -mavx512cd -mavx512bw -mavx512vl" fi AX_CHECK_COMPILE_FLAG([$TEST_CFLAGS], [ax_cv_compile_avx512_ext=yes], [ax_cv_ext_compile_problem=yes]) if test x"$ax_cv_compile_avx512_ext" != xyes; then Loading @@ -368,6 +371,8 @@ AC_DEFUN([AX_EXT], SIMD_SSE4_2_CFLAGS="$SIMD_SSE4_2_CFLAGS -mno-avx512f -mno-avx512cd" SIMD_AVX2_CFLAGS="$SIMD_AVX2_CFLAGS -mno-avx512f -mno-avx512cd" fi # AC_DEFINE(HAVE_AVX512,1,[Define to 1 if you support AVX512 (Advanced Vector Extensions 512) instructions]) -- Defines run-type # AC_DEFINE(HAVE_AVX512BW,1,[Define to 1 if you support AVX512BW (Advanced Vector Extensions 512) BW instructions]) -- Defines run-type fi fi fi Loading Loading
ChangeLog +254 −0 Original line number Diff line number Diff line 2019-05-12 twu * gmap.c: Adding support for avx512bw * gsnap_select.c, gsnapl_select.c: Adding support for avx512bw * gsnap.c: Changed default parameter for --max-mismatches for DNA-seq * cpuid.c, cpuid.h, gmap_select.c, gmapl_select.c: Adding support for avx512bw * Makefile.gsnaptoo.am: Adding programs for avx512bw * configure.ac: Adding option for AVX512BW SIMD * ax_cpuid_intel.m4, ax_cpuid_non_intel.m4: Adding test for AVX512BW support * ax_ext.m4: Adding commands for AVX512BW * univdiagpool.c: Adding assertions * substring.c: Checking against substrings on the wrong chromosome * stage1hr.c: Commenting out extended algorithm, which can cause problems with repetitive reads * output.c: Consider excessive output to be a fail for the purpose of the --nofails flag. * merge-uint8.c: Fixed SIMD command for AVX512 machines 2019-03-25 twu * extension-search.c, extension-search.h: Implemented extension of elt sets in the opposite direction 2019-03-19 twu * segment-search.c: For alignments straddling a chromosome, recomputing querypos and queryend to cover the new chromosome * gsnap.c: Using new interface for Path_solve_setup * path-solve.h: New interface for Path_solve_setup * path-solve.c: Not allowing splices on circular chromosomes * concordance.c: Using field sensedir_for_concordance * stage3hr.c, stage3hrdef.h: Now using fields sensedir_for_concordance and sensedir * samprint.c: Removed references to Stage3end_sensedir_distant_guess 2019-03-16 twu * Makefile.gsnaptoo.am, VERSION, config.site.rescomp.tst, distant-dna.c, distant-dna.h, distant-rna.c, distant-rna.h, gsnap.c, index.html, method.c, method.h, output.c, path-solve.c, samprint.c, samprint.h, splice.c, splice.h, src, stage1hr.c, stage3hr.c, stage3hr.h, stage3hrdef.h, substring.c, substring.h, terminal.c, trunk: Merged revisions 218560 through 218674 from branches/2019-03-07-distant-dna to implement distant splicing and to fix some bugs in spliced alignments * genome128_hr.c: Added comment 2019-03-07 twu * distant-dna.h: Initial import * distant-dna.c: Initial import 2019-03-05 twu * gsnap.c: Added option --use-local-hash * VERSION, config.site.rescomp.tst, src, trunk: Updated for latest version 2019-03-04 twu * localdb.c, localdb.h, path-solve.c: Merged revisions 218528 and 218529 from branches/2019-03-04-fix-repetitive to limit recursive procedures * stage3hr.c: Fixed debugging statements * stage1hr.c: Added debugging statements * segment-search.c: Fixed debugging statement * kmer-search.c: Added debugging statements * gsnap.c: Removed variables relating to stage2 suboptimal alignments 2019-03-02 twu * path-solve.c: For compute_qstart_paths and compute_qend_paths, added a max_depth criterion, and checking for repetitive positions * stage3hr.c: Checking nmismatches when we are checking all assertions * path-solve.c: Revising qstart of middle segment if an insertion is present. Revised code for computing ninserts 2019-03-01 twu * path-solve.c: Fixed addition of alts substring to best path from all_child_paths, rather than to path 2019-02-27 twu * VERSION, config.site.rescomp.prd, index.html: Updated for latest version * substring.c: In trimming at ends without splicing, extending to the end if nmismatches is 0 * stage3hr.c: For score_within_trims, adding a penalty for long ambiguous ends * substring.c: Restored previous algorithm for computing trim at ends with no splice. For alts with good splice probability, counting substring as nmatches rather than amb. For alts with poor splice probability, counting substring as amb. 2019-02-25 twu * path-solve.c: Fixed cases in compute_qstart_paths and compute_qend_paths where terminalp was not being set 2019-02-22 twu * concordance.c, concordance.h, config.site.rescomp.prd, config.site.rescomp.tst, distant-rna.c, distant-rna.h, extension-search.c, extension-search.h, genome128_hr.c, gsnap.c, kmer-search.c, kmer-search.h, ladder.c, path-solve.c, path-solve.h, resulthr.c, segment-search.c, segment-search.h, src, stage1hr.c, stage3hr.c, stage3hr.h, stage3hrdef.h, substring.c, substring.h, terminal.c, terminal.h, trunk: Merged revisions 218419 through 218472 from branches/2019-02-19-restore-fusions * index.html: Updated for latest version 2019-02-19 twu * stage1hr.c: Using user_maxlevel_float for final filtering, and not for searching * concordance.c: Using score_ignore_trim instead of score_posttrim * gsnap.c: Added option for --ignore-trim-in-filtering * stage3hrdef.h: Changed field score_posttrim to score_ignore_trim * stage3hr.c, stage3hr.h: Changed Stage3hr_filter_coverage to Stage3hr_filter, which accounts for number of mismatches. Added parameter ignore_trim_p. Changed score_posttrim to score_ignore_trim, and computing this to be lower than score * terminal.c: Using Univ_IIT_get_chrnum and new interface to Substring_new * substring.c, substring.h: Substring_new now assumes that chrnum was set correctly * stage3hr.c: Using new interface to Substring_new * stage1hr.c: Using new interface to Segment_identify procedures * segment-search.c, segment-search.h: Handling alignments straddling more than two chromosomes. Removed plusp as a parameter * kmer-search.c: Using Univ_IIT_get_chrnum. Using new interface to Substring_new * iit-read-univ.c, iit-read-univ.h: Implemented Univ_IIT_update_chrnum and Univ_IIT_get_chrnum * extension-search.c: Calling Univ_IIT_update_chrnum to set chrnum 2019-02-18 twu * stage3hr.c: If qend <= qstart, do not calculate number of nmismatches, which is not defined. For nmatches, do not penalize for indels * substring.c: If trimming changes querystart or queryend, recalculate nmismatches 2019-02-16 twu * stage1hr.c: Skipping alignment when querylength is less than index1part + index1interval - 1 * segment-search.c: When advancing chrnum for straddled alignments, checking that we do not go past the last chromosome 2019-02-15 twu * VERSION: Updated version number * indexdb-write.c: Added code for comparing counts with compression and counts without compression * bitpack64-write.c, bitpack64-write.h: For huge genomes, using an array of UINT8 for calculations of genome position. Printing strerror for file-related errors. * substring.c: For circular chromosomes, checking if the entire substring resides in the next chromosome and returning the circularpos at that query position * segment-search.c: When a straddle calls for advancing to a later chromosome, using local data structures instead of mixing them with a call to Univ_IIT_get_one * path-solve.c: Using subtract_bounded to subtract the local1part amount * localdb.c: In Localdb_get_diagonals, checking for low < high, since low == high can occur when a substring is at the beginning or end of a chromosome * cigar.c: Checking for an initial M to be printed before printing any indel or splice 2019-02-13 twu * intersect-large.c, intersect.c: No longer initializing last_diagonal to be 0, and comparing against it, which fails if a diagonal is 0. Instead, checking explicitly for the first case 2019-01-31 twu * gsnap.c, path-solve.c, path-solve.h, segment-search.c, segment-search.h, stage1hr.c, stage1hr.h, stage3hr.c, stage3hr.h: Removed GMAP parameters from GSNAP code * VERSION, archive.html, config.site.rescomp.prd, index.html: Updated for latest version * intersect-large.c, intersect.c: In Intersect_approx_lower and Intersect_approx_higher, ignoring duplicates of diagonals0, in order to ensure that the result is in ascending order * substring.c: Using plusp in interpreting mandatory_trim_querystart and mandatory_trim_queryend * path-solve.c: When a mismatch extends a diagonal, computing the number of mismatches at that time * merge-diagonals-simd-uint4.c: Added code for checking that inputs are in ascending order * stage3hr.c: Improved tradeoffs between nmatches, nmatches_posttrim, splice score, nsegments, insertlength, and outerlength in Stage3end_optimal_score and Stage3pair_optimal_score_final * extension-search.c, segment-search.c: Handling the case where the middle or anchor diagonal straddles two chromosomes 2019-01-23 twu * Makefile.gsnaptoo.am, VERSION, changepoint.h, compress.c, concordance.h, Loading
VERSION +1 −1 Original line number Diff line number Diff line 2019-01-24 No newline at end of file 2019-05-12 No newline at end of file
config/ax_cpuid_intel.m4 +10 −1 Original line number Diff line number Diff line Loading @@ -46,7 +46,7 @@ AC_LANG_PUSH([C]) ax_cv_cpu_has_avx2_ext=yes], [AC_MSG_RESULT(no)]) # Test for AVX512 support # Test for AVX512 (F and CD) support AC_MSG_CHECKING(for avx512 support) AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <immintrin.h>]], Loading @@ -55,6 +55,15 @@ AC_LANG_PUSH([C]) ax_cv_cpu_has_avx512_ext=yes], [AC_MSG_RESULT(no)]) # Test for AVX512BW and VL support (not in Knights Landing or Knights Mill) AC_MSG_CHECKING(for avx512bw and avx512vl support) AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <immintrin.h>]], [[return _may_i_use_cpu_feature(_FEATURE_AVX512BW | _FEATURE_AVX512VL) ? 0 : 9;]])], [AC_MSG_RESULT(yes) ax_cv_cpu_has_avx512bw_ext=yes], [AC_MSG_RESULT(no)]) AC_LANG_POP([C]) ])
config/ax_cpuid_non_intel.m4 +34 −2 Original line number Diff line number Diff line Loading @@ -153,7 +153,7 @@ static void run_cpuid (uint32_t eax, uint32_t ecx, uint32_t *abcd) { [AC_MSG_RESULT(no)]) # Test for AVX512 support # Test for AVX512 (F and CD) support AC_MSG_CHECKING(for avx512 support) AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <stdint.h> Loading @@ -175,7 +175,7 @@ static int check_xcr0_zmm () { } else if (!check_xcr0_zmm()) { return 8; } else if ((abcd[/*EBX*/1] & avx512_mask) != avx512_mask) { return 0; /* Should fail here, but book/Web examples skip */ return 0; /* Should be false here, but book/Web examples skip this test */ } else { return 0; }]])], Loading @@ -183,5 +183,37 @@ static int check_xcr0_zmm () { ax_cv_cpu_has_avx512_ext=yes], [AC_MSG_RESULT(no)]) # Test for AVX512BW and VL support AC_MSG_CHECKING(for avx512bw and avx512vl support) AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <stdint.h> static void run_cpuid (uint32_t eax, uint32_t ecx, uint32_t *abcd) { uint32_t ebx, edx; __asm__ ("cpuid" : "+b" (ebx), "+a" (eax), "+c" (ecx), "=d" (edx)); abcd[0] = eax; abcd[1] = ebx; abcd[2] = ecx; abcd[3] = edx;} static int check_xcr0_zmm () { uint32_t xcr0; uint32_t zmm_ymm_xmm = ((7 << 5) | (1 << 2) | (1 << 1)); __asm__ ("xgetbv" : "=a" (xcr0) : "c" (0) : "%edx"); return ((xcr0 & zmm_ymm_xmm) == zmm_ymm_xmm);}]], [[uint32_t abcd[4]; uint32_t osxsave_mask = (1 << 27); uint32_t avx512bw_vl_mask = (/*512BW*/(1 << 30) | /*512VL*/(1 << 31)); run_cpuid(1, 0, abcd); if ((abcd[/*ECX*/2] & osxsave_mask) != osxsave_mask) { return 9; } else if (!check_xcr0_zmm()) { return 8; } else if ((abcd[/*EBX*/1] & avx512bw_vl_mask) != avx512bw_vl_mask) { return 9; } else { return 0; }]])], [AC_MSG_RESULT(yes) ax_cv_cpu_has_avx512bw_ext=yes], [AC_MSG_RESULT(no)]) AC_LANG_POP([C]) ])
config/ax_ext.m4 +6 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ # # HAVE_MMX / HAVE_SSE / HAVE_SSE2 / HAVE_SSE3 / HAVE_SSSE3 / HAVE_SSE4_1 / HAVE_SSE4_2 / HAVE_AVX # # # LICENSE # # Copyright (c) 2007 Christophe Tournayre <turn3r@users.sourceforge.net> Loading Loading @@ -342,8 +343,10 @@ AC_DEFUN([AX_EXT], CFLAGS= if test x"$ax_cv_c_compiler_vendor" = xintel; then TEST_CFLAGS="-xCOMMON-AVX512" elif test x"$ax_cv_cpu_has_avx512bw_ext" != xyes; then TEST_CFLAGS="$SIMD_AVX2_CFLAGS -mavx512f -mavx512cd -mno-avx512bw -mno-avx512vl" else TEST_CFLAGS="$SIMD_AVX2_CFLAGS -mavx512f -mavx512cd" TEST_CFLAGS="$SIMD_AVX2_CFLAGS -mavx512f -mavx512cd -mavx512bw -mavx512vl" fi AX_CHECK_COMPILE_FLAG([$TEST_CFLAGS], [ax_cv_compile_avx512_ext=yes], [ax_cv_ext_compile_problem=yes]) if test x"$ax_cv_compile_avx512_ext" != xyes; then Loading @@ -368,6 +371,8 @@ AC_DEFUN([AX_EXT], SIMD_SSE4_2_CFLAGS="$SIMD_SSE4_2_CFLAGS -mno-avx512f -mno-avx512cd" SIMD_AVX2_CFLAGS="$SIMD_AVX2_CFLAGS -mno-avx512f -mno-avx512cd" fi # AC_DEFINE(HAVE_AVX512,1,[Define to 1 if you support AVX512 (Advanced Vector Extensions 512) instructions]) -- Defines run-type # AC_DEFINE(HAVE_AVX512BW,1,[Define to 1 if you support AVX512BW (Advanced Vector Extensions 512) BW instructions]) -- Defines run-type fi fi fi Loading