pbsはじめにはじめにいくつかの概念や用語について説明します。スーパーコンピュータとはスーパーコンピュータは厳密の定義は存在しません。抽象的な概念として「大規模な計算機」と私たちは認識しているかと思いますが、そのようなものです。スーパーコンピュータはメモリの構造によって二つに大きく分けることができます。共有メモリ型はすべてのノードと呼ばれる計算実行機単位でメモリは共有メモリされていますが、分散メモリ型はMPIをはじめとするメッセージパッシング方式によってメモリを局所的にもっています。局所的にもっているものの、たくさんのプロセスやスレッドを抱えるケースが多いので、計算機クラスタでは一般的に分散メモリですが、ノード単位でみると共有メモリ型ということができます。プロセス、スレッドについてプロセスとスレッドの違いというものはメモリを意識するかしないかにあり、CPU(コア)とは直接的には関係ありません。プロセス、スレッドはソフトウェアで、CPUはハードウェアなのですから。プログラムの実行単位でメモリを確保されるものをプロセスと呼びます。Terminalで打つすべてのものも一つ一つがプロセスです。プロセスは以下のように確認します。-l...ここで主なオプションは以下の通りです。実行中のプロセスを表示またプロセスに対して、スレッドというCPUの割り当て実行単位があり、プロセスは一つ以上のスレッドを保有しています。System(PBS)NASA向けに開発されたフリーのJMSでありUNIX環境で動作します。PBSは4つの主要なコンポーネントで構成されています。バッジジョブの作成、受理や、実際にバッジジョブを実行する。一つのJobサーバにつき、一つ以上のキューを管理している。実際にジョブを実行するデーモン。どのジョブを、どこで実行させるかを管理するデーモン。バージョン現在、使用できるバージョンは以下の通りである。Engineeringによって提供されているPBSでオープンソースと商用利用のデゥアルライセンスである。実行ファイル実行ファイルは多くはシェルスクリプト(bashやzsh)で書かれます。大規模な計算機クラスタではユーザーが対話式にリソースを使うことはなく、キューイングによって大規模なプログラムを実行します。この手順を「バッジ処理」といって、タスクそのものを「バッジジョブ」といいます。この時に、タスクが記述されたファイルを「バッジスクリプト」と呼びます。シェルスクリプトとはバッジスクリプトと、ほぼ同じといってもいいくらいなので最初に一般的なシェルスクリプトを軽く説明します。シェルスクリプトとは、オペレーティングシステムのシェル向けに書かれたスクリプトのことです。基礎としては以下のことをまず覚えれば大丈夫です。perlのスクリプトをスーパーコンピューターなどの計算機クラスタで実行したければ以下のように、シェルスクリプト内で実行するのが一般的です。以下のような実行ファイルhogehoges.shがあったとします。hogehoge.plバッジスクリプトとはバッジスクリプトとは、バッジジョブを記述したものです。基本的には、先ほどのシェルスクリプトと全く同じです。以下のようなものが、バッジファイルです。hogehoge.sh書き方としてはシェルスクリプトと全く変わりません。クラスタ全体の全ノードの状態を表示する以下のようにすると、全ノードの空き状況がわかります。バッジジョブをサブミットする先ほどのようなファイルをキューイングシステムにサブミットするには以下のようにする必要があります。hogehoge.plまた、オプションは以下の通りです。todays-queue計算リソースの指定方法-lで計算リソースを指定したと思います。実際に何を指定するかを言うと以下の表が主な指定項目です。使用したい全ノードのコア数の指定。使用したいノードを指定。ジョブ状況の確認qstatコマンドを実行すると、実行中や実行待ちのジョブ状態を表示します。オプションは以下の通りです。バッジジョブの結果確認[ジョブスクリプト].o[ジョブID]のフォーマットで結果(標準出力)が表示されます。Interface(MPI)これは、並列コンピューティングを行うための標準化された規格です。プログラマに大きな負担がかかるというデメリットもあります。mpirunmpirunは初期のMPI標準(MPI-1)を使われている。mpiexecmpiexecとは、MPI-2といせ定められているmpirunの進化版である。mpirunでコマンドラインうオプションが多種多様になっていたのを、最大公約数のように一つに共通オプションをまとめたものとなっています。並列処理と並行処理の違い並列処理は完全にCPUがそれぞれスレッドをもって実行するのに対して、並行処理はCPUより数の多いスレッドを、あたかも並行して同時にこなしているようにOSがスケジュールするような処理なので、これらは留意するべきです。どのように処理をしているかという「実行状態」が異なるということができます。プロセッサ(命令を実行するもの)の基本というものはランダムアクセスマシン(RAM)です。一方で、並列アルコリズムの設計には並列ランダムアクセスマシン(PRAM)を使用します。CPU間でメモリを共有して、スレッドは複数のCPU上で実行されるもので、これが逐次処理だのRAMとは異なります。台数効果もっとも性能評価として使われるものです。台数を増やすと、どのように処理時間が変わるかです。仮に、台数倍以上に処理が早くなったときは、スーパーリニア・スピードアップといいます。この時は、並列化によってキャッシュヒット率が上がっていることが、一番有力な考えですが、要因は他にもたくさん考えられるので注意してください。強スケーリングと弱スケーリング強スケーリングとは、台数効果を見る方法で、全体の処理のサイズを固定し、並列数を増やして台数効果を見る方法です。並列数を増やすと1プロセスあたりの問題サイズが減っていくので、並列数が増加した時に演算時間より通信時間が占める割合が高くなっていきます。そのため、通信性能やアルゴリズムの評価をする時に使われることが多い。弱スケーリングとは、1プロセスあたりのサイズを固定して、並列数を増加し、台数効果を見る方法です。並列数が増加しても1プロセスの問題サイズは固定なので、通信時間の割合が減っていくことが期待されます。これは理想的な台数効果がみこめるときに、プログラムや通信ネットワークが正しく動作しているかを見極めたい時に使うことが多い。何もかも並列化ができれば台数効果は増やした台数になるでしょう。実際には並列化ができないアルゴリズムもあるので、並列化効率はいったいプログラムのどれくらいが並列化によって高速化できているのかの割合を示します。Kubernetesのいろは。2018の14日目の...2018-12-23Concourseで継続的デリバリー。»プロフィール学生エンジニア。忘れてしまうので備忘録です。flaskでServerlessにホストするTelepresence概論スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。