user/pages/07.run/03.resource/docs.ja.md
452be89a
 ---
 title: 計算資源の割り当て
 taxonomy:
     category:
         - docs
 external_links:
     process: true
     title: false
     no_follow: true
     target: _blank
     mode: active
 ---
 
 [toc]
 
 
 ## キューに割り当てられる計算資源{#resources}
 
 スーパーコンピュータシステムでは、お申し込み頂いたサービスコースごとにキューを用意しており、そのキューを指定してジョブを実行いただけます。
 
 すべてのキューには、最小資源量、標準資源量、最大資源量の3つの制限値が設定されており、キューで利用できる計算資源の量が決められています。
 
 制限項目   |               意味              
 :-------:|:------------------------------:
  最小資源量(Rmin) |       キューに対して常に確保されるCPUコア数     
  標準資源量(Rstd) |   キューに投入されたジョブが利用できるCPUコア数の最大値 
  最大資源量(Rmax) |      キュー全体で利用できるCPUコア数の最大値     
 
 
 ### 最小資源量{#rmin}
 
 最小資源量は、キューに対して常に確保されるCPUコア数のことで、最低保証資源量ともよばれます。  
 システム定常稼働時には、システムの混雑状況によらず、最小資源量として設定された数のCPUコアを利用できることが保証されます。
 
 
 ### 標準資源量{#rstd}
 
 標準資源量は、キューに投入されたジョブが利用できるCPUコア数の最大値です。  
 ジョブ投入時に --rsc オプションを使うことでジョブに割り当てるリソース量を指定できますが、標準資源量を超えるリソース量を要求した場合にはエラーが発生します。
 
 
 ```nohighlight
 $ sbatch --rsc p=400 ./jobscript.sh
 Too many processors requested. Job not submitted.
 ```
 
 ### 最大資源量{#rmax}
 
 最大資源量は、キュー全体で利用できるCPUコア数の最大値です。  
 システムの資源に空きがある場合、キューに投入されたジョブは順次実行され、複数のジョブが同時に実行状態となることもあります。しかし、キュー内のすべてのジョブの使用コア数の総和が最大資源量を超えることはできません。キュー全体で利用しているCPUコア数が最大資源量の値に達すると、たとえシステムの資源に空きがあったとしても、ジョブは実行待ち状態となります。
 
 <!--
 ### 設定値の確認方法{#view}
 
 キューに設定された各制限値は **qgroup** コマンドで確認できます。  
 表示された結果の MIN/ STD/ MAX列の値が、それぞれ、最小資源量/ 標準資源量/ 最大資源量に対応します。
 
 
 ```nohighlight
 $ qgroup
  QUEUE    SYS |   RUN  PEND OTHER | ALLOC ( MIN/ STD/ MAX) | READY
 ----------------------------------------------------------------
  gr19999a  A  |     1     0     0 |    64 (  68/ 136/ 272) | 64
  gr19999a  A  |     0     0     0 |     0 ( 136/ 272/ 544) | 192
 ```
 -->
 
 ## 計算資源の初期値と--rscオプションで指定可能な最大値{#resouce}
495abba5
 | オプション | 説明 | システムA<br>初期値|<br>最大値|システムB<br>初期値 | <br>最大値 | システムC<br>初期値 | <br>最大値 | 
452be89a
 | --- | --- | --- | --- |
