roo.cc.uec.ac.jp
, chip.cc.uec.ac.jp
, dale.cc.uec.ac.jp
でのみ利用可能です.
MATLAB
Modulesで matlab
がロードされていることを確認してください.ロードされていなければロードしてください.
matlab
コマンドで MATLAB が起動します.
user@roo[~]% matlab < M A T L A B (R) > Copyright 1984-2013 The MathWorks, Inc. R2013b (8.2.0.701) 64-bit (glnxa64) August 13, 2013 >>
使い方の詳細は,以下をご覧ください.
関連リンク 学外ページ
Maple
Modulesで maple
がロードされていることを確認してください.ロードされていなければロードしてください.
maple
コマンドで Maple が起動します.GUI を利用する場合は,xmaple
コマンドを使ってください.
user@roo[~]% maple |\^/| Maple 17 (X86 64 LINUX) ._|\| |/|_. Copyright (c) Maplesoft, a division of Waterloo Maple Inc. 2013 \ MAPLE / All rights reserved. Maple is a trademark of <____ ____> Waterloo Maple Inc. | Type ? for help. >
AVS/Express 研究系のみ
Modulesで avs-express
がロードされていることを確認してください.ロードされていなければロードしてください.
vxp
コマンドで AVS/Express が起動します.
user@roo[~]% vxp
ssh
コマンドに -X
オプションを指定して X Window 有効にしてください.
Gnuplot
Modulesで gnuplot
がロードされていることを確認してください.ロードされていなければロードしてください.
gnuplot
コマンドで AVS/Express が起動します.
user@roo[~]% gnuplot G N U P L O T Version 4.6 patchlevel 4 last modified 2013-10-06 Build System: Linux x86_64 Copyright (C) 1986-1993, 1998, 2004, 2007-2013 Thomas Williams, Colin Kelley and many others gnuplot home: http://www.gnuplot.info faq, bugs, etc: type "help FAQ" immediate help: type "help" (plot window: hit 'h') Terminal type set to 'x11' gnuplot>
Gaussian09/Gauss View 研究系のみ
Modulesで gaussian
がロードされていることを確認してください.ロードされていなければロードしてください.
gview
コマンドで Gauss View が起動します.
user@roo[~]% gview
ターミナル内で Gaussian を起動する場合は,g09
コマンドを使ってください.
user@roo[~]% g09 Entering Gaussian System, Link 0=g09
GCC
Modulesで gcc
がロードされていることを確認してください.ロードされていなければロードしてください.
gcc
コマンドで GCC が起動します.
user@roo[~]% gcc -v ・・・(略)・・・ gcc バージョン 4.8.2 (GCC)
Modules によって,環境変数 LD_LIBRARY_PATH
も自動でセットされます.
% echo $LD_LIBRARY_PATH /opt2/gcc/4.8.2/lib64
関連リンク 学外ページ
Intel コンパイラ
Modulesで icc
がロードされていることを確認してください.ロードされていなければロードしてください.
icc
コマンドで Intel コンパイラが起動します.
user@roo[~]% icc -v icc version 14.0.0 (gcc version 4.4.7 compatibility)
Intel コンパイラは Intel Cluster Studio に含まれるコンパイラです.Intel Cluster Studio には,MKL などのライブラリが含まれており,Modules で icc
をロードすることで,これらを使うための環境変数も設定されます.設定された環境変数の内容を確認するためには,以下のコマンドを実行してください.
% env | grep "intel"
関連リンク 学外ページ
PGI コンパイラ 研究系のみ
PGI コンパイラは PGI SDK の一部です.PGI SDK には様々な機能がありますが,ここでは,OpenACC による GPU を使った自動並列化を例にして利用方法を紹介します.
Modulesで pgi
と gcc
がロードされていることを確認してください.ロードされていなければロードしてください.
pgi
は GCC 4.6 と依存関係があります.必ずpgi
をロードする前に,gcc/4.6.4
などをロードしておいてください.
下記のサンプルコードをvecadd.c
という名前で保存してください.
#include <stdio.h> #include <stdlib.h> void vecadd( float *restrict c, float *a, float *b, int n ){ #pragma acc kernels loop copyin(a[0:n],b[0:n]) copyout(c[0:n]) { int i; for( i = 0; i < n; ++i ) c[i] = a[i] + b[i]; } } int main( int argc, char* argv[] ){ int n = 100; /* length */ float * a; /* c = a + b */ float * b; float * c; int i; a = (float*)malloc( n*sizeof(float) ); b = (float*)malloc( n*sizeof(float) ); c = (float*)malloc( n*sizeof(float) ); for( i = 0; i < n; ++i ){ a[i] = (float)(i+1); b[i] = (float)(1000*i); } vecadd( c, a, b, n ); for( i = 0; i < n; ++i ){ printf("c[%d]:%f\n", i, c[i]); } return 0; }
下記のように,pgcc
コマンドでコンパイルします.
pgcc -acc -Mcuda=cuda5.5,kepler -Minfo=accel -o vecadd vecadd.c vecadd: 5, Generating copyin(a[0:n]) Generating copyin(b[0:n]) Generating copyout(c[0:n]) Generating NVIDIA code 8, Loop is parallelizable Accelerator kernel generated 8, #pragma acc loop gang, vector(128) /* blockIdx.x threadIdx.x */
-Minfo=accel
オプションを指定することで,どのような自動並列化が行われたかがレポートされます.
srun
コマンドを用いて,先ほど生成されたバイナリをバッチジョブシステム経由で chip または dale 上で実行します(sbatch
コマンドも利用可能です).-p back_trial
オプション指定し,実行パーテションに back_tiral
を指定することで,chip または dale で実行されます(処理量が大きい場合は,back_trial
ではなく,back
を指定してください).
srun -p back_trial vecadd
関連リンク 学外ページ
CUDA 研究系のみ
Modulesで cuda
がロードされていることを確認してください.ロードされていなければロードしてください.
CUDA のコンパイラは nvcc
で起動します.
user@roo[~]% nvcc --version nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2013 NVIDIA Corporation Built on Wed_Jul_17_18:36:13_PDT_2013 Cuda compilation tools, release 5.5, V5.5.0
LD_LIBRARY_PATH
等,ライブラリの設定等も Modules によって自動的に行われます.
関連リンク 学外ページ
JDK (Java Development Kit)
Modulesで jdk
がロードされていることを確認してください.ロードされていなければロードしてください.
JDK は Java の開発環境で,コンパイラは javac
,インタプリタは java
で起動します.
user@roo[~]% javac -version javac 1.7.0_51 user@roo[~]% java -version java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
Intel MPI 研究系のみ
Modulesで mpi/icc-xx
(xx
はバージョン番号)がロードされていることを確認してください.ロードされていなければロードしてください.
ここでは以下のサンプルプログラム mpisample.c
を使います.
#include <stdio.h> #include <mpi.h> int main (int argc, char *argv[]){ int rank, size; MPI_Init (&argc, &argv); MPI_Comm_rank (MPI_COMM_WORLD, &rank); MPI_Comm_size (MPI_COMM_WORLD, &size); printf( "Hello world from process %d of %d\n", rank, size ); MPI_Finalize(); return 0; }
MPI プログラムのコンパイルは mpiicc
コマンドで以下のように行います.オプションの詳細は mpiicc --help
で確認してください.
user@roo[~]% mpiicc -o mpisample mpisample.c
コンパイルした MPI プログラムの実行はバッチジョブ・システム経由で行います.以下は srun
コマンドを用いた例です.
user@roo[~]% srun -n 2 ./mpisample Hello world from process 1 of 2 Hello world from process 0 of 2
バッチジョブとして実行する場合は,まず,以下のような内容でスクリプトを作成してください.ここではファイル名を batch.sh
とします.
#!/bin/sh #SBATCH -p back_trial #SBATCH -n 4 #SBATCH -t 00:00:10 srun ./mpisample
次に,sbatch
コマンドで提出してください.
% sbatch batch.sh Submitted batch job 3446
上の例では,ジョブ番号は 3446 なので,実行結果は slurm-3446.out
に出力されます.
MPICH 研究系のみ
Modulesで mpi/mpich-icc-xx
(xx
はバージョン番号)がロードされていることを確認してください.ロードされていなければロードしてください.
ここでは以下のサンプルプログラム mpisample.c
を使います.
#include <stdio.h> #include <mpi.h> int main (int argc, char *argv[]){ int rank, size; MPI_Init (&argc, &argv); MPI_Comm_rank (MPI_COMM_WORLD, &rank); MPI_Comm_size (MPI_COMM_WORLD, &size); printf( "Hello world from process %d of %d\n", rank, size ); MPI_Finalize(); return 0; }
MPI プログラムのコンパイルは mpicc
コマンドで以下のように行います.オプションの詳細は mpicc --help
で確認してください.
user@roo[~]% mpicc -o mpisample mpisample.c
コンパイルした MPI プログラムの実行はバッチジョブ・システム経由で行います.以下は srun
コマンドを用いた例です.
user@roo[~]% srun -n 2 ./mpisample Hello world from process 1 of 2 Hello world from process 0 of 2
バッチジョブとして実行する場合は,まず,以下のような内容でスクリプトを作成してください.ここではファイル名を batch.sh
とします.
#!/bin/sh #SBATCH -p back_trial #SBATCH -n 4 #SBATCH -t 00:00:10 srun ./mpisample
次に,sbatch
コマンドで提出してください.
% sbatch batch.sh Submitted batch job 3446
上の例では,ジョブ番号は 3446 なので,実行結果は slurm-3446.out
に出力されます.
mpiP 研究系のみ
mpiP は MPI プログラム用のプロファイラです.MPI プログラム中で,通信(MPI 関数の実行)に要した時間を分析し,プログラムをチューニングする時に便利です.
mpiP はIntel MPIもしくはMPICHと一緒に使います.ここではIntel MPI 使用時の使い方を例として示します.
まず,Modulesで mpi/impi-xx
と mpip/xx
(xx
はバージョン番号)がロードされていることを確認してください.ロードされていなければロードしてください.
ここでは以下のサンプルプログラム bcastsample.c
を使います.このプログラムは 1 回の Broadcast 通信(あるプロセスが持っている値を,他のすべてのプロセスに配る)を行います.
#include <stdio.h> #include <mpi.h> int main (int argc, char *argv[]) { int rank, size; int buf=1; MPI_Init (&argc, &argv); /* starts MPI */ MPI_Comm_rank (MPI_COMM_WORLD, &rank); /* get current process id */ MPI_Comm_size (MPI_COMM_WORLD, &size); /* get number of processes */ if(rank == 0) buf = 9; printf( "Process %d : buf = %d\n", rank, buf ); MPI_Bcast(&buf, 1, MPI_INT, 0, MPI_COMM_WORLD); if(rank == 0) printf( "Bcast done\n" ); printf( "Process %d : buf = %d\n", rank, buf ); MPI_Finalize(); return 0; }
mpiP は MPI 関数をフックし,その実行にかかった時間を測定します.コンパイル時に mpiP のライブラリを使用するように -lmpiP
オプションを指定します.mpiP は他のいくつかのライブラリを利用していますので,-lm -lunwind
もあわせて指定します.最終的なコマンドラインは以下になります.
user@roo[~]% mpiicc -o bcastsample -lmpiP -lm -lunwind bcastsample.c
コンパイルした mpiP 付き MPI プログラムの実行は通常通り バッチジョブ・システム経由で行います.以下は srun
コマンドを用いた例です.
user@roo[~]% srun -n 2 bcastsample mpiP: mpiP: mpiP V3.4.0 (Build Feb 16 2014/10:16:08) mpiP: Direct questions and errors to mpip-help@lists.sourceforge.net mpiP: Process 0 : buf = 9 Process 1 : buf = 1 Bcast done Process 0 : buf = 9 Process 1 : buf = 9 mpiP: mpiP: Storing mpiP output in [./bcastsample.2.19887.1.mpiP]. mpiP:
sbatch
コマンドでバッチジョブスクリプトを提出する場合も通常通りです.
メッセージにあるように,./bcastsample.2.19887.1.mpiP
に分析結果が出力されているので内容を確認してください.
・・・省略・・・ --------------------------------------------------------------------------- @--- MPI Time (seconds) --------------------------------------------------- --------------------------------------------------------------------------- Task AppTime MPITime MPI% 0 0.000321 0.000262 81.62 1 0.000373 0.000322 86.33 * 0.000694 0.000584 84.15 ・・・省略・・・ --------------------------------------------------------------------------- @--- Callsite Time statistics (all, milliseconds): 2 ---------------------- --------------------------------------------------------------------------- Name Site Rank Count Max Mean Min App% MPI% Bcast 1 0 1 0.262 0.262 0.262 81.62 100.00 Bcast 1 1 1 0.322 0.322 0.322 86.33 100.00 Bcast 1 * 2 0.322 0.292 0.262 84.15 100.00 ・・・省略・・・
結果を見ると,この例では 1 回の Broadcast (Bcast) の実行がプログラム全体の実行時間の80%以上を占めていることがわかります.
IMSL C/C++ Fortran 研究系のみ
IMSL (International Mathematics and Statistics Library) 数値計算や統計解析などの関数を提供するライブラリです.情報基盤センターの研究支援システムでは,C/C++,Fortran 用の IMSL が利用できます.ここでは roo にインストールされているサンプルプログラムをコンパイルする方法を解説します.
C/C++ の場合
C/C++ 版 IMSL は Intel コンパイラと Intel MKL に依存しています.Modules で imsl/cnl-icc-xxx
, icc/xxx
, mkl/xxx
(xx
はバージョン番号)がロードされていることを確認してください.ロードされていなければロードしてください.
以下のように,サンプルプログラムをホームディレクトリ以下の適当な場所にコピーしてください.
user@roo[~]% cp /opt2/vni/imsl/cnl801/lnxin121avx/examples/validate/cmath.c .
サンプルプログラムを以下のようにコンパイルしてください.IMSL は予め設定された環境変数を利用することで,必要なライブラリをリンクできます.
user@roo[~]% $CC $CFLAGS -o cmath cmath.c $LINK_CNL
正常に動作すると以下のような結果が得られます.
user@roo[~]% ./cmath Library version: IMSL C/Math/Library Version 8.0.1 Customer number: 999999 Solution, x of Ax = b 1 2 3 -2 -2 3 The next call will generate an error *** TERMINAL Error from imsl_f_lin_sol_gen. The order of the matrix must be *** positive while "n" = -10 is given.
Fortran の場合
Fortran 版 IMSL は Intel コンパイラに依存しています.Modules で imsl/fnl-icc-xxx
, icc/xxx
(xx
はバージョン番号)がロードされていることを確認してください.ロードされていなければロードしてください.
以下のように,サンプルプログラムをホームディレクトリ以下の適当な場所にコピーしてください.
user@roo[~]% cp /opt2/vni/imsl/fnl701/lnxin121e64/examples/validate/imslmp.f90 .
サンプルプログラムを以下のようにコンパイルしてください.IMSL は予め設定された環境変数を利用することで,必要なライブラリをリンクできます.
user@roo[~]% $FC $F90FLAGS -o imslmpi imslmpi.f90 $LINK_FNL user@roo[~]% ./imslmpi
詳細は,関連リンクをご覧ください.
関連リンク 学外ページ
Intel MKL 研究系のみ
Intel MKL (Math Kernel Library) は,線形代数,FFT,統計,データ・フィッテングなどの関数を提供するライブラリです. ここではチュートリアルのサンプルをコンパイルする方法を解説します.
チュートリアルに示されているプログラムdgemm_example.c
を作成してください.
Modulesで mkl/xxx
と icc/xxx
(xx
はバージョン番号)がロードされていることを確認してください.ロードされていなければロードしてください.
TBB を利用するプログラムのコンパイルには,下記のように,-mkl
オプション(-lmkl
ではありません)の指定が必要です.
user@roo[~]% icc -mkl -o dgemm_example dgemm_example.c user@roo[~] ./dgemm_example
詳細は,関連リンクをご覧ください.
関連リンク 学外ページ
Intel IPP 研究系のみ
Intel IPP (Integrated Performance Primitives) は,信号処理,画像処理,行列計算などで利用される基本的な演算を,Intel CPU 上で高速に実行するために最適化された関数群を提供するライブラリです.情報基盤センターのサーバも,Intel Xeon プロセッサを搭載しているため,IPP を使うことにより,より高いパフォーマンスを実現できる可能性があります.ここでは,GCC コンパイラで IPP を使ったプログラムをコンパイル・実行する例を紹介します.(Intel コンパイラでも利用可能です.)
まず,Modulesで ipp/xxx
と gcc/xxx
(xx
はバージョン番号)がロードされていることを確認してください.ロードされていなければロードしてください.
ここでは以下のプログラム ippVecSum.c
を例にします.このプログラムは配列に含まれる全要素の合計を計算するプログラムです.
#include <stdio.h> #include <ipp.h> int main(int argc, char* argv[]) { const int SIZE = 1024; Ipp64f *pSrc; Ipp64f pSum; pSrc = (Ipp64f *)ippMalloc(sizeof(Ipp64f) * SIZE); int i; for (i=0; i<SIZE; i++) pSrc[i] = (Ipp64f)i; ippsSum_64f(pSrc, SIZE, &pSum); printf("pSum = %f\n", pSum); ippFree(pSrc); return 0; }
プログラムで使われている IPP の関数(ippMalloc(), ippSum_64f(), ippFree() )をリンクするためには,コンパイル時に -lipps
オプションを指定します.コンパイル後に実行すると,以下の結果が得られます.
user@roo[~]% gcc -lipps -o ippVecSum ippVecSum.c user@roo[~] ./ippVecSum pSum = 523776.000000
詳細は,関連リンクをご覧ください.
関連リンク 学外ページ
Intel TBB 研究系のみ
Intel TBB (Threading Building Blocks) は,C++ スレッド・プログラミング用のテンプレート・ライブラリです. ここではチュートリアルのサンプルをコンパイルする方法を解説します.
チュートリアルにしたがって,プログラムを作成し,subString.cpp
という名前で保存してください.
Modulesで tbb/xxx
と gcc/xxx
(xx
はバージョン番号)がロードされていることを確認してください.ロードされていなければロードしてください.(Intel コンパイラを使うときは,gcc/xxx
の代わりに,icc/xxx
をロードしてください.)
TBB を利用するプログラムのコンパイルには,下記のように,-ltbb
オプションの指定が必要です.(Intel コンパイラを使うときは,g++
の代わりに,icpc
を使って下さい.)
user@roo[~]% g++ -ltbb -o subString subString.cpp user@roo[~] ./subString
詳細は,関連リンクをご覧ください.