新的RyuJIT編譯器是否曾生成向量(SIMD)CPU指令,以及何時?備註:System.Numerics命名空間包含的類型允許顯式使用Vector操作,這些操作可能會或可能不會生成SIMD指令,具體取決於CPU,CLR版本,JITer版本,無論是否直接編譯爲本機代碼。這個問題是關於什麼時候非向量代碼(例如在C#或F#中)將產生SIMD指令的具體問題。.NET JIT編譯器在什麼條件下執行自動向量化?
6
A
回答
8
RuyJIT中的SIMD代碼生成嚴格限於System.Numerics.Vectors命名空間中的類型。通用SIMD支持將要求對CLR進行非常重要的修訂,只有在SIMD變量正確對齊的情況下,此類代碼纔有效。對於SSE2,至少要有16個,要能夠使用AVX2的要有32個,即將推出的AVX-512要有64個。
現在已經很遙遠了,32位CLR只能對齊到4位,64位版本爲8.「32位」和「64位」代碼的「自然」對齊。所需的更改將影響CLR的每個部分,即垃圾收集器和類加載器。關於正在考慮的這樣一個重大變革沒有嗡嗡聲。並沒有跡象表明它在CoreCLR項目中被認爲是最明顯的目標版本。
如果您想在System.Numerics.Vectors的當前支持之外利用SIMD,那麼可以使用C++編譯器,使用C++/CLI或C++/CX語言擴展來互操作。
相關問題
- 1. 條件JIT編譯
- 2. .NET JIT編譯天真
- 3. LINQ在編譯器級別執行什麼類型的優化?
- 4. C#編譯器和JIT都做了什麼樣的優化?
- 5. 使JIT編譯器
- 6. ASP.Net JIT編譯器
- 7. .NET JIT編譯器會優化一個方法調用嗎?
- 8. JIT編譯器 - 如何開始編寫自己的編譯器?
- 9. CLR語言優化。語言編譯器VS JIT編譯器
- 10. 什麼的JIT編譯器不支持CLR
- 11. 當由.NET編譯時,可執行文件包含什麼?
- 12. .NET運行時(CLR),JIT編譯器位於何處?
- 13. JIT編譯與動態編譯
- 14. 的Android JIT編譯器:是編譯/方法優化
- 15. 在.NET中,爲什麼常量是在編譯時而不是在JIT時間進行評估的?
- 16. 關閉JIT編譯器
- 17. 爲什麼常量性沒有編譯器執行
- 18. JIT編譯
- 19. 什麼時候由C2 JIT編譯器觸發Java循環預測優化?
- 20. 泛型如何通過JIT編譯器進行編譯?
- 21. 有什麼辦法可以改變.NET JIT編譯器的性能,而不是編譯時間?
- 22. 在ms-access中自動執行反編譯/重新編譯
- 23. Delphi編譯器是否執行優化?
- 24. 爲什麼Multicore JIT不在默認情況下在.net 4.5中?
- 25. JIT編譯和DEP
- 26. 編譯期間自動化變量值
- 27. 在ARC編譯器下缺少自動釋放優化
- 28. 有沒有辦法讓.Net JIT或C#編譯器優化空的for-loops?
- 29. 有條件編譯的自動化錯誤
- 30. intel Fortran編譯器(ifort)有編譯和編譯後自動運行可執行文件的選項嗎?
關於內存對齊,我發現來自Intel的這條評論......「大多數VEX編碼的SIMD數字和數據處理指令的語義與內存操作數具有 寬鬆的內存對齊要求比使用SIMD前綴編碼的指令」[英特爾®64和IA -32體系結構 軟件開發人員手冊](http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-1 -manual.pdf) – redcalx
「只能*高效*」是關鍵短語。未對齊的加載和存儲非常昂貴。 –