我可以在 Xeon Phi (Knight's Landing) 处理器上编译 Go 程序吗?

Can I compile Go programs on Xeon Phi (Knight's Landing) processors?

我是一个爱好者,喜欢 运行 我自己的 Go 程序,随着 Xeon Phi 处理器的老化,它们也变得非常便宜。太便宜了,我可以用 <$1000

从 2015/16 年开始制造一台双插座机器

我想知道我是否可以 运行 对这些进行编程。据我所见,this thread says they won't run (and to try gccgo), but it says it won't run because it partially runs on an x87 ISA. Confusingly, in Go release notes they say they're dropping x87 support in 1.16,暗示它在过去得到支持。我在其他线程中看到所有程序都会 运行 在兼容层上,但这是一个非常慢的层,它只能访问 cpu 缓存的一小部分。

我觉得我越来越脱离我的本能;我想知道是否有人使用过 Xeon Phi 知道它是否会 运行 Go 代码?或者一般来说,在启动 Ubuntu(或 FreeBSD, something that I've seen done and is listed in motherboard specs)之后,哪些事情不会起作用,哪些会起作用?

感谢所有帮助!

是:

Xeon Phi is a series of x86 manycore processors designed and made by Intel. It is intended for use in supercomputers, servers, and high-end workstations. Its architecture allows use of standard programming languages and application programming interfaces (APIs) such as... See also https://en.wikipedia.org/wiki/Xeon_Phi

如果您可以在 x86 处理器上进行编译,那么您将能够在英特尔制造的特定 x86 处理器上进行编译。

至强不是安腾 :)

在这样的系统上你也可以编译 go 你只需要提供一个合适的 c 编译器...

是什么让您认为否则您将无法编译继续说... Atari 或 Arduino?

如果你能详细说明,也许我可以进一步改进我糟糕的答案。

你对骑士登陆的担忧是基于关于骑士角落的引述:

The Knight's Corner processor is based on an x86-64 foundation, yes, but it in fact has its own floating-point instruction set—no x87, no AVX, no SSE, no MMX... Oh, and then you can throw all that away when Knight's Landing (KNL) comes out.

“扔掉所有东西”是指所有的烦恼和不相容。 KNL 基于 Silvermont,并且完全兼容 x86-64(包括 x87、SSE 和 SSE2,这两种标准的 FP 数学方法)。它 支持 AVX-512F、AVX-512ER 和 a few other AVX-512 extensions,以及 AVX 和 AVX2 以及最高 SSE4.2 的 SSE。很像 Skylake 服务器 CPU,除了一组不同的 AVX-512 扩展。

这样做的目的正是为了解决您担心的问题:因此任何遗留二进制文件都可以 运行 在 KNL 上。为了从中获得良好的性能,您希望在执行繁重工作的循环中使用 AVX-512 向量对代码进行 运行 向量化,但 [=43] 其余部分的所有周围代码和其他程序=] 发行版或任何可以是 运行ning 使用任何 x87 and/or SSE 的普通沼泽标准代码。


Knight's Corner(第一代商业 Xeon Phi)在基于 P5-Pentium 的内核中有自己的 AVX-512 变体/前身,没有其他 FP 硬件。

Knight's Landing(第二代商业 Xeon Phi)基于 Silvermont,带有 AVX-512,是第一个可以充当“主机”处理器(可启动)而不仅仅是协处理器的处理器。

这种“主机”模式是包含足够的硬件来解码和执行 x87 和 SSE 的另一个原因:如果您运行在 KNL 上运行整个系统,您更有可能想要为非性能敏感任务执行一些遗留二进制文件,而不仅仅是专门为其编译的二进制文件。

它的 x87 性能不是很好:就像每 2 个时钟一个标量 fmul (https://agner.org/optimize)。与每时钟 2 个 SSE mulsd(0.5c recip 吞吐量)相比。其他 SSE/AVX 数学的相同 0.5c 吞吐量,包括 AVX-512 vfma132ps zmm 在一条指令中执行 16x 单精度融合乘加运算。

所以希望 Go 的编译器不会大量使用 x87。在 64 位模式(C 编译器及其数学库使用)中进行标量数学运算的正常方法是 SSE,在 XMM 寄存器中。 x86-64 C 编译器只对 long double.

这样的类型使用 x87