2013-05-14 25 views
9

Tôi đọc here mà Intel đã giới thiệu SSE 4.2 instructions để tăng tốc xử lý chuỗi.Gcc có sử dụng các chỉ lệnh SSE 4.2 của Intel để xử lý văn bản nếu có không?

Trích dẫn từ bài viết:

Các SSE 4.2 hướng dẫn thiết lập, đầu tiên thực hiện trong Core i7 của Intel, cung cấp chuỗi và hướng dẫn xử lý văn bản (STTNI) mà sử dụng hoạt động SIMD cho dữ liệu ký tự chế biến. Mặc dù ban đầu được hình thành để tăng tốc chuỗi, văn bản và xử lý XML, các khả năng mới mạnh mẽ của các hướng dẫn này hữu ích bên ngoài các tên miền này và đáng xem xét lại tìm kiếm và công nhận các giai đoạn của nhiều ứng dụng sử dụng STTNI để cải thiện hiệu suất

  • Gcc có sử dụng các hướng dẫn này nếu chúng có sẵn không?
  • Nếu có, phiên bản nào?
  • Nếu không, có bất kỳ thư viện nguồn mở nào cung cấp tính năng này không?
+2

tôi nghi ngờ rằng GCC sẽ có thể nhận ra một nhiệm vụ cụ thể khi đang xử lý thử nghiệm và sử dụng chúng tự động. Nhưng tôi sẽ không ngạc nhiên nếu các hàm như 'strcpy()' được thực hiện bằng cách sử dụng trình biên dịch SSE4.2. – Mysticial

+0

@Mysticial Tôi đoán tôi đã đề cập đến 'strcpy' et al; nhưng quan trọng hơn là 'atoi' vv, và C++ 11 tương đương' std :: stoi' etc –

+1

xem http://stackoverflow.com/questions/7919304/gcc-sse-code-optimization Bạn cần nói với gcc. Thư viện đã được biên soạn, do đó, chỉ có mã của bạn sẽ bị ảnh hưởng, trừ khi bạn biên dịch lại các thư viện. – imel96

Trả lời

4

Về thư viện phần mềm, tôi sẽ xem Agner Fog's asmlib. Nó có một bộ sưu tập của nhiều thói quen, bao gồm một số thao tác chuỗi sử dụng SSE4.2, tối ưu hóa trong lắp ráp. Một số chức năng hữu ích khác mà nó cung cấp mà tôi sử dụng thông tin trả về trên CPU chẳng hạn như kích thước bộ nhớ cache cho mỗi cấp và phần mở rộng nào (ví dụ: SSE4.2) được hỗ trợ.

http://www.agner.org/optimize/asmlib.zip

Để kích hoạt SSE4.2 trong GCC biên dịch với -msse4.2 hoặc nếu bạn có một bộ xử lý với AVX sử dụng -mavx

1

Tôi không chắc chắn về việc liệu gcc sử dụng đó, nhưng nó không quan trọng vì xử lý văn bản thường được thực hiện thông qua glibc. Nếu bạn sử dụng các hàm chuỗi chuẩn từ string.h (có thể là cstring sẽ làm tương tự), và có glibc hợp lý, bạn nên sử dụng chúng một cách tự động.

Tôi đã tìm kiếm nó và có vẻ như glibc 2.15 (có thể thậm chí những người lớn tuổi có nó) đã có SSE4.2 strcasecmp tối ưu hóa:

http://upstream.rosalinux.ru/changelogs/glibc/2.15/changelog.html

Các vấn đề liên quan