Hyperscan cần chạy trên các bộ vi xử lý Intel hiện đại hỗ trợ tập lệnh SIMD như SSEtin tuc the thao 24h, AVX, v.v. SIMD chủ yếu được sử dụng để tăng tốc thực thi các lệnh, nguyên lý gia tốc của nó nằm ở việc thực hiện đồng thời nhiều lệnh không phụ thuộc vào chuỗi thời gian. Như hình minh họa bên dưới:
Hình | 1 Minh họa thực thi song song SIMD
Vì Intel đã phát triển các lệnh thực thi song song và do tính phổ biến của biểu thức chính quytin tuc the thao 24h, bài báo đã cải tiến thuật toán hiện có cho việc khớp biểu thức chính quy và sử dụng công nghệ SIMD để đạt được hiệu quả cao hơn đáng kể trong việc khớp biểu thức chính quy.
Ý tưởng cốt lõi của Hyperscan là: 1. Phân tách biểu thức chính quy ban đầu thành nhiều thành phần; 2. Cải tiến thuật toán khớp cho từng thành phần để chúng có thể tận dụng tập lệnh SIMD.
Sau đóxem cung mệnh, sẽ lần lượt giới thiệu về thuật toán phân rã và thuật toán cải tiến.
Ý tưởng chính của việc phân tách biểu thức chính quy trong Hyperscan là chia nhỏ biểu thức thành các chuỗi không chồng chéo và các sub-regex (FA)xem cung mệnh, trong đó FA là Finite Automata – máy trạng thái hữu hạn.
Phân rã chính tắc tuyến tính
1:regex —> left str FA
2:left —> left str FA | FA
Trong đó str,FA Đều là các thành phần độc lậptin tuc the thao 24h, FA Có thể trống.
Sau khi phân táchxem cung mệnh, một biểu thức chính quy có thể được biểu diễn dưới dạng: FAnstrnFAn−1strn−1...str2FA1str1FA0
Chọn phân rã chính tắc
Dạng (A|B)lich thi ngoai hang anh 2025, chỉ khi A và B có thể được phân rã thành str Hoặc FA tin tuc the thao 24h, nếu không thì (A|B) sẽ được coi là một FA Sau khi phân táchtin tuc the thao 24h, kết quả của biểu thức chính quy vẫn giữ nguyên giá trị tương đương với ban đầu; (chứng minh toán học của Hyperscan hiện tại chưa được đưa ra)
Phương pháp thực hiện
Đối với việc phân rã chính tắctin tuc the thao 24h, sử dụng phương pháp phân rã dựa trên đồ thị chia thành ba loại:
1. Phân tích đường đi
Hình | 2 Phân tích đường đi
2. Phân tích khu vực
Hình | 3 Phân tích khu vực
3. Phân tích luồng mạng
Hình | 4 Phân tích luồng mạng
Chương này giới thiệu thuật toán khớp đa chuỗi và FAtin tuc the thao 24h, thuật toán này sử dụng SIMD để tăng tốc.
Thuật toán khớp đa chuỗi
Tên thuật toán là FDR; thuật toán được chia thành hai bướctin tuc the thao 24h, như hình:
Hình | 5 Hai giai đoạn khớp FDR
Trước tiênlich thi ngoai hang anh 2025, sử dụng thuật toán Extended Shift-or Matching để khớp với các chuỗi đã được phân tách; sau đó, các tùy chọn khớp được chuyển đến thuật toán FA để tiếp tục kiểm tra.
Shift-or Matching
Thuật toán shift-or Matching là một thuật toán đơn giản; như hình:
Hình | 6 Thuật toán shift-or kinh điển
Đối với chuỗi cần khớplich thi ngoai hang anh 2025, cần duy trì hai trạng thái là st-mask và sh-mask('c').
Đối với chuỗi khớp tiềm năngtin tuc the thao 24h, nếu 'c' xuất hiện trong chuỗi, thì bit tương ứng trong sh-mask('c') tại vị trí xuất hiện sẽ là 0, còn lại đều là 1.
Như hình 6lich thi ngoai hang anh 2025, chuỗi khớp là "aphp", 'p' xuất hiện ở vị trí thứ 2 và 4, do đó sh-mask('p') = 11110101.
Trạng thái ban đầu của st-mask là 11111111
Đối với ký tự mới được nhập là 'x':
st-mask=((st-mask≪1) | sh-mask(‘x’)
Khi bit tương ứng với độ dài chuỗi khớp của st-mask là 0 thì có nghĩa là đã khớp thành công.
Thuật toán Shift-or Matching có hiệu suất chạy khá cao. Tuy nhiênlich thi ngoai hang anh 2025, nó cũng tồn tại hai nhược điểm: 1. Chỉ hỗ trợ khớp một chuỗi duy nhất; 2. Không thể sử dụng tập lệnh SIMD để tối ưu hóa hiệu suất.
Để khắc phục hai nhược điểm nàytin tuc the thao 24h, sử dụng thuật toán như sau:
Multi-string shift-or matching
Để hỗ trợ khớp đồng thời nhiều chuỗixem cung mệnh, cấu trúc dữ liệu đã được sửa đổi.
Trước tiêntin tuc the thao 24h, chia chuỗi thành n bucket, mỗi bucket được đánh số từ 0 đến n-1; giả sử rằng mỗi chuỗi chỉ thuộc về một bucket duy nhất.
Bước haitin tuc the thao 24h, mở rộng st-mask và sh-mask n lần;
sh-mask('x') được khởi tạo toàn bộ là 1;
Nếu 'x' xuất hiện ở vị trí thứ k của bucket thứ nxem cung mệnh, thì bit thứ k trong sh-mask('x') sẽ được đặt thành 0. Đồng thời, đối với các bucket có độ dài ngắn hơn độ dài lớn nhất, cần thêm các bit bổ sung.
Hình | 7 Ví dụ về sh-mask
Vị trí thứ k ở đây khác với thuật toán Shift-or Matchinglich thi ngoai hang anh 2025, vì tại đây đếm từ bên phải. st-mask |= (sh-mask('x') << (k bytes)). Ví dụ minh họa như sau:
Hình | 8 Khớp đa chuỗi FDR bằng shift-or
Nhóm mẫu
Như đã đề cập trước đótin tuc the thao 24h, cần phân chia một cặp chuỗi vào các nhóm khác nhau; bài viết này sử dụng phương pháp quy hoạch động để thực hiện việc phân nhóm.
Trước tiênxem cung mệnh, sắp xếp mảng ký tự theo độ dài chuỗi; sau đó sử dụng phương trình quy hoạch động sau để hoàn thành nhóm:
Cải tiến thuật toán
Có một số nhược điểm trong cách mã hóa của cùng một bucket. Ví dụ như trong hình 7xem cung mệnh, do a và c tương đương, b và d tương đương, nên sẽ gây ra lỗi nhận diện các chuỗi như ad và cb. Để sửa lỗi này, thuật toán được cải tiến bằng cách mở rộng độ dài nội bộ, làm cho độ dài ký tự được mở rộng lên m bit (với 9 ≤ m ≤ 15).
Giả sử m=12 thì a được ánh xạ thành a=((loworder4bitsofb<<8)|a)
Tăng tốc bằng SIMD
Sau khi cải tiến trêntin tuc the thao 24h, các thành phần có thể sử dụng lệnh SIMD đồng bộ để tăng tốc.
Sau khi String Matching thành côngxem cung mệnh, sẽ kích hoạ Để có thể tận dụng hiệu quả SIMD, FA Matching được thực hiện theo cách bit-based NFA. Mô tả thuật toán như sau:
Đầu tiênxem cung mệnh, mã hóa n trạng thái của NFA thành 0, n-1;
Định nghĩa trạng thái Slich thi ngoai hang anh 2025,Biểu thị tính hợp lệ của các trạng thái hiện tại; ví dụtin tuc the thao 24h, nếu bit thứ k là 1, thì trạng thái thứ k hiện tại là hợp lệ;
Định nghĩa shift-k masktin tuc the thao 24h, Biểu thị trạng thái hiện tại có thể bỏ qua k trạng thái để đạt được trạng thái mới đối với nút đầu vào mới;
Exception mask Là cờ cho biết đang ở nút ngoại lệ
succ_mask[i] biểu thị tập hợp các nút mà nút i có thể đạt được (bit được thiết lập thành 1 nếu có thể chuyển đổi đến trạng thái đó chỉ trong một lần).
reach[x], Biểu thị tất cả các trạng thái mà ký tự k có thể đạt được;
Chuyển trạng thái được định nghĩa là loại nút và nút ngoại lệ; nút loại có chuyển trạng thái qua số nút không vượt quá ktin tuc the thao 24h, và không có trạng thái quay lại.
Hình | 9 Trình bày NFA của biểu thức chính tắc (AB|CD)AFF*
Như hình 9xem cung mệnh, shift-k được thiết lập là 2; trong đó các bit 0, 2, 4 là nút ngoại lệ; mô tả thuật toán như sau:
Hình | 10 Thuật toán NFA dựa trên bit