Linpack性能テスト環境構築


SSHのパスワードなしアクセスを構築し、NFSとNIS後にLinpack性能テスト環境を構築することができる
クラウドコンピューティングシステムの重要な役割はユーザーにコンピューティング力を提供することであり、一つのシステムの全体的なコンピューティング力を評価する方法は統一的なテスト基準を評価として採用することであり、現在一つのシステムのコンピューティング力を評価する方法の中で最も有名なのはLinpackテストであり、世界で最も速い500台の巨大機システムの順位はこの基準を採用している.Linpackテスト技術を身につけることは、クラウドコンピューティング時代にクラウドシステムを評価する計算力にも重要な意義がある.この付録では、Linpackテスト技術について詳しく説明します.(mpi,GotoBlas,Linpackはnfs共有ディレクトリの下にインストールするか、すべてのノードがディレクトリを統一してインストールする)
1.Linpackインストール
インストールする前に、関連するソフトウェアとダウンロードアドレスは以下の通りです.
(1)Linuxプラットフォーム,最新安定カーネルのLinuxリリース版が最適で,Red hat,Centosなどを選択できる.
(2)MPICH 2は、http://www.mcs.anl.gov/research/projects/mp ich 2/downloads/indexまで並列に計算するソフトウェアである.php?s=downloads最新のソースパッケージをダウンロードします.
(3)Gotoblas,BLASライブラリ(Basic Linear Algebra Subprograms)はベクトルとマトリクス演算を実行するサブルーチンの集合であり,ここでは公認性能が最も優れているGotoblasを選択し,最新版はhttp://www.tacc.utexas.edu/tacc-projects/ダウンロード可能であり,登録が必要である.
(4)HPL,linpackでテストしたソフトウェアは,http://www.netlib.org/benchmark/hpl/で最新バージョンをダウンロードできる.
インストール方法と手順は以下のとおりです.
(1)MPICH 2を実装し,環境変数を配置することについて,本書の前に説明した.
(2)Linuxシステムに入り、rootユーザーを使用して、/rootでlinpackフォルダを作成し、ダウンロードしたGotoblasとHPLファイルをlinpackフォルダの下に解凍し、Gotoblasとhplに名前を変更することをお勧めします.
 

 
  1. #tar xvf GotoBLAS-*.tar.gz
  2. #mv GotoBLAS-*  ~/linpack/Gotoblas
  3. #tar xvf  hpl-*.tar.gz
  4. #mv hpl-*  ~/linpack/hpl

