HOME > FAQ > 計算サービス

計算サービス

質問

 

回答

  • 計算サーバで並列化プログラミングを行いたいと考えています。
    プログラムを並列化する上での開発支援などはしてもらえませんか?

  • スーパーコンピュータシステムでは、より多くの方々に利用していただけるように、計算サーバ上にさまざまなツールをあらかじめ用意しています。
    並列プログラミングにつきましては、計算サーバに、自動並列化コンパイラ, プログラムを並列化コードへ自動変換する並列化支援ツール, プログラムの性能解析ツール, 各種デバッグツールがインストールされており、ユーザーは自由にそれらのツールを利用することができます。 積極的な開発支援をすることは難しいですが、並列化手法に関するオンラインマニュアルの提供や、外部講師による講習会なども適宜企画していますので、ぜひご活用ください。

  • 計算サーバにおけるログインシェルの変更は可能でしょうか。

  • 現在は csh もしくは tcsh のみの変更が可能です。計算サーバにログイン後、chsh コマンドにて変更してください。以下に例を示します。

    ユーザ名 user の場合
    % chsh
    Changing login shell for user.
    Password:                      ←  ログインパスワードを入力
    Enter login(LDAP) password:  ←  同じくログインパスワードを入力
    Enter the new value, or press return for the default.
            Login Shell [/bin/csh]: /usr/local/bin/tcsh ←  変更したいログインシェルの絶対パスを入力
    Shell changed.
    

    なお通常の運用ではログインしない計算サーバにおいても、同様にここで設定したログインシェルへ変更されますが、変更には数分から10分程度かかります。
    以下に、シェルとその絶対パスを示します。下記以外のシェル(bash,kshやzshなど)には変更しないでください。必要な設定がなされませんのでアプリケーションが正しく実行できなくなります。

    ログインシェル絶対パス
    csh/bin/csh
    tcsh/usr/local/bin/tcsh
  • MPIジョブを実行すると以下のようなエラーメッセージが出力され、ジョブの実行ができません。どうしたらよいのでしょうか。

    % mpirun -np 4 ./a.out
    mmap failed (memmap_base) for 2830980 pages (46382776320 bytes)
    Killed

  • このメッセージは、仮想メモリのサイズが足りないために出力されるメッセージです。この例では、46382776320 bytes (およそ46GB) の仮想メモリが確保できなかったことを示しています。この問題を解決する方法としては、
    1) 環境変数 MPI_MEMMAP_OFF を設定する
    2) 実行CPU数を減らして必要な仮想メモリのサイズを減らす
    3) limit コマンドでスタックサイズの上限値を減らす
    4) limit コマンドで仮想メモリサイズの上限値を増やす
    5) バッチジョブとして実行する
    といういくつかの方法があります。
    方法1の場合には、

    % setenv MPI_MEMMAP_OFF 1

    をジョブ実行前に設定します。
    方法3の場合には、

    % limit stacksize 8192

    と実行してデフォルトのスタックサイズを減らすことができます。
    方法4の場合には、

    % limit vmemoryuse 40000megabytes 

    と実行して増やすことができます。
    方法5の場合には

    % qstat -Qf <Queue>

    のコマンドを実行し、resources_max.vmem の数値を参照することで、仮想メモリ(vmem)の上限値を確認することができますので、必要な仮想メモリが確保できるキューにてジョブを実行してください。