Ryujit将支持SSE指令,但Ryujit仅支持64位。
由于公司政策和预算(由于测试成本),大多数客户坚持使用Windows 32位操作系统。
我的理解是Ryujit是新的“64位优化的JIT方案”。
但是,如您所知,SSE指令集在32位和64位上存在。
Mono.Simd工作在x86或Arm 32位处理器上。
(Java SIMD call似乎适用于x86和64位)。
我们的项目适用于任何CPU,所以我很难告诉客户“请使用Mono,因为他们有SSE支持,或者更换CPU和操作系统。”
为什么x86的MS .NET框架不提供SSE命令支持,而Ryujit可以提供?
(我不是CPU专家,但我希望.NET有一个选项可以选择"force SSE on this command(如果可能的话)“)
发布于 2015-05-01 16:56:08
RyuJIT基于与x86 JIT相同的代码库。虽然它现在只适用于x64,但它是一个现代编译器,将成为我们未来所有即时编译器的基础: x86、ARM、MDIL和其他任何编译器。拥有单一的代码库意味着.NET程序在不同的架构之间更加一致--换句话说,你通常可以获得错误对错误的兼容性。但拥有单一的代码库也意味着我们可以更快地创新,更快地为您带来更多的代码生成功能。
基本上,他们为x86、x64、Itanium和ARM构建了四个独立的即时编译器实现。Itanium基本上已经死了,但这仍然给了他们三个需要维护的实现,这三个实现几乎没有什么共同点。
我相信这样做的目的是为了在.NET框架足够稳定的情况下用RyuJIT取代它。实际上,.NET Framework4.6包含了RyuJIT作为x64编译器。
发布于 2015-03-22 02:14:40
仔细想想,对我来说,原因是:
A) Ryujit是一个新的JIT编译器,从头开始构建,所以它可以做新的和奇妙的事情。他们可能将其限制在64位以便于构建,而且因为64位上的“当前”JIT有时比32位版本慢,所以64位上的JIT“更有必要”
B)新的和闪亮的,更容易包括新的功能/扩展点(例如SIMD功能)
C)微软似乎不想用“老的”.NET编译器来思考(我不考虑他们在.NET 4.5中所做的事情,他们把一些工作转移到了后台线程,以成为“思想者太多”)。如果仔细观察,您会发现他们从未向.NET的汇编语言CIL (公共中间语言)添加新的OpCodes (他们对GC和.NET库进行了更改,但这是不同的“东西”),显然,要添加SIMD函数,他们需要进行更改
D) Mono JIT比.NET JIT“当前”编译器“新”(因为Mono“诞生”得更晚)。这可以证明为什么它支持SIMD。
发布于 2018-05-10 15:16:49
随着.Net Core2.0的出现,RyuJit现在是用于x86代码生成的jit,因此使x86能够利用SSE2用于一般浮点和SSE2/AVX2SIMD指令用于矢量。
在即将发布的.Net Core2.1中,您可以找到硬件内部功能的预览,这些内部功能提供了对x86和x64 CPU上(几乎)所有新指令的访问。
目前,我们似乎不太可能将.Net框架改为使用RyuJit生成x86代码。
https://stackoverflow.com/questions/29185986
复制相似问题