2015-12-03 19 views
6

Cho đến nay tôi đã cố gắng tìm ra rằng:Phiên bản Windows nào hỗ trợ/yêu cầu phần mở rộng đa phương tiện CPU nào?

  • SSE và SSE2 là bắt buộc dành cho Windows 8 và sau đó (và dĩ nhiên đối với bất kỳ hệ điều hành 64-bit)
  • AVX chỉ được hỗ trợ bởi Windows 7 SP1 hoặc sau này

Có bất kỳ cảnh báo nào về việc sử dụng SSE3, SSSE3, SSE4.1, SSE 4.2, AVX2 và AVX-512 trên Windows không?

Một số làm rõ: Tôi cần điều này để xác định xem chương trình của tôi sẽ chạy chương trình nào nếu tôi sử dụng hướng dẫn từ một trong các bộ SSE/AVX.

+0

@ downvoters: Đây không phải là một câu hỏi xấu, so với hầu hết, ngay cả khi nó quay ra không có một câu trả lời rất thú vị. OP không biết điều đó, hoặc anh ta sẽ không hỏi. Rõ ràng và có vẻ như OP đã cố gắng nghiên cứu, nhưng không biết phải tìm kiếm gì (bởi vì anh ta chưa biết câu trả lời cho câu hỏi: P) Tôi có thể thấy việc đóng nó là chủ đề cho SO/migrate để SU, nhưng không phải là downvotes. –

+0

Tôi không nghĩ rằng đó là một câu hỏi SU, tôi nghi ngờ mã hóa trong lắp ráp là một cái gì đó ngay cả những người dùng siêu nhất làm. Tôi sẽ reword câu hỏi để làm cho nó rõ ràng hơn rằng tôi đang cố gắng sử dụng các opcodes trong các chương trình của tôi. – Alexey

+1

Tôi không thấy làm thế nào câu hỏi này chỉ là "về phần mềm máy tính nói chung". Thực tế duy nhất là nó chứa "Windows" không có nghĩa là nó không có chủ đề ở đây. Đây là một câu hỏi về các nền tảng từ quan điểm của các lập trình viên, và nó rõ ràng là quan trọng đối với những người viết mã trong SSE/AVX/etc. – stgatilov

Trả lời

8

Tiện ích mở rộng giới thiệu trạng thái kiến ​​trúc mới yêu cầu hỗ trợ hệ điều hành đặc biệt, vì hệ điều hành phải lưu/khôi phục khôi phục nhiều dữ liệu hơn trên các công tắc ngữ cảnh. Vì vậy, từ quan điểm của hệ điều hành, không cần thêm gì để cho phép mã không gian người dùng chạy các lệnh SSSE3, nếu hệ điều hành hỗ trợ SSE.

SSE, AVX và AVX512 là các tiện ích mở rộng giới thiệu trạng thái kiến ​​trúc mới.

  • SSE giới thiệu regs XMM (và MXCSR để làm tròn các chế độ và FP trạng thái ngoại lệ)
  • AVX giới thiệu YMM (nửa dưới trong số đó là các regs XMM cũ).
  • AVX512 giới thiệu zmm (mở rộng số ymm) và cũng tăng gấp đôi số lần kiểm tra vectơ ở chế độ 64 bit: zmm0-zmm31.

Bạn kiểm tra xem có hỗ trợ CPU cho SSE hoặc AVX theo cách thông thường, với sự hướng dẫn CPUID.

Để ngăn không cho dữ liệu bị hỏng khi sử dụng phần mở rộng mới trên hệ điều hành đa nhiệm không lưu/khôi phục trạng thái kiến ​​trúc mới trên thiết bị chuyển ngữ cảnh, SSE hướng dẫn lỗi như hướng dẫn bất hợp pháp nếu hệ điều hành không có set an OS-support bit in a control register. Vì vậy, các phần mở rộng vector "không hoạt động" trên các hệ điều hành không biết về việc lưu/khôi phục trạng thái cần thiết cho tiện ích mở rộng đó.