(3)Gotoblasをインストールします.
Gotoblasフォルダに入り、端末の下で実行します./quickbuild.64 bit(32ビットシステムの場合./quickbuild.31 bit)でクイックインストールを行います.もちろん、READMEの説明に従ってカスタムインストールを行うこともできます.正常にインストールすると、このディレクトリの下にlibgoto 2が生成されます.aとlibgoto 2.so 2つのファイル.
(4)HPLを取り付けます.
hplフォルダに入りsetupフォルダの下から自分のプラットフォームに近いMakeを抽出します.ファイルは、hplフォルダにコピーされます.例えば、私たちのプラットフォームはIntel xeonなので、Makeを選択しました.Linux_PII_Linuxオペレーティングシステム、PIIプラットフォーム、FBLASライブラリを採用するFBLAS.
コピーしたばかりのファイルを編集し、説明に従って各オプションを変更して、私たちのシステムの詳細は、Intel xeonプラットフォーム、mpich 2インストールディレクトリは/usr/local/mipch 2、hplとgotoblasインストールディレクトリは/root/linpackで、以下は私たちのプロファイルMakeです.Linux_xeon、修正が必要な部分に注釈をつけました.修正を参照してください.

 
  1. # - shell --------------------------------------------------------------
  2. # ----------------------------------------------------------------------
  3. #
  4. SHELL        = /bin/sh  
  5. #
  6. CD           = cd  
  7. CP           = cp  
  8. LN_S        = ln -s  
  9. MKDIR       = mkdir  
  10. RM          = /bin/rm -f  
  11. TOUCH       = touch  
  12. #
  13. # ----------------------------------------------------------------------
  14. # - Platform identifier ------------------------------------------------
  15. # ----------------------------------------------------------------------  
  16. #  
  17. ARCH         = Linux_xeon   //  
  18. #  
  19. # ----------------------------------------------------------------------  
  20. # - HPL Directory Structure / HPL library ------------------------------  
  21. # ----------------------------------------------------------------------  
  22. #  
  23. TOPdir       = $(HOME)/linpack/hpl   //  
  24. INCdir       = $(TOPdir)/include  
  25. BINdir       = $(TOPdir)/bin/$(ARCH)  
  26. LIBdir       = $(TOPdir)/lib/$(ARCH)  
  27. #  
  28. HPLlib       = $(LIBdir)/libhpl.a   
  29. #  
  30. # ----------------------------------------------------------------------  
  31. # - Message Passing library (MPI) --------------------------------------  
  32. # ----------------------------------------------------------------------  
  33. # MPinc tells the  C  compiler where to find the Message Passing library  
  34. # header files,  MPlib  is defined  to be the name of  the library to be  
  35. # used. The variable MPdir is only used for defining MPinc and MPlib.  
  36. #  
  37. MPdir        = /usr/local/mpich2     // mpich  
  38. MPinc        = -I$(MPdir)/include  
  39. MPlib        = $(MPdir)/lib/libmpich.a  
  40. #  
  41. # ----------------------------------------------------------------------  
  42. # - Linear Algebra library (BLAS or VSIPL) -----------------------------  
  43. # ----------------------------------------------------------------------  
  44. # LAinc tells the  C  compiler where to find the Linear Algebra  library  
  45. # header files,  LAlib  is defined  to be the name of  the library to be  
  46. # used. The variable LAdir is only used for defining LAinc and LAlib.  
  47. #  
  48. LAdir        = $(HOME)/linpack/GotoBLAS2     // gotoblas  
  49. LAinc        =  
  50. LAlib        = $(LAdir)/libgoto2.a $(LAdir)/libgoto2.so  //  
  51. #  
  52. # ----------------------------------------------------------------------  
  53. # - F77 / C interface --------------------------------------------------  
  54. # ----------------------------------------------------------------------  
  55. # You can skip this section  if and only if  you are not planning to use  
  56. # a  BLAS  library featuring a Fortran 77 interface.  Otherwise,  it  is  
  57. # necessary  to  fill out the  F2CDEFS  variable  with  the  appropriate  
  58. # options.  **One and only one**  option should be chosen in **each** of  
  59. # the 3 following categories:  
  60. #  
  61. # 1) name space (How C calls a Fortran 77 routine)  
  62. #  
  63. # -DAdd_              : all lower case and a suffixed underscore  (Suns,  
  64. #                       Intel, ...),                           [default]  
  65. # -DNoChange          : all lower case (IBM RS6000),  
  66. # -DUpCase            : all upper case (Cray),  
  67. # -DAdd__             : the FORTRAN compiler in use is f2c.  
  68. #  
  69. # 2) C and Fortran 77 integer mapping  
  70. #  
  71. # -DF77_INTEGER=int   : Fortran 77 INTEGER is a C int,         [default]  
  72. # -DF77_INTEGER=long  : Fortran 77 INTEGER is a C long,  
  73. # -DF77_INTEGER=short : Fortran 77 INTEGER is a C short.  
  74. #  
  75. # 3) Fortran 77 string handling  
  76. #  
  77. # -DStringSunStyle    : The string address is passed at the string loca-  
  78. #                           tion on the stack, and the string length is then  
  79. #                           passed as  an  F77_INTEGER  after  all  explicit  
  80. #                           stack arguments,                       [default]  
  81. # -DStringStructPtr   : The address  of  a  structure  is  passed  by  a  
  82. #                           Fortran 77  string,  and the structure is of the  
  83. #                           form: struct {char *cp; F77_INTEGER len;},  
  84. # -DStringStructVal   : A structure is passed by value for each  Fortran  
  85. #                           77 string,  and  the  structure is  of the form:  
  86. #                           struct {char *cp; F77_INTEGER len;},  
  87. # -DStringCrayStyle   : Special option for  Cray  machines,  which  uses  
  88. #                           Cray  fcd  (fortran  character  descriptor)  for  
  89. #                           interoperation.  
  90. #  
  91. F2CDEFS      = -DAdd__ -DF77_INTEGER= int  -DStringSunStyle  
  92. #  
  93. # ----------------------------------------------------------------------  
  94. # - HPL includes / libraries / specifics -------------------------------  
  95. # ----------------------------------------------------------------------  
  96. #  
  97. HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) $(LAinc) $(MPinc)  
  98. HPL_LIBS     = $(HPLlib) $(LAlib) $(MPlib)  
  99. #  
  100. # - Compile time options -----------------------------------------------  
  101. #  
  102. # -DHPL_COPY_L           force the copy of the panel L before bcast;  
  103. # -DHPL_CALL_CBLAS       call the cblas interface;  
  104. # -DHPL_CALL_VSIPL       call the vsip  library;  
  105. # -DHPL_DETAILED_TIMING  enable detailed timers;  
  106. #  
  107. # By default HPL will:  
  108. #    *) not copy L before broadcast,  
  109. #    *) call the BLAS Fortran 77 interface,  
  110. #    *) not display detailed timing information.  
  111. #  
  112. HPL_OPTS     =  
  113. #  
  114. # ----------------------------------------------------------------------  
  115. #  
  116. HPL_DEFS     = $(F2CDEFS) $(HPL_OPTS) $(HPL_INCLUDES)  
  117. #  
  118. # ----------------------------------------------------------------------  
  119. # - Compilers / linkers - Optimization flags ---------------------------  
  120. # ----------------------------------------------------------------------  
  121. #  
  122. CC           = /usr/local/mpich2/bin/mpicc   // gcc mpicc  
  123. CCNOOPT      = $(HPL_DEFS)  
  124. CCFLAGS      = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops -W -Wall  
  125. #  
  126. # On some platforms,  it is necessary  to use the Fortran linker to find  
  127. # the Fortran internals used in the BLAS library.  
  128. #  
  129. LINKER       = /usr/local/mpich2/bin/mpif77  // fortran mpif77  
  130. LINKFLAGS    = $(CCFLAGS)  
  131. #  
  132. ARCHIVER     = ar  
  133. ARFLAGS      = r  
  134. RANLIB       = echo  
  135. #  
  136. # -----------------------------/usr/local/mpich2/bin/mpicc---------------------

 
 
