4 core x 4 で 16並列まで可能.(実際にはSMTを有効にすれば, 2 thread x 4 core x 4 となり,32となるが,その設定は採用せず)
. /home/isle2010/sparc/parvars.shとして環境変数をセットする. bash に読み込むのにはこのようにドット(.)を使う. (先に /home/isle2010/sparc/parvars.sh の内容を確かめてください.) なお,シェルは bash だと仮定しています. 必要なら,bash コマンドにより,bash シェルを起動してください.
xpu -2
などとする.
使用するには ssh において X を転送する必要がある.(ssh -X
)
sched_setaffinity
により
スレッドをどのプロセッサ(コア)で実行すべきか指定可能であった.
一方,計算サーバの OS は Solaris であり,
processor_bind(P_LWPID, P_MYID, p, 0)
とすることで自スレッドを番号p
のコアに割り当て可能.
ただし,すべての番号が有効ではないので,
p_online(p, P_STATUS) == P_ONLINE
と
なるもののみを選んで自スレッドをコアに束縛する.例えば,
以下のようにすればよい.
#include <unistd.h> #include <sys/processor.h> #include <sys/types.h> int systhr_bind_to_proc(int pe){ processorid_t p; if(pe >= sysconf(_SC_NPROCESSORS_ONLN)) return -1; for(p = 0 ; p < 65536 ; p++) if(p_online(p, P_STATUS) == P_ONLINE && pe-- == 0 ) break; return processor_bind(P_LWPID, P_MYID, p, 0); }ここで,
sysconf(_SC_NPROCESSORS_ONLN)
は
利用可能なプロセッサ数(コア数)を返すが,上で述べたSMTの
場合の32を返すため,この例のままでは processor_bind に渡す p が無効に
なることがある.
-O2 -mcpu=ultrasparc
などで用いる.
最適化オプション(-O2等)を指定しないといけない点などはLinuxと同様である.
-Kparallel
)や,
OpenMP(-KOMP
)のためのオプションがある.
(注: 自動並列化したコードの性能は採点の対象としない.
試すのは構わない)