本システムは2020年3月31日で提供を終了しました。
2020年4月10日追記:緊急性と必要性を鑑み、昨年度3月31日でサービスを終了した本システムを再配備し、新型コロナウイルス感染症対策対応HPCI臨時公募課題に資源拠出することとしました。
2021年2月追記:新型コロナウイルス感染症対策対応HPCI臨時公募課題への提供を終了しました。
システム概要
大規模可視化対応PCクラスタ(VCC : PC Cluster for large-scale Visualization)は、総計69ノードが相互接続されたクラスタシステムです。66ノードはIntel Xeon E5-2670v2プロセッサ2基、64GBの主記憶容量を搭載しており、残り3ノードはIntel Xeon E5-2690v4 プロセッサ2基、64GBの主記憶容量を搭載しております。これら69ノードを、InfiniBand FDRでノード間接続し、クラスタを形成します。
また、本システムでは、システムハードウェア仮想化技術ExpEtherを導入しており、各ノードと、GPU資源、SSD、ディスクが接続された拡張I/Oノードを20GbpsのExpEtherネットワークで接続します。このノードと拡張I/Oノードの接続組み合わせを変更することで、利用者の利用要求に応じた大規模計算機システムを再構成することができる点を最大の特徴としています。
なお、本センターでは、2PBのディスクをNEC独自開発のNEC Scalable Technology File System (ScaTeFS) と呼ばれる高速・分散並列ファイルシステムで管理し、VCCを含む本センターの大規模計算機システムからアクセス可能な構成としています。
[注意!!] 本システムは、大規模可視化システムとの連動や、可視化用途にしか利用できないというわけではありません。シミュレーションや大規模計算用途にもご利用いただけます。
ExpEtherは、イーサネット(Ethernet)上でPCI Expressを仮想化する技術です。これにより、通常の計算機内の内部バスを、イーサネット上にスケールアップすることが可能となります。
ノード性能
各ノードは、200GFlopsの演算性能を有するIntel Xeon E5-2670v2プロセッサ2基、64GBの主記憶容量を搭載しています。Intel Xeon E5-2670v2プロセッサは、その動作周波数は2.5GHz、内部に10コアを搭載しており、プロセッサ単体の演算性能は200GFlopsです。そのため、ノード単体では合計20コア、ノード単体の演算性能は400GFlopsとなります。
ノード間の通信は、InfiniBand FDRで接続され、双方向56Gbpsの最大転送容量を提供します。
1ノード(VCC) | |
---|---|
プロセッサ(コア)数 | 2(20)個 |
主記憶容量 | 64GB |
ディスク容量 | 1TB |
演算性能 | 400GFlops |
2017年4月追記
構成の異なる3ノードを増設しました。(以下、増設ノードという)
増設ノードは、Intel Xeon E5-2690v4 プロセッサ2基、64GBの主記憶容量を搭載しています。Intel Xeon E5-2690v4プロセッサは、その動作周波数は3.5GHz(ターボブースト使用)、内部に14コアを搭載しており、プロセッサ単体の演算性能は784GFlopsです。そのため、ノード単体では合計28コア、ノード単体の演算性能は1568GFlopsとなります。
1ノード(VCC増設分) | |
---|---|
プロセッサ(コア)数 | 2(28)個 |
主記憶容量 | 64GB |
ディスク容量 | 1TB |
演算性能 | 1568GFlops |
システム性能
大規模可視化対応PCクラスタ(VCC)は、総計69ノードから構成されます。そのため、システム全体の理論性能値は下記のように導かれます。
大規模可視化対応PCクラスタ(VCC) | |
---|---|
プロセッサ(コア)数 | 138(1404)個 |
主記憶容量 | 4.278TB |
ディスク容量 | 62TB |
演算性能 | 31.104TFlops |
また、VCCは、各ノードに対して、システムハードウェア仮想化技術ExpEtherを用いることで、ユーザのニーズに応じて、下記の再構成可能資源を割り付けることができます。現在、再構成可能資源として提供している資源は下記の通りです。現在、再構成可能資源として提供している資源は下記の通りです。
1ノードに対してすべての再構成可能資源を割り付けることができるわけではなく、1ノードあたりに割り付けることのできる最大資源数が限られています。しかし、SSDとGPUといった再構成可能資源を組み合わせて割り付けることが可能です。
ご興味・関心のある方は下記までお問い合わせください。
system at cmc.osaka-u.ac.jp
再構成可能資源 | 資源数 | 性能値 |
---|---|---|
GPU:Nvidia Tesla K20 | 59枚 | 69.03TFlops |
SSD:ioDrive2(365GB) | 4枚 | 1.46TB |
Storage:PCIe SAS (36TB) | 9枚 | 324 TB |
ソフトウェア
本センターのVCCには、オペレーティングシステムとしてCent OS 6.4が採用されています。そのため、日常的にLinux系OS上でプログラム開発をされている方にとっては、利用、プログラムの移植・開発が非常に容易なシステムとなっています。
現在、本システムで利用できるソフトウェアとして下記を提供しています。
ソフトウェア |
---|
Intel C/C++/Fortran Compiler |
Intel MPI |
Intel MKL(BLAS、LAPACKをはじめとする密線形台数、スパース線形代数、統計関数、ScaLAPACK、クラスター FFT、高速フーリエ変換 (FFT)、最適化された LINPACK ベンチマーク、ベクトル・マス・ライブラリー) |
AVS/Express PCE |
AVS/Express MPE (Ver.8.1) |
Gaussian09 |
GROMACS |
OpenFOAM |
LAMMPS |
プログラミング言語 |
---|
C/C++(Intel Compiler/GNU Compiler) |
FORTRAN(Intel Compiler/GNU Compiler) |
Python |
Octave |
Julia |
なお、VCCへのジョブ管理には、Job ManipulatorとNQSIIを中核とした統合スケジューラを採用しています。スケジューラについては下記をご参照ください。
スケジューラについて
VCCでの性能チューニング
VCC上で性能チューニングを行う方法には、大別して、ノード内並列(共有メモリ並列)、ノード間並列(分散メモリ並列処理)の2種類があります。前者のノード内並列処理は、VCCのノード内に搭載された20個のCPUコアで計算負荷を分散する方法です。後者のノード間並列処理は、VCCの複数のノードに計算負荷を分散する方法です。
VCCで最大限の性能を引き出すためには、ノード内並列とノード間並列を併用する必要があります。VCCでは特に1ノードあたりに搭載されたコア数が多いため、主記憶容量64GBの範囲で計算が可能な場合には、ノード内並列で20コアを最大限に分散並列化が効果的ともいえます。
さらに、VCCでは再構成可能資源としてGPUやSSDが準備されていますので、GPUを用いた高速化を行ったり、SSDを用いてローカルディスクへのI/Oを高速化するなどの工夫によって、さらにチューニングを進めることもできます。
ノード内並列(共有メモリ並列処理)
この方法の特徴は、スカラ型CPU20コアが主記憶64GBのメモリ空間を”共有”することにあります。一般的に、分散並列計算においては、分散メモリ型のほうがプログラミング、チューニングが容易といわれています。VCCにおいても、この一般論があてはまり、ノード間並列よりもノード内並列のほうが容易であると言えます。
VCCでのノード内並列は、「OpenMP」、「スレッド」といった方法が代表的です。なお、一般的には、ノード間並列処理で用いられる「MPI」をノード内並列で用いることもできます。
OpenMPは共有メモリ並列プログラミングのための標準API(Application Programming Interface)です。文字通り、OpenMPは、共有メモリ型の計算機を対象としています。例えば、以下のように、ソースコードにコンパイラに対する指示行(Compiler Directive)を挿入してコンパイルするだけで、マルチスレッド実 行する実行モジュールが自動的に生成されるため、初学者が比較的簡単に着手できる分散並列化手法です。Fortran、CあるいはC++で利用できます。
例1
#pragma omp parallel
{
#pragma omp for
for(i =1; i < 1000; i=i+1) x[i] = y[i] + z[i]; }
例2
!$omp parallel
!$omp do
do i=1, 1000
x(i) = y(i) + z(i)
enddo
!$omp enddo
!$omp end parallel
OpenMPについては、書籍、インターネットから多くの情報を取得できますの で、より詳細な利用方法については、参考にされるとよいでしょう。
スレッド(thread)は軽量プロセスとよばれる、プロセスよりも細かい処理の単位です。プロセス単位でCPU利用を制御するよりもスレッド単位でCPU利用を制御するほうが、それらを実行するための情報の切り替えが高速に行われるため、計算処理が高速になることがあります。
ただし、VCCでスレッドを利用する際は、スケジューラにジョブを投入する際に、
#PBS -l cpunum_job=20
として、ノード内のCPUコアをすべて利用する宣言を行わなければなりません。
ノード間並列(分散メモリ並列処理)
この方法の特徴は、異なるノードの主記憶を利用する計算方法であるため、同一のメモリ空間を共有せず、分散配置された複数鵜の独立したメモリ空間を利用することにあります。このことが、分散メモリ並列処理が共有メモリ並列処理よりも難しい要因となっています。
VCCでのノード間並列は、「MPI(Message Passing Interface)」を利用する方法が代表的です。
Message Passing Interfaceはメッセージパッシング方式に基づく分散並列プ ゴラミングのためのライブラリ、API(Application Programming Interface)を規 定しています。MPIでは、分散メモリ並列処理環境上で発生しうるMPIプロセス間の通信パターンを想定し、あるプロセスがあるプロセスと通信をおこなう1対1通 信(例えば、MPI_Send, MPI_Recvなど。)、複数のプロセスが同時に関係した通信をおこなう集合通信(例えば、MPI_Bcast, MPI_Reduceなど。)に関する、直感的で分かりやすいAPIを提供します。MPIによる分散並列化では、開発者が複数のMPIプロセス間でのデータ移動、計算負荷分散を考慮しつつ、ソースコードを作成しなければならないため、初学者にはすこし敷居が高い分散並列化手法です。 しかし、計算機システムのハードウェアアーキテクチャや特性を理解してコー ディングを行うことができる中・上級者になれば、HPFよりも高性能なソースコードを開発することができるようになるでしょう。なお、今日では、MPIは事 実上標準(de facto standard)になっており、数多くの分散並列化を行うシミュレーションや解析処理で用いられています。また、今日の計算機アーキテクチャが”クラスタ化”していることも背景にありますので、MPIは習得しておくのがよいでしょう。
GPUを用いた高速化
VCCには、Nvidia Tesla K20というGPUが59枚再構成可能資源として準備されています。このGPUを、例えば、VCCを構成する4ノードに2個ずつ割り付け、8個のGPUを用いたアクセラレーションを行うことも可能です。本センターのGPUでの開発環境としては、CUDA(Compute Unified Device Architecture)が準備されています。
関心の有る方は、こちらより情報が取得できます。