2012-05-27 77 views

回答

10

沒有,有在.NET中沒有的場景,你可以寫自己的機器代碼。代碼生成完全取決於即時編譯器。它當然能夠根據機器處理器的功能自定義其代碼生成。 ngen.exe必須始終在目標機器上運行的一個重要原因之一。 .NET 4.5中的抖動是否被調整以利用sse4或avx是一個懸而未決的問題,我還沒有聽說過。我相當懷疑它,微軟並沒有對這些不安的事情進行修補,除了修復錯誤。非常不穩定,4.5不是並排版本。

VS-11確實有一個更新的C++代碼生成器。它能夠自動矢量化循環,並使用SIMD/AVX指令來完成。這blog post提到它,一個簡短的視頻是available here


更新說明:new x64 jitter,目前在CTP和代號爲RyuJIT,包括SIMD指令一些基本的支持。 SSE2類型,提供自動矢量化。然而,它被鎖定在Microsoft.Bcl.Simd軟件包和Vector類中,對於SIMD需要快速運行的16字節內存對齊要求沒有通用的解決方案。

在最後的Build會議上宣佈的更有可能成爲富有成效的前進道路是.NET Native。它使用C++編譯器的後端提前生成代碼,自動從內置支持自動矢量化和自動並行化中受益。否則,如果沒有明確的解釋,如何解決內存對齊問題。它有它自己的問題,反射是困難的,目前僅支持打包的應用程序,這種類型的運行時依賴關係可以提前確定。 Windows應用商店和手機應用。


更新:這在.NET 4.6,System.Numerics.Vectors.dll程序集中發佈。注意框架中包含的是「安全」的,並且與MSDN文檔不匹配,因此缺少Vector<T>。 Nuget包(版本4.1.0)確實匹配。

+0

感謝您的回答 –

+2

您當然可以自己編寫機器代碼;將字節寫入內存,然後調用'Marshal.GetDelegateForFunctionPointer'來獲取可以調用的委託。調用它的代價意味着它可能不會與Mono.Simd相比,但它肯定是可能的。 –

+0

https://en.wikipedia.org/wiki/NX_bit –

相關問題