Saturday, December 25, 2004

PiBench/HuiBench

PiBench เป็นโปรแกรมที่เขียนขึ้นมาเล่นๆเพื่อทดสอบความเร็วในการคำนวณเลขทศนิยม (Floating Point) บนเครื่องต่างๆในแลบเมื่อหลายปีก่อน

ตั้งใจให้เป็นลูปเล็กๆ คอมไพล์แล้วทั้งโปรแกรมจะได้อยู่ใน Cache อยากเปรียบเทียบความสามารถในการคำนวณล้วนๆของแต่ละ CPU คงเอาไปใช้อ้างอิงกับการใช้งานจริงไม่ได้

เคยเขียนถึงใน TLWG เลยมีสมาชิกร่วมส่งผลบนเครื่องต่างๆเข้ามามากมาย ตารางยาวขึ้นเรื่อยๆ เดิมเก็บผลไว้บน thaigate คิดว่าย้ายมาบน BLOG น่าจะเก็บได้นานกว่า

เดี๋ยวนี้ CPU เริ่มเร็วขึ้นจนโปรแกรมเสร็จในพริบตา ชักกลัวว่า Overhead ในการ โหลด/เริ่ม/หยุด โปรแกรมจะมีผลมากขึ้น อีกไม่นานคงต้องเพิ่มศูนย์อีกสักตัวในลูปเป็น 300 ล้าน

Cray C90 ครองแชมป์มานานมากแล้ว (ตั้งแต่เริ่มเก็บเมื่อ 6-7 ปีก่อน) สมกับเป็น Vector Super Computer วิ่งที่ความเร็วแค่ 250MHz ผ่านมาหลายปี Opteron248 (2.2GHz) เพิ่งจะเริ่มทำคะแนนไล่ทัน แต่ก็เร็วแค่โปรแกรมนี้แหละที่ลูปหลักทำ Vectorize ได้เต็มๆ และงานหลักคือคำนวณเลขทศนิยม เคยเอามารันโปรแกรม Simulation ทั่วไป อืดเป็นเต่า

ถ้าแก้โปรแกรมเพิ่มลูปไปคงไม่มีเครื่องให้ลองแล้ว (ศูนย์คอมฯเลิกใช้แล้ว)

ตัวโปรแกรม

#include <stdio.h>

main()
{
  int i,j;
  int a=0;
  double x=0;
  for(i=1;i<30000000;i+=4) { 
    x += 1.0/i - 1.0/(i+2); 
  } 
  printf("Pi %lf\n", x * 4.0); 
}

วิธีทดสอบ

$ gcc -O2 -o test test.c   // GCC -O2

or
$ gcc -O3 -o test test.c   // GCC -O3

or
$ cc -fast -o test test.c  // SUN's cc

or
$ cc -n32 -Ofast -o test test.c  // SGI's cc

or on Pentium4 Linux machine using ICC
$ icc -O3 -axW -tpp7 -mcpu=pentium4 -march=pentium4 -o test test.c

$ time test      
หรืออาจกำหนดตัวเลือกอื่นๆพิเศษ (-funroll-loops) ตามในช่อง Model/Note

Results

