- 行列サイズは960とコード中で固定されている
- Pythonのプログラムは、実行可能なスクリプトとなっている
% ./mm.py
あるいは、pythonのバージョン3系のコードなので、そのインタープリタを明示的に呼び出して% python3 mm.py
にて実行できます。- Pythonのプログラムの実行には数分かかるので注意すること
- Makefile で標準的な環境でコンパイルできるようになっている
- 行列サイズと反復数(試行数)を引数とする
- #ifdefにより、どのような最適化をしたコードを実行するかを決定する
- ソースコードの先頭付近にある#define文のコメントを外すと最適化を適用したものを計測できる
- check_mat()で、計算が最適化をしていない関数で計算したものと一致するかをチェック
- コンピュータでの浮動小数点計算は誤差がある。最適化では計算順序を入れ替えている。
- その誤差がmax_errorで指定するものより小さいかを判定。それ以上であれば、エラーメッセージが出力される。
- この機能を使う場合、dgemm_unopt (A, B, C_unopt, N);を実行しておく必要がある
学内ネットワーク環境からは以下のようにsshで学内のアカウント(無線LANを使うときのIDとPW)で利用できます。学外からは、VPNで繋いでからsshすると利用できます。
ssh xdev.edu.tut.ac.jp
- ログイン後、git cloneのコマンドにて課題のサンプルプログラムをコピーし、以下をコマンドを実行し、計算サーバーに移動して、プログラムを実行すること。
qsub -I -q wEduq -l select=1:ncpus=4 -v SINGULARITY_IMAGE=prg-env:latest
- qsubコマンド実行後、Singularityが起動し、コマンドプロンプトが返ってきたら、
make; make run
で実験できます。qsub –I –l select…
が紛らわしいのですが、最初が大文字のiで、セレクトの前が小文字のLです。- qsubとは計算機のリソースを管理して共有して使えるようにしているツールなので、リソースがその時に使えるものがないと待ち時間が発生します。
- そのままの状態で待っていると、リソースが使えるようになったタイミングでコマンドプロンプトが戻ってきます。
- qsub -I のオプションはインタラクティブで使うということで、コマンドプロンプトから直接利用するモードです。
- 一方で、実行するコマンドが決まっている場合は以下の要領でバッチ処理をするとよい。
- qsubで実行するコマンドをスクリプトとして用意し、qsub実行時にスクリプトを読み込み、空きがある段階で実行されて結果をファイルで書き戻す。
- スレッド数の指定は、
export OMP_NUM_THREADS=4; make run
あるいはmake run -e OMP_NUM_THREADS=4
- IMCのxdevから利用する計算サーバーは、教育向け用途では4コアまでの利用に限定されている。デフォルトでOMP_NUM_THREADS=4が設定されるようだ。
- コンパイラとして、Intel Compiler (icc)が使えるようになります。
- CPUなどの情報は
% lscpu
とすると、OSが認識しているCPUの情報などが表示されます。OSは% less /etc/redhat-release
にて表示されます。- xdevで実行したqsubで割り当てられたサーバー章で動いているコンテナに関する情報が表示される。
** 2025年6月から稼働したAMD社のCPUを搭載したクラスタでの実行方法
ssh ydev.edu.tut.ac.jp
- ログイン後、git cloneのコマンドにて課題のサンプルプログラムをコピーし、以下をコマンドを実行し、計算サーバーに移動して、プログラムを実行すること。
qsub -I -q Eduq -l select=1:ncpus=4 /bin/bash
. /etc/profile
module load intel/2025
- コンパイラはgccを使う場合のみ動作を確認しております。Intel Compilerは、CC=icxとなりますが、うまく動かないようです。
- qsubコマンド実行後、Singularityが起動し、コマンドプロンプトが返ってきたら、
make; make run
で実験できます。 - スレッド数の指定は、
export OMP_NUM_THREADS=4; make run
あるいはmake run -e OMP_NUM_THREADS=4
- 詳しくはIMC HPCクラスタのwikiにある情報を参照ください。