User Tools

Site Tools


自作クラスタ計算機:mpiによる並列計算

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
自作クラスタ計算機:mpiによる並列計算 [2020/03/02 15:04]
koudai [準備]
自作クラスタ計算機:mpiによる並列計算 [2020/03/02 16:48]
koudai [サンプルプログラム]
Line 19: Line 19:
     * 表示される行数が スレッド数 = CPU数 × CPUあたりのコア数 に対応します。通常は論理コア数と物理コア数は等しいですが、Hyper-Threadingが有効の場合は論理コア数が物理コア数の2倍になります。      * 表示される行数が スレッド数 = CPU数 × CPUあたりのコア数 に対応します。通常は論理コア数と物理コア数は等しいですが、Hyper-Threadingが有効の場合は論理コア数が物理コア数の2倍になります。 
       * Hyper-Threadingは見かけ上のコア数が2倍になる技術であり、並列計算プログラムで並列化効率が良い場合は逆に計算速度が著しく低下します。これは1つの物理コアに2つのジョブが投入されてしまうために発生します。       * Hyper-Threadingは見かけ上のコア数が2倍になる技術であり、並列計算プログラムで並列化効率が良い場合は逆に計算速度が著しく低下します。これは1つの物理コアに2つのジョブが投入されてしまうために発生します。
-      * 並列化されたスレッドごとの計算の重さのバランスが著しく悪く、1つのスレッドの計算が終わっているのに別のスレッドの計算は続いている、というような場合にのみ有効です。+      * スレッドごとの計算の重さのバランスが著しく悪く、1つのスレッドの計算が終わっているのに別のスレッドの計算は続いている、というような場合にのみ有効です。
       * よくわからない場合は、BIOSを使ってHyper-Threadingをオフにするか、MPIでのジョブ投入時に並列数を物理コア数以下にすることが望ましいです。       * よくわからない場合は、BIOSを使ってHyper-Threadingをオフにするか、MPIでのジョブ投入時に並列数を物理コア数以下にすることが望ましいです。
  
Line 34: Line 34:
 次のコードを使って説明します 次のコードを使って説明します
  
-<file - test.c>+<file - hello.c>
 #include <stdio.h> #include <stdio.h>
-#include <mpi.h>+#include "mpi.h"
  
-int main(int argc, char **argv) {+int main( int argc, char *argv[] ) 
 +{
     int     rank, size, len;     int     rank, size, len;
     char    name[MPI_MAX_PROCESSOR_NAME];     char    name[MPI_MAX_PROCESSOR_NAME];
Line 47: Line 48:
     MPI_Get_processor_name( name, &len );     MPI_Get_processor_name( name, &len );
     name[len] = '\0';     name[len] = '\0';
-    printf( "I am %d of %d from %s\n", rank, size, name ); +     
-    MPI_Barrier( MPI_COMM_WORLD ); +    printf( "Hello World! I am %d of %d from %s.\n", rank, size, name );
-    MPI_Finalize();+
  
 +    MPI_Finalize();
     return 0;     return 0;
 } }
Line 56: Line 57:
  
   * プログラムのコンパイルは次のようにします<code>   * プログラムのコンパイルは次のようにします<code>
-$ mpicc test.c+$ mpicc -o hello hello.c 
 +$ mpiicc -o hello hello.c   # Intel MPIを使用する場合
 </code> </code>
 +  * 管理ノード(4スレッド)で走らせてみます<code>
 +$ mpirun -n 4 hello
 +Hello World! I am 0 of 4 from kanri.
 +Hello World! I am 1 of 4 from kanri.
 +Hello World! I am 2 of 4 from kanri.
 +Hello World! I am 3 of 4 from kanri.
 +</code>
 +
 +
 +====== 参考 ======
 +
 +  * https://www.hpci-office.jp/pages/seminar_texts
  
自作クラスタ計算機/mpiによる並列計算.txt · Last modified: 2023/12/26 23:43 by koudai