Đối với SSE, có thể không có bất kỳ cách nào hệ điều hành độc lập sạch để phát hiện rằng hệ điều hành đã hứa sẽ lưu/khôi phục trạng thái SSE trên switch bối cảnh bằng cách thiết lập CR4.OSFXSR, CR4.OSXMMEXCPT, vv bit, vì even reading a control register is privileged và không có bit CPUID phản ánh cài đặt. Trên Windows, bạn có thể sử dụng GetEnabledXStateFeatures để kiểm tra xem hệ điều hành có biết cách lưu/khôi phục trạng thái đăng ký véc tơ hay không. Tôi không chắc chắn những gì bạn cần trên các hệ điều hành khác; Hỗ trợ SSE quá phổ biến đến nỗi bạn phải sử dụng hệ điều hành (hoặc homebrew) thực sự cổ đại để giải quyết vấn đề này.


Đối AVX, chúng tôi không cần sự hỗ trợ hệ điều hành để phát hiện rằng AVX là có thể sử dụng (được hỗ trợ bởi phần cứng và kích hoạt hệ điều hành): CPUID bao gồm một tính năng chút OSXSAVE sẽ được thiết lập khi hệ điều hành có đã bật AVX.

Từ Intel's intro to AVX:

  • Xác minh rằng các hệ điều hành hỗ trợ XGETBV sử dụng CPUID.1:ECX.OSXSAVE bit 27 = 1.
  • Đồng thời, xác minh rằng CPUID.1:ECX bit 28=1 (Intel AVX hỗ trợ) và/hoặc cắn 25 = 1 (AES hỗ trợ) ... (và bit khác cho FMA, AES, và PCLMULQDQ)
  • Issue XGETBV và xác minh rằng mặt nạ bật tính năng tại bit 1 và 2 là 11b (trạng thái XMM và trạng thái YMM được bật bởi hệ điều hành ).

Nó có thể được dễ dàng hơn để gọi một chức năng hệ điều hành cung cấp để phát hiện hỗ trợ hệ điều hành, thay vì sử dụng asm inline hoặc một thư viện tính năng phát hiện để làm tất cả điều này.


Điều này cũng đúng cho AVX512: bạn có thể kiểm tra các bit tính năng CPUID cho các tập lệnh, kiểm tra mà hệ điều hành đã hứa sẽ quản lý trạng thái kiến ​​trúc mới trên bối cảnh chuyển mạch bằng cách cho phép các bit ngay trong với XSETBV. (Vì vậy, bạn nên kiểm tra với XGETBV).

+0

Vì vậy, điều này có nghĩa là tôi không thể sử dụng các phần mở rộng AVX512 trong các chương trình đang chạy trong hệ điều hành được phát hành trước năm 2013, vì đó là khi nó được thông báo. Bạn có biết phiên bản Windows nào sẽ nhận được các bản cập nhật giúp họ xử lý thanh ghi zmm chính xác không? – Alexey

+3

Trên thực tế, bạn nên sử dụng 'IsProcessorFeaturePresent' và' GetEnabledXStateFeatures' vì chúng cho bạn biết không chỉ tính năng CPU tồn tại mà còn cho dù hệ điều hành có hỗ trợ nó hay không. Sẽ rất khó để phát hiện (nói) hỗ trợ AVX trong CPU, và sau đó sử dụng hướng dẫn AVX, chỉ để thấy rằng trạng thái AVX của bạn bị hỏng ở mọi công tắc ngữ cảnh vì hệ điều hành không hỗ trợ chuyển ngữ cảnh AVX. –

+0

@Alexey: Phải mất thời gian cho việc triển khai thử nghiệm đủ để tàu sẵn sàng, sau khi Intel thông báo mọi thứ. AVX512 vẫn không có mặt trong bất kỳ CPU bình thường nào để bán, chỉ có những thứ cốt lõi của Knight's Landing. Dù sao, tôi không có ý tưởng hỗ trợ AVX512 của Windows sẽ như thế nào. Nó khá dễ dàng để thêm hỗ trợ hệ điều hành để lưu/khôi phục trạng thái bổ sung. Chỉ cần thiết lập một vài tính năng bit cho XSAVE/XRSTOR, và CPU sẽ lưu trạng thái bổ sung. –

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