首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么.NET will不支持32位SSE (而ryujit 64位可以),而Mono同时支持32位和64位?

为什么.NET will不支持32位SSE (而ryujit 64位可以),而Mono同时支持32位和64位?
EN

Stack Overflow用户
提问于 2015-03-22 01:50:26
回答 3查看 862关注 0票数 1

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(如果可能的话)“)

EN

回答 3

Stack Overflow用户

发布于 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编译器。

票数 3
EN

Stack Overflow用户

发布于 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。

票数 2
EN

Stack Overflow用户

发布于 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代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29185986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档