我很少有符合 SPARC V8 32 位架构的基准应用程序。我将它们用于 SPARC 32 位处理器的性能评估。然而,很少有应用程序在性能上达不到要求。我想使用 64 位 SPARC V9 架构(如 OpenSPARC T1/T2)测试性能。我的问题是为 32 位 SPARC V8 架构编译的二进制文件会在 SPARC V9 架构中运行而无需任何修改吗?两种架构中的二进制文件是否兼容?
2 回答
假设您使用的是相同的操作系统,尽管可能是较新的版本。好的。Solaris Sparc 非常二进制向后兼容。Sparc 架构的每个修订版都考虑到了这一点。
你应该记住的事情:
- Sparc v7 是最小的公分母,但实际上 Sparc v8 将覆盖 99% 的机器。
- Sparc v7 通常缺少硬件浮点,因此在大多数情况下它会更慢,尽管它有时被添加为加速器。
- Sparcv8 代码在某些情况下会比 Sparcv9 64 位代码更快,因为指针大小只有一半。
- Sparc v9 的最佳代码通常是 Sparc v8+,它基本上是 32 位代码,带有一些扩展,而大多数情况下只有 64 位机器才有。由于这个原因,大多数 64 位 Sparc 操作系统都将大多数代码作为 32 位和一些 64 位代码提供,在这些代码中,它需要访问更多的内存或仅 64 位的扩展以提高性能,例如基于软件的加密。
- 虽然 Sparc 的 ISA 是相当静态的,但性能却不是……例如 Sparc T1 Niagra CPU 对于任何单线程任务都非常慢,但是当您加载许多任务时,它们的运行就像冠军一样。然而,一些富士通 Sparc 芯片可能在每个领域的速度都与英特尔相媲美。此外,如果一些较旧的 Ultra 工作站在单线程或多线程方面比 Niagra T1/T2 快得多,我也不会感到惊讶。一旦你进入多线程领域,Niagra 风格的 CPU 就会开始发光。
所以请记住 Sparc v7、Sparc v8 和 Sparc v9 不是芯片架构,它们是指令集架构。Sparc 的性能主要取决于 CPU 架构的实现。来自 Oracle 的最新 Sparc 处理器比过去提高了单线程性能,这也是需要牢记的(即使它们会在你的钱包上烧出一个德克萨斯州大小的洞)。
如果您的性能不足,并且您正在设计基于 FPGA 的 CPU,请认真考虑改进您的 CPU 设计以提高吞吐量。
术语混乱...
SPARC 有点像 ARM。你有:
- SPARC 芯片架构(由 Sun Microsystems / 现在的 Oracle 开发)被命名为
sun4[a-z]
; 实际流片仅适用于sun4
,sun4c
,sun4d
,sun4m
,sun4u
andsun4v
这对应于ARM[1-9]
,ARM11
,Cortex-...
, 即 CPU 设计的演变。 - SPARC CPU 指令集是“版本化”的 -
sparcv7
,sparcv8
/sparcv8+
,sparcv9
; 其中一些是 32bit,sparcv9
是 64bit
这对应于ARMv[0-9]
指令集上的 , revs。 - 操作模式(SPARC 上的 32 位 / 64 位);
这里的 ARM 有 Thumb[2]、32 位 ARM 和 ARMv8/64 位。
在这种情况下,sparcv9
是 64 位指令集,因此需要 64 位操作模式;相同的二进制编码在 32 位/64 位模式下可能有不同的含义,因此sparcv7/8
代码不会在 64 位模式下运行。
尽管如此,sun4u
CPUsun4v
架构仍支持 32 位模式 - 带有sparcv8+
指令集和一些扩展,并且sparcv8
本身就是sparcv7
. Sun/Oracle 以其二进制向后兼容性而自豪;所有当前的 SPARC CPU 都应该毫无问题地运行现有的 32 位二进制代码。在这种情况下,我假设您在谈论 Solaris 二进制文件?