ファイルを修正した後、コンパイルします.

 
  1. #make arch=Linux_xeon

 
コンパイルが正常であればhpl/bin/Linux_xeonディレクトリの下に2つのファイルHPLが生成する.datとxhpl.HPL.datファイルはLinpackテストの最適化プロファイルであり、これはテストの結果にとって非常に重要であり、xhplは実行可能プログラムである.
クラスタテストの場合は、linpackディレクトリをクラスタ内の残りのノードと同じディレクトリにコピーします.
これで、インストールは完了します.簡単なテストができるようになりました.
hpl/bin/Linux_へxeonディレクトリ、mpdサービスを開始し、端末で以下のコマンドを実行してテストを開始します.

 
  1. #mpiexec -np 4 ./xhpl

 
 
 
 
複数のマシンの場合、machinefileなどのノードプロファイルを追加することもできます.フォーマットは次のとおりです.
host 1:1#Run 1 process on host 1、hostはドメイン名またはipアドレスであってもよい
host2:2    #Run 2 process on host2
............
 
通信は双方向であるため、すべてのhost上の/etc/hosts上で構成する必要があることに注意してください.
 
実行可能なコマンドは次のとおりです.
#mpiexec -n 4 -f machinefile ./xhpl
 
実行結果図
 
最後の列にGflops:4.937 e-03が表示されます
実際にはcat/proc/cpuinfoであるべきです
processor       : 0 vendor_id       : GenuineIntel cpu family      : 6 model           : 44 model name      : Intel(R) Xeon(R) CPU           E5649  @ 2.53GHz stepping        : 2 cpu MHz         : 2533.424 cache size      : 12288 KB physical id     : 0 siblings        : 2 core id         : 0 cpu cores       : 2 apicid          : 0 initial apicid  : 0 fpu             : yes fpu_exception   : yes cpuid level     : 11 wp              : yes flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt aes hypervisor lahf_lm arat bogomips        : 5066.84 clflush size    : 64 cache_alignment : 64 address sizes   : 40 bits physical, 48 bits virtual power management: processor       : 1 vendor_id       : GenuineIntel cpu family      : 6 model           : 44 model name      : Intel(R) Xeon(R) CPU           E5649  @ 2.53GHz stepping        : 2 cpu MHz         : 2533.424 cache size      : 12288 KB physical id     : 0 siblings        : 2 core id         : 1 cpu cores       : 2 apicid          : 1 initial apicid  : 1 fpu             : yes fpu_exception   : yes cpuid level     : 11 wp              : yes flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt aes hypervisor lahf_lm arat bogomips        : 5066.40 clflush size    : 64 cache_alignment : 64 address sizes   : 40 bits physical, 48 bits virtual
 
デュアルコアは、circleごとに2つのprocess(ハードウェア決定)を実行できるので、CPUを完全に利用する場合は2.53 GHz*4=10.12
だから飛び出したcpuは50%未満しか利用していません
 
フォーマットの編成がよくないので、原文は参照してください.
http://www.orientsky.com.cn/_new/Read.asp?ID=1495
http://www.orientsky.com.cn/_new/Read.asp?ID=1496