diff options
Diffstat (limited to 'src/analysis/scan')
| -rw-r--r-- | src/analysis/scan/patterns/backends/bitap-int.h | 14 | ||||
| -rw-r--r-- | src/analysis/scan/patterns/backends/bitap.c | 47 | 
2 files changed, 44 insertions, 17 deletions
diff --git a/src/analysis/scan/patterns/backends/bitap-int.h b/src/analysis/scan/patterns/backends/bitap-int.h index 83ecc17..ea739b4 100644 --- a/src/analysis/scan/patterns/backends/bitap-int.h +++ b/src/analysis/scan/patterns/backends/bitap-int.h @@ -33,12 +33,15 @@  #include "../backend-int.h"  #include "../../../../common/cpu.h" +#include "../../../../../config.h"  #define BITAP_ATOM_SIZE 7 +#ifdef HAVE_AVX2 +  /* Suivi d'un groupe de chaînes */  typedef struct _grouped_strings_avx2_t  { @@ -64,6 +67,9 @@ typedef struct _group_manager_avx2_t  } group_manager_avx2_t; +#endif + +#ifdef HAVE_AVX512_F  /* Suivi d'un groupe de chaînes */  typedef struct _grouped_strings_avx512_t @@ -90,6 +96,8 @@ typedef struct _group_manager_avx512_t  } group_manager_avx512_t; +#endif +  /* Méthode de recherche basée sur l'algorithme Bitap (instance) */  struct _GBitapBackend @@ -98,11 +106,17 @@ struct _GBitapBackend      CPUSMIDFeature optimization;            /* Mode de calculs             */ +#if defined HAVE_AVX2 || defined HAVE_AVX512_F      union      { +#   ifdef HAVE_AVX2          group_manager_avx2_t manager_avx2;  /* Gestionnaire pour AVX2      */ +#   endif +#   ifdef HAVE_AVX512_F          group_manager_avx512_t manager_avx512;/* Gestionnaire pour AVX-512 */ +#   endif      }; +#endif  }; diff --git a/src/analysis/scan/patterns/backends/bitap.c b/src/analysis/scan/patterns/backends/bitap.c index adf66d6..99e16e5 100644 --- a/src/analysis/scan/patterns/backends/bitap.c +++ b/src/analysis/scan/patterns/backends/bitap.c @@ -73,6 +73,8 @@ static void g_bitap_backend_output_stats(const GBitapBackend *);  /* ---------------------- OPTIMISATIONS POUR ARCHITECTURE AVX2 ---------------------- */ +#ifdef HAVE_AVX2 +  /* Indique la valeur portée par une expression rationnelle. */  static void extend_grouped_strings_avx2(grouped_strings_avx2_t ***, size_t *); @@ -82,13 +84,15 @@ static patid_t enroll_plain_pattern_avx2(GBitapBackend *, GScanContext *, const  /* Parcours un contenu binaire à la recherche de motifs. */  static void run_scan_avx2(const GBitapBackend *, GScanContext *, const bin_t *, phys_t); - +#endif  /* --------------------- OPTIMISATIONS POUR ARCHITECTURE AVX512 --------------------- */ +#ifdef HAVE_AVX512_F +  /* Indique la valeur portée par une expression rationnelle. */  static void extend_grouped_strings_avx512(grouped_strings_avx512_t ***, size_t *); @@ -98,7 +102,7 @@ static patid_t enroll_plain_pattern_avx512(GBitapBackend *, GScanContext *, cons  /* Parcours un contenu binaire à la recherche de motifs. */  static void run_scan_avx512(const GBitapBackend *, GScanContext *, const bin_t *, phys_t); - +#endif @@ -270,21 +274,19 @@ static patid_t g_bitap_backend_enroll_plain_pattern(GBitapBackend *backend, GSca  {      patid_t result;                         /* Identifiant à retourner     */ - - -    result = INVALID_PATTERN_ID; - - - - +#ifdef HAVE_AVX512_F      if (0) +        result = enroll_plain_pattern_avx512(backend, context, plain, len); +    else +#endif +#ifdef HAVE_AVX2 +    if (0)          result = enroll_plain_pattern_avx2(backend, context, plain, len); -      else +#endif -        result = enroll_plain_pattern_avx512(backend, context, plain, len); - +        result = INVALID_PATTERN_ID;      return result; @@ -351,13 +353,22 @@ static void g_bitap_backend_run_scan(const GBitapBackend *backend, GScanContext      assert(data != NULL); + + + +#ifdef HAVE_AVX512_F      if (0) +        run_scan_avx512(backend, context, data, dlen); +    else +#endif +#ifdef HAVE_AVX2 +    if (0)          run_scan_avx2(backend, context, data, dlen); -      else +#endif -        run_scan_avx512(backend, context, data, dlen); +        ;      g_object_unref(G_OBJECT(content)); @@ -397,6 +408,7 @@ static void g_bitap_backend_output_stats(const GBitapBackend *backend)   * Cf. https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#techs=AVX,AVX2   */ +#ifdef HAVE_AVX2  /******************************************************************************  *                                                                             * @@ -1481,6 +1493,8 @@ static void run_scan_avx2(const GBitapBackend *backend, GScanContext *context, G +#endif +  /* ---------------------------------------------------------------------------------- */ @@ -1494,6 +1508,7 @@ static void run_scan_avx2(const GBitapBackend *backend, GScanContext *context, G   *   - https://uops.info/table.html   */ +#ifdef HAVE_AVX512_F  /******************************************************************************  *                                                                             * @@ -1619,9 +1634,6 @@ static patid_t enroll_plain_pattern_avx512(GBitapBackend *backend, GScanContext  } - - -  /******************************************************************************  *                                                                             *  *  Paramètres  : backend = moteur de recherche à manipuler.                   * @@ -2762,3 +2774,4 @@ static void run_scan_avx512__saved(const GBitapBackend *backend, GScanContext *c +#endif  | 
