1

Ryujit 将支持 SSE 指令,但 Ryujit 仅适用于 64 位。

由于公司政策和预算(由于测试成本),大多数客户坚持使用 Windows 32 位操作系统。

我的理解是 Ryujit 是新的“针对 64 位优化的 JIT 方案”。

但是,如您所知,SSE 指令集在 32 位和 64 位上退出。

Mono.Simd 适用于 x86 或 Arm 32 位处理器。

(Java SIMD 调用似乎适用于 x86 和 64 位)。

我们的项目是针对任何 CPU 的,所以我很难告诉客户“请使用 Mono,因为他们有 SSE 支持,或者更换 CPU 和操作系统”。

为什么 MS .NET Framework for x86 不提供 SSE 命令支持而 Ryujit 可以?

(我不是 CPU 专家,但我希望 .NET 可以选择“在此命令上强制 SSE(如果可能)”)

4

3 回答 3

3

RyuJIT 基于与 x86 JIT 相同的代码库。虽然它目前仅适用于 x64,但它是一个现代编译器,将成为我们未来所有 JIT 编译器的基础:x86、ARM、MDIL 以及其他任何出现的东西。拥有单一代码库意味着 .NET 程序在体系结构之间更加一致 — 换句话说,您通常会获得 bug 对 bug 的兼容性。但拥有单一代码库也意味着我们可以更快地进行创新并更快地为您带来更多代码生成功能。

基本上,他们为 x86、x64、Itanium 和 ARM 构建了 JIT 编译器的四个独立实现。Itanium 基本上已经死了,但这仍然给了他们三个需要维护的实现,它们几乎没有共同点。

我相信其目的是在 .NET Framework JIT 足够稳定后将其替换为 RyuJIT。事实上,.NET Framework 4.6 包含 RyuJIT 作为 x64 编译器。

于 2015-05-01T08:56:07.660 回答
2

仔细想想,对我来说原因是:

A) Ryujit 是一个新的 JIT 编译器,从头开始构建,所以它可以做一些新奇的事情。他们可能将其限制为 64 位以使其更易于构建,并且因为 64 位上的“当前”JIT 有时比 32 位版本慢,因此在 64 位上“更必要”

B)新的和闪亮的,更容易包含新的功能/扩展点(例如 SIMD 功能)

C)微软似乎也不想用“旧”.NET编译器思考(我不认为他们在.NET 4.5中做了什么,他们将一些工作转移到后台线程,“思考太多” )。如果您仔细观察,您会发现他们从未向 CIL(通用中间语言)、.NET 的汇编语言(他们对 GC 和 .NET 库进行了更改,但它们是不同的)添加了新的操作码“事物”),并且显然要添加他们需要进行更改的 SIMD 功能

D) Mono JIT 比 .NET JIT“当前”编译器“更新”(因为 Mono 是后来“诞生”的)。这可以证明它为什么支持 SIMD。

于 2015-03-21T18:14:39.720 回答
1

随着 .Net Core 2.0 的出现,RyuJit 现在是用于 x86 代码生成的 jit,因此使 x86 能够利用 SSE2 来生成通用浮点数和 SSE2/AVX2 SIMD 指令来生成 Vector。

在即将发布的 .Net Core 2.1 中,您可以找到硬件内在函数的预览,这些内在函数提供对(几乎)x86 和 x64 CPU 上的全部新指令的访问。

目前,我们似乎不太可能将 .Net Framework 更改为使用 RyuJit 进行 x86 代码生成。

于 2018-05-10T07:16:49.187 回答