2012-05-13 16 views
6

Tôi cần phải so sánh nhanh hai chuỗi trên máy có hỗ trợ SSE4. Làm thế nào tôi có thể làm điều đó mà không cần viết chèn lắp ráp?So sánh các chuỗi bằng trình bao bọc SSE4

Một số trình bao bọc như long long bitmask = strcmp(char* a, char* b) sẽ là hoàn hảo.

+0

nó có thể phụ thuộc vào trình biên dịch (bao gồm cả phiên bản) và các cờ được sử dụng. Nếu bạn sử dụng 'gcc-4.7', bạn có thử' -mcpu = native -O3' không? –

+1

http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/compiler_c/intref_cls/common/intref_sse42_comp.htm – Mysticial

+0

Googling "sse4 strcmp" mang lại nhiều kết quả với sẵn sàng thực hiện mã lắp ráp. Bạn có thể thử dịch chúng sang C bằng cách sử dụng nội tại. Chúc vui vẻ. – hirschhornsalz

Trả lời

9

Thay vì sử dụng lắp ráp nội tuyến, bạn nên sử dụng nội tại Intel SSE.

Để so sánh chuỗi, bạn sẽ cần intrinsics SSE4.2:

Tài liệu là ở đây: http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/cpp-mac/GUID-6E9CFDF2-5DF6-42A4-B429-0E2CD441342E.htm

+0

Liên kết của bạn đã chết: ( –

+0

Và bạn chính xác. Họ đã thay đổi liên kết. Cập nhật bằng liên kết mới. – Mysticial

0

Sử dụng Agner Fog's asmlib. http://www.agner.org/optimize/#asmlib

Anh ấy đã gặp sự cố khi viết mã trong khi lắp ráp cho bạn bao gồm sử dụng hướng dẫn SSE4.2. Sử dụng chức năng của mình A_strcmp (hoặc phiên bản không phân biệt chữ hoa chữ thường A_stricmp).

Điều thú vị là cách một phương pháp sử dụng nội tại so sánh hiệu suất.