495abba5
 | p | プロセス数                               | 1     |  [標準資源量](/run/resource#group)<br>(c=1の場合)| 1     |  [標準資源量](/run/resource#group)<br>(c=1の場合) | 1      |  [標準資源量](/run/resource#group)<br>(c=1の場合)   |
 | t | プロセスあたりのスレッド数               | 1     | 112(224)| 1     | 112(224)   | 1      | 112(224)   | 
 | c | プロセスあたりのコア数                   | 1     | 112| 1     | 112   | 1      | 112   |
4c2e5614
 | m | プロセスあたりのメモリ量<br>(単位:M, G) | 1142M | 120G | 4571M | 500G | 18392M | 2011G | 
495abba5
 
 <br>
 
 | オプション | 説明 | システムG<br>初期値 | <br>最大値 | クラウド<br>初期値 | <br>最大値 |
 | --- | --- | --- | --- | --- | --- |
 | p | プロセス数 | 1   |  [標準資源量](/run/resource#group)<br>(c=1の場合)    | 1  | 1   |
 | t | プロセスあたりのスレッド数 | 1   | 64(128)   | 1  | 36(72)  |
 | c | プロセスあたりのコア数  |  1   | 64   | 1  | 36  |
 | m | プロセスあたりのメモリ量<br>(単位:M, G)| 8000M  | 500G |14222M | 500G|
 | g | GPU数 | 1    | [標準資源量](/run/resource#group) | - | - |
452be89a
 
 * tの()内は、ハイパースレッディングを有効にする場合の最大値です。なお、ハイパースレッディングを有効にする場合は、t=c✕2 となるように指定してください。
 * mの値を指定しない場合は、プロセスあたりのメモリ量の初期値✕プロセスあたりのコア数が自動的に設定されます。
 * mの値を指定した場合、それに比例してコア数を要求したと見なされます。具体的には以下のとおりです。
   * システムBを使用するジョブで、p=1:t=4:c=4:m=9142M (初期値4571M x2)と指定した場合、cオプションが4コア、mオプションが2コアを要求します。この時より多くのコアを確保するオプションのコア数がcの値として採用されるため、1プロセスあたり4コアのジョブとなります。なお、1プロセスあたり4コアを使用するジョブとなりますが、メモリは指定した資源量(9142M)が最大値となります。
   * システムBを使用するジョブで、p=1:t=2:c=2:m=13713M (初期値4571M x3)と指定した場合、cオプションが2コア、mオプションが3コアを要求します。この場合は、cオプションで要求したコア数よりも、mオプションで要求されるコア数のほうが大きいため、1プロセスあたり3コアのジョブとなります。
 * システムGを利用する場合は、ptcmの各オプション または gオプションの何れかで資源を要求することができます。
  * ptcmの各オプションで資源を要求する場合は、16コアあたり1GPUが自動的に確保されます。
  * gオプションを用いてGPUを要求する場合は、以下のような挙動になります。
       * g=1とした場合は、1GPUの確保と同時に、p=1:c=16:m=128000M と同様のパラメータが自動的に設定されます。
       * g=2とした場合は、2GPUの確保と同時に、p=2:c=16:m=128000M と同様のパラメータが自動的に設定されます。1プロセスで2GPUを使用する場合は、ジョブスクリプトに記載するsrunコマンドに、-n 1 オプションを指定することで実現できます。(例: srun -n 1 ./a.out) 逆にプロセス数を増やしたい場合は、srun の -c オプションでプロセスあたりのコア数も併せて調整してください。(例: srun -n 9 -c 1 ./a.out)
 
 <!--
 | オプション | 説明 | SysA<br>初期値 |<br>最大値  | SysB<br>初期値 |<br>最大値 | SysC<br>初期値 |<br>最大値 | SysG<br>初期値 |<br>最大値 | クラウド<br>初期値 |<br>最大値 |
 | --- | --- | --- | --- |
 |            |      | 初期値 | 最大値 | 初期値 | 最大値 | 初期値 | 最大値 | 初期値 | 最大値 | 初期値 | 最大値 |
 | p | プロセス数 | 1 | [標準資源量](/run/resource#group) | 1 | [標準資源量](/run/resource#group) | 1 | [標準資源量](/run/resource#group) | 1 | [標準資源量](/run/resource#group) | 1 | 1 |
 | t | プロセスあたりのスレッド数 | 1 | 112 |  1 | 112 | 1 | 112 | 1 | 36 | 1 | 36 |
 | c | プロセスあたりのコア数 | 1 | 112 | 1 | 112 | 1 | 112 | 1 | 36 | 1 | 36 |
 | m | プロセスあたりのメモリ量<br>(単位:M, G) | 1G | 120G | 4G | 500G | 18G | 2030G | 7G | 500G | 13G | 500G|
 | g | プロセスあたりのGPU数 | - | - | - | - | - | - | なし | [標準資源量](/run/resource#group) | - | - |
 -->
 
 ## グループコースキューの計算資源{#group}
 
 
 グループコースキューは、グループコースを申し込み頂いた方のグループに個別に用意されるキューです。
 
 最小資源量、標準資源量、最大資源量は以下のように決められます。
 
 制限項目   |          設定値         
 :-------:|:---------------------:
  最小資源量 |   コースタイプと標準資源量から算出された値
  標準資源量 |        申請書に記載された値     
  最大資源量 |       標準資源量の1倍〜2倍の範囲で変動      
 
 <!--
 ## パーソナルコースキューの計算資源{#personal}
 
 
 パーソナルコースキュー(pa、pb、pc)は、パーソナルコースを申し込み頂いた方のみが利用できる専用のキューです。パーソナルコースのキューについては、最小資源量、標準資源量、最大資源量ではなく、ユーザ当たりの利用CPUコア数で割り当て資源を設定しています。
 
 
 キュー  | 1人のユーザが利用できるCPUコア数
 :----:|:------------------:
  pa |         272        
  pb |         144        
  pc |         72        
 -->
 
 
 ## 大規模ジョブコースキューの計算資源{#large}
 
 
 大規模ジョブコースキューは、大規模ジョブコースを申し込み頂いた方に個別に用意されるキューです。
 
 最小資源量、標準資源量、最大資源量は以下のように決められます。
 
 制限項目   |     設定値     
 :-------:|:------------:
  最小資源量 |   標準資源量と同じ値  
  標準資源量 |   申請書に記載された値 
  最大資源量 |   標準資源量と同じ値  
 
 ## リソースを確保するオプション (--rsc) の具体例 {#rscoption}
 
 ここでは、--rsc オプションの働きを、例示しながら説明します。
 なお、バッチジョブに限らず、tssrun で指定する --rsc オプションでも同様です。
 
 #### 前提
 
 ここではシステムBを想定しますが、他のシステムでも--rscオプションの法則は同様です。
 
 * システムBの1ノード当たりのスペック
   * CPU:112コア
   * メモリ:1コアあたり4096M (ノード全体では 500G)
   * ハイパースレッディング:1コアあたり2スレッドまで
 
 #### --rscオプションの各パラメータ
 
 * p : MPIプロセス数。デフォルト1
 * t : プロセスごとのOpenMPスレッド数。デフォルト1
 * c : プロセスごとのコア数。デフォルト1
 * m : プロセスごとのメモリ量。デフォルト4096M
 
 
 #### 例1:OpenMP 4スレッドの計算を実行
 
 ```nohighlight
 #SBATCH --rsc p=1:t=4:c=4:m=8G
 ```
 * CPUの物理コアに1スレッドずつ割り付けて実行します。
 * 使用できるメモリ量は8GBとなります。
 
 #### 例2:MPI 60並列の計算を実行
 
 ```nohighlight
 #SBATCH --rsc p=60:t=1:c=1
 ```
 * CPUの物理コアに1プロセスずつ割り付けて実行します。
 * プロセスあたりのメモリ量の指定がされていないため、各プロセスの利用できるメモリは4096M(初期値)となります。
 
 
 #### 例3:MPI 6並列かつ1プロセスあたりOpenMP 4スレッド、メモリ20Gを必要とするハイブリッド並列
 
 ```nohighlight
 #SBATCH --rsc p=6:t=4:c=4:m=20G
 ```
 * CPU4コアに1プロセスずつ割り付け、CPUの物理コアに1スレッドずつ割り付けて実行します。
 * ただし、計算資源の確保としては以下のような動きとなりますのでご注意ください。
  * 本センターでは、CPUコアにメモリを紐付ける形で管理をしており、システムBの場合は4096MB毎にCPU1コアを
 確保する必要があります。
  * この例では、プロセスあたりのメモリ量を20GB(m=20G)と指定しており、20,000M/4,096M=4.88 コア から、
 1プロセスあたり最低5コアを割り当てる必要があります。
  * ジョブスケジューラが確保するCPUコアは、--rscオプションで指定するCPUコア数と、メモリを確保するために
 必要となるCPUコア数の何れか大きい値が採用されます。
 この例の場合、メモリを確保するために必要なCPUコア数が、--rscオプションで指定するコア数を上回っており、
 1プロセスで使用するCPUコア数は5コアとして資源確保が行われます。
 なお、プロセスの割付は、--rscオプションで記載した、c=4,t=4の値を元に行われますので、残りの1コアは
 遊休資源となり、実際に使われることはありません。
 
 #### 例4:ハイパースレッディングを利用してOpenMP 224並列を実行する
 
 ```nohighlight
 #SBATCH --rsc p=1:t=224:c=112:m=500G
 ```
 * p=1,c=112により1ノードの112物理コアを確保し、t=224により1個の物理コアに2スレッドを起動します。
 * m=500Gにより、1ノードで利用できる全メモリ(500GB)を確保しています。
 * なお、mの値を指定しないと、利用できるメモリはデフォルトの4096MBになってしまいます。