Về câu hỏi này, tôi chỉ quan tâm đến x86 và x86-64.
Đối với MSVC 2005, tài liệu cho __faststorefence nói: "bảo lãnh rằng mỗi trước cửa hàng có thể nhìn thấy trên toàn cầu trước khi bất kỳ cửa hàng tiếp theo."
Đối với MSVC 2008 và 2010, nó đổi thành: "bảo lãnh rằng mỗi nhớ tham khảo trước, bao gồm cả tài liệu tham khảo bộ nhớ lưu trữ tải và, có thể nhìn thấy trên toàn cầu trước khi bất kỳ tài liệu tham khảo bộ nhớ sau."
Cách thứ hai được viết, nó ngụ ý theo ý kiến của tôi rằng điều này cũng sẽ chặn việc sắp xếp lại các tải của CPU trước các cửa hàng cũ hơn. Điều này khác với định nghĩa đầu tiên, ngụ ý rằng nội tại chỉ để đối phó với việc ngăn chặn hoặc sắp xếp lại các cửa hàng phi thời gian với các cửa hàng cũ hơn (chỉ có x86 (-64) sắp xếp lại khác).
Tuy nhiên, sau đó các tài liệu dường như mâu thuẫn với bản thân: "Trên nền tảng x64, thói quen này tạo ra một lệnh đó là một nhanh hơn cửa hàng rào hơn sfence hướng dẫn Sử dụng nội tại này thay vì _mm_sfence trên nền tảng x64. . "
Điều này ngụ ý rằng nó vẫn có chức năng giống như sfence và do đó tải vẫn có thể được sắp xếp lại với các cửa hàng cũ hơn. Vì vậy, đó là nó? Ai đó có thể xóa bỏ sự nhầm lẫn của tôi không?
PS: tìm phiên bản GCC của chức năng này, tôi đã xem qua long local; __asm__ __volatile__("lock; orl $0, %0;" : : "m"(local));
nhưng tôi nghĩ rằng đó là từ mã 32 bit; tương tự 64-bit là gì?Hành vi của __faststorefence là gì?
Trả lời
Phiên bản GCC bạn trích dẫn tương đương với mã mà MSVC tạo. Nó dựa trên thực tế là các tài liệu kiến trúc bộ vi xử lý x86/x86-64 chỉ định rằng các tải và các cửa hàng không được sắp xếp lại với lệnh LOCK
ed.
Tôi không rõ liệu điều này có áp dụng cho các cửa hàng không theo thời gian hay không, vì nói chung, các hạn chế về mô hình bộ nhớ không áp dụng cho các hướng dẫn đó.
Xin chào Anthony, cảm ơn câu trả lời. Điều không rõ ràng là lý do tại sao tài liệu cho nội tại này xác định rằng nó nhanh hơn trên nền tảng x64, thay vì trên cả 32 và 64. Có nghĩa là ngụ ý rằng lệnh bị khóa rẻ hơn mfence chỉ trên x86-64? Ngoài ra, nếu nó ngăn cản cả tải và cửa hàng bị sắp xếp lại, đây có phải là hàng rào đủ cho tính đồng nhất tuần tự (không bao gồm trường hợp các cửa hàng không theo thời gian) không? –
Nội tại này chỉ có sẵn trong MSVC trên x86-64; Tôi không biết tại sao. Tôi hy vọng nó có cùng chi phí trên x86-64 như trên x86 đối với 'MFENCE', vì kiến trúc về cơ bản giống nhau. Nếu bạn bỏ qua các cửa hàng phi thời gian thì đây là một hàng rào đủ cho tính đồng nhất tuần tự. –
Bạn có thể đặt tên câu hỏi hay hơn '__faststorefence' không? –
@ JaredFarrish: Tốt hơn bao giờ hết? :) – GManNickG