Machine      OS          CPU              Compiler      Time  Model/Note
--------------------------------------------------------------------------
Yamabiko     SunOS413    Sparc/25         GCC          24.45  Sparc IPC 
Hinata       SunOS4132   Sparc            GCC          13.05  Sparc II
Gio's Home   Linux       AMD5x86/133      GCC          11.41  
Pruet's      Linux2034   Pentium/75       GCC          10.04  HP/Vectra 
Pruet's      Linux2036   Pentium/90       GCC           8.27  AST 
Pubnet       Linux       Pentium/100      GCC           7.010 Micron
NSIAS        Solaris     Sparc/110        GCC           6.6   Sparc 5
PostOffice   LinuxSparc  Sparc/110        GCC           6.530 Sparc 5
Gateway      Linux       Pentium/120      GCC           5.800 Gateway
Hagane       SunOS413    Sparc/?          GCC           5.58  Sparc 10
Miffy        Solaris7    SuperSparcII/75  GCC           4.22  Sparc 20
Vulab        IRIX6.2     R4400/200        GCC           3.392 SGI Indigo2
Ott          Linux21124  PPro/200         GCC           3.33  Ott PC
Vumedia      IRIX5.3     R4400/200 x7     GCC           3.228 SGI Onyx
Thaigate     Solaris251  U-SparcI/143     GCC           3.17  Ultra I
List         Linux       PPro/200         GCC           2.930 Micron Tower
Vulab        IRIX6.2     R4400/200        CC            2.755 SGI Indigo2
Vumedia      IRIX5.3     R4400/200 x7     CC            2.713 SGI Onyx
Banpot's     Linux2035   PentiumII/233    GCC 2723      2.38  DELL dimension xps
Micron       BeOS R4     PentiumII/266    GCC 2.9-beos  2.225 Micron XRU
Pruet's      Linux2034   PentiumII/266    GCC           2.19  HP/NetServerE
Vuapp        Solaris26   PentiumII/266    GCC           2.14  Dell Poweredge 2200
Test         Linux2036   PentiumII/266    GCC           2.070 Dell Poweredge 2200
Micron       Linux2036   PentiumII/266    GCC           2.070 Micron XRU
Pruet's      Linux220p4  Celeron/300      GCC           1.94  HomeMade 
Owl          Linux2032   PentiumII/300    GCC 2723      1.870 Dell Something
Nu+          FreeBSD     PentiumII/266    GCC           1.795 HomeMade
Kyoto        FreeBSD225  PentiumII/266    GCC           1.793 Dell Poweredge 2200
Suisho       DigitalUnix Alpha5/333       GCC           1.776 AlphaStation600 5/333
Hide         OS X 10.3   PowerPC G4 400   GCC 3.3       1.75  15" PowerBook G4 Mercury/TiBook
Pearl        BeOS R4     PentiumII/350    GCC 2.9-beos  1.737 Gateway
Ru           IRIX 6.4    R10000/200 x32   GCC           1.665 SGI Origin2000
Nu+          FreeBSD     PentiumII/300    GCC           1.59  HomeMade
Fubuki       Solaris26   U-SparcII/300 x2 GCC           1.57  Ultra II
Hide         OS X 10.3   PowerPC G4 400   GCC 3.3       1.55  15" PowerBook G4 Mercury/TiBook -funroll-loops
Bamboo       Solaris26   U-SparcII/300 x2 GCC           1.52  Ultra 450
Celeron      Linux223    Celeron/400      GCC           1.47  Dell Dimension V
Hui's        OS X 10.2.8 PowerPC G3 500   GCC 3.1       1.37  PowerBook G3-500 Pismo
New3D        WinNT4.0    PentiumII/450    GNU-Win32 gcc 1.332 Micron 
Nu+Home      Linux       PentiumII/450    GCC           1.30  Gateway
Hui's        OS X 10.2.8 PowerPC G3 500   GCC 3.1       1.27  PowerBook G3-500 Pismo -funroll-loops
Hui Crusoe   Linux       CrusoeTM5400/600 GCC 332       1.18  SONY PCG-C1VR/BP
Precision    Linux223    PentiumIII/500x2 GCC           1.17  Dell 410
Bamboo       Solaris26   U-SparcII/300 x2 CC            1.12  Ultra 450
Nu+          FreeBSD     PentiumII/450    GCC 2721      1.10  HomeMade 256MB
CPUs         DigitalUnix Alpha5/440 x14   GCC           1.06  AlphaServer8400 5/440 
INET         Linux       PentiumIII/600   GCC           0.97  DELL OptiPlex GX110
Ott          DigitalUnix Alpha5/466 x2    CC            0.94  AlphaServer4100 5/466
SISSRV       IRIX 6.5    R12000/400 x32   GCC/CC        0.79  SGI Origin 3000
CPUs         DigitalUnix Alpha5/440 x14   CC            0.72  AlphaServer8400 5/440 
Fon's        OS X 10.3   PowerPC G4 1.33  GCC           0.67  12" Mac PowerBook
POSTOFFICE   Linux       PentiumIII/1000  GCC           0.57  DELL Dimension 4100
Fon's        OS X 10.3   PowerPC G4 1.33  GCC           0.53  12" Mac PowerBook -funroll-loops
Omega        Linux 2.4   PentiumIII/1333  GCC 3.2       0.43  TOSHIBA TabletPC 3500 SS
WebLS        Linux 2.4   Pentium4/2400    GCC 2.95.4    0.270 DELL Dual Xeon 2.40GHz
WebLS        Linux 2.4   Pentium4/2400    ICC 7.1       0.216 DELL Dual Xeon 2.40GHz
Samurai      Linux 2.6   Pentium4 540/3.2 GCC 3.3.5     0.207 Hui-Built Machine
Fon's        Linux 2.6   Pentium4/3600F   GCC 3.3.4     0.192 HP xw4200(Gentoo Linux)
Samurai      Linux 2.6   Pentium4 540/3.2 ICC 8.1       0.164 Hui-Built:  icc -O3 -axW
Fon's        Linux 2.6   Opteron248/2.2x2 GCC 3.4       0.122 HP-DL145 Dual Opteron248 (2.2GHz)
C90          UNICOS902   C90/250MHz x12   CC            0.12  Cray C916/12256 2GB
-------------------------------------------------------------      

หมายเหตุ

  • Only one CPU is used (single process) on all SMP machines listed above.
  • Native cc can generate considerably faster code than GCC on many platforms.
  • On x86 platforms, execution time on FreeBSD is shorter than on Linux.

No comments: