ARM 与 x86 的浮点运算

标签 arm system hardware numerical-methods scientific-computing

如果我问的是非常明显的问题,我深表歉意。

假设您正在设计一个浮点计算量很大的软件,并且您可以购买自己的硬件。假设您出于灵活性和易于代码维护的原因排除了 FPGA 和 GPU。

进一步假设您在软件中具有不错的并行度。

很长一段时间以来,这意味着您一直在使用 x86。

我正在寻找一个客观的基准测试来判断现代 ARM CPU 是否在同一个范围内。也许我的搜索有误,但我发现很难找到值得信赖的基准测试(例如 LAPACK 或某些物理模拟)。我知道性能显然取决于任务,并且编译器优化目前可能比 x86 更好,但在这个阶段,我真的希望比较数量级。

此外,我觉得奇怪的是,您不能真正购买类似于树莓派 PI 的东西,但它拥有 8-64 个现代内核,可与连接到单个总线的最新智能手机(如最新的 Snapdragon)相媲美。如果我弄错了,请纠正我,但这样的解决方案有朝一日可能会超越 FLOPS/$ 类别中的 GPU,而且更加灵活。

最佳答案

以下是我通过 Linux、Raspberry Pi 和 Android 设备对 PC 进行的 Linpack 基准测试结果(我有更多通过 Windows 获得的结果)。这些是基于我的 C/C++ 1996 转换的个人电脑,它得到了原作者 Jack Dongarra 的批准,并且可以通过以下方式获得。

http://www.netlib.no/netlib/benchmark/linpack-pc.c

这是一个 100 阶的矩阵, double 。下面的结果包括一些单精度。 Dongarra 在此和 super 计算机品种方面的历史性成果如下:

http://netlib.org/benchmark/performance.pdf

这只是一个基准,而其他基准则给出了不同的故事。您可以从我的网站获得更多信息,包括源代码和 MP 品种,(免费且无广告):

http://www.roylongbottom.org.uk/

Linux 32/64 Bit Results

Double Precision 100x100 compiled at 32 and 64 bits 

                                   Opt    No opt
CPU                      MHz    MFLOPS    MFLOPS

Atom N455     32b  Ub   1666       196        94
Atom N455     64b  Ub   1666       226        89

Core 2 Mob    32b  Ub   1830       983       307

Athlon 64     32b  Ub   2211       936       231
Athlon 64     64b  Ub   2211      1118       221

Core 2 Duo    32b  Ub   2400      1288       404
Core 2 Duo    64b  Ub   2400      1577       378

Phenom II     32b  Ub   3000      1464       411
Phenom II     64b  Ub   3000      1887       411
Phenom II     64b  Fe   3000      1872       407

Core i7 930   64b  Ub   ****      2265       511

Core i7 4820K 32b  Ub   $$$1      2534       988
Core i7 4820K 64b  Ub   $$$1      3672       900
Core i7 4820K AVX  Ub   $$$12     5413       935

  Ub = Ubuntu Linux,   Fe = Fedora Linux        
 ****  Rated as 2800 MHz but running at up to   
       3066 MHz using Turbo Boost               
 $$$1  Rated as 3700 MHz but running at up to   
       3900 MHz, using Turbo Boost              
 $$$12 As $$$1, but compiled with GCC 4.8.2 that
       produces AVX SIMD insructions.               

############################################### ####
      Android and Raspberry Pi Versions

Double Precision and Single Precision (SP) 100x100

                               v7/v5       v5 
CPU          MHz   Android    MFLOPS    MFLOPS

ARM 926EJ    800       2.2       5.7       5.6
ARM v7-A8    800     2.3.5      80.2          
ARM v7-A9    800     2.3.4     101.4      10.6
ARM v7-A9   1300a    4.1.2     151.1      17.1
ARM v7-A9   1500     4.0.3     171.4          
ARM v7-A9   1500a    4.0.3     155.5      16.9
ARM v7-A9   1400     4.0.4     184.4      19.9
ARM v7-A9   1600     4.0.3     196.5          
ARM v7-A15  2000b    4.2.2     459.2      28.8

                               v7 SP     Java 
CPU          MHz   Android    MFLOPS    MFLOPS

ARM 926EJ    800       2.2       9.6       2.3
ARM v7-A9    800     2.3.4     129.1      33.3
ARM v7-A9   1300a    4.1.2     201.3      56.4
ARM v7-A9   1500a    4.0.3     204.6      56.9
ARM v7-A9   1400     4.0.4     235.5      57.0
ARM v7-A15  2000b    4.2.2     803.0     143.1


Atom   Ax86 1666     2.2.1                15.7
Core 2 Ax86 2400     2.2.1                53.3

Raspberry Pi                    DP        SP  
CPU          MHz     Linux    MFLOPS    MFLOPS

ARM  1176    700     3.6.11     42        58  
ARM  1176   1000     3.6.11     68        88  

                              NEON SP         
CPU          MHz   Android    MFLOPS          

ARM v7-A9    800     2.3.4     255.8          
ARM v7-A9   1300a    4.1.2     376.0          
ARM v7-A9   1500a    4.0.3     382.5          
ARM v7-A9   1400     4.0.4     454.2          
ARM v7-A15  2000b    4.2.2    1334.9        

关于ARM 与 x86 的浮点运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26654638/

相关文章:

c - 除以零不会导致 Nvidia Jetson 运行时异常

php - 评论系统 : secure inserting into database & reading from database

C# WMI 权限

linux - 将自定义硬件与一个输入接口(interface)以在/proc 中某处进行切换的最简单方法是什么?

amazon-web-services - ELK 在 AWS 上的良好设置

arduino - DMA 是在微处理器上接收高速数字数据的正确方法吗?

android - NDK : how to build a lib, 以便应用程序可以在 arm(s)、x86 等上运行?

dart - 在 flutter release 模式下,一个快照中的 native 代码如何在 mulity arch cpu 中运行

使用结构体与C程序联系经理

c# - 将即插即用设备映射到 PCI 插槽 ID,C#