test: Add test program for #1507, #1519

Change-Id: I04927e6dd1bfe1d0b210ec0b7e9d86c449e6daca
Refs: #1507
Refs: #1519
This commit is contained in:
Yoshihisa Morizumi
2021-02-25 00:07:34 +09:00
committed by Masamichi Takagi
parent b380f0790d
commit e6ec52dfbd
3 changed files with 185 additions and 0 deletions

View File

@ -0,0 +1,39 @@
【Issue#1507/#1519 動作確認】
□テスト内容
TCS (Technical Computing Suite) 環境で MPIとOpenMPを利用した
サンプルプログラムをマルチプロセス+マルチスレッドで実行して、
xpmemやshmobjを利用するライブラリの初期化および基本動作を確認する。
□実行手順
1.
SSMで以下のとおりサンプルプログラムをビルドする。
必要に応じて PATHを設定すること。
tradモード:
$ mpifccpx -Kopenmp -Nfjomplib -DMPI -DOPENMP mpi+affinity.c -o mpi+fjopenmp-affinity
LLVMモード:
$ mpifccpx -DMPI -DOPENMP -Kopenmp mpi+affinity.c -o mpi+llvmopenmp-affinity
2.
インタラクティブモードでジョブ実行を開始する。
SSMで以下のように pjsubコマンドを発行する。
rscunitやrscgrp、jobenvは環境に応じて指定すること。
$ pjsub --interact -L "rscunit=xxx,rscgrp=xxx,jobenv=xxx,node=1" --mpi "proc=2" --sparam wait-time=1000
3.
サンプルプログラムを2プロセス各24スレッド構成で実行する。
必要に応じて PATHや LD_LIBRARY_PATHを指定すること。
tradモード:
$ OMP_NUM_THREADS=24 mpirun -n 2 mcexec -n 2 ./mpi+fjopenmp-affinity
LLVMモード:
$ OMP_NUM_THREADS=24 mpirun -n 2 mcexec -n 2 ./mpi+llvmopenmp-affinity
□実行結果
result.txt を参照すること。
サンプルプログラムが異常終了していないことを確認する。

View File

@ -0,0 +1,98 @@
#define _GNU_SOURCE 1
#include <stdio.h>
#include <sched.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#ifdef OPENMP
#include <omp.h>
#include <sys/syscall.h>
#endif
#ifdef MPI
#include <mpi.h>
#endif
#define BUFFER_SIZE 4096
#define check_env(env) \
({ \
if (!getenv(env)) { \
fprintf(stderr, "error: environment variable %s doesn't exist?!\n", env); \
exit(1); \
} \
})
int
main(int argc, char *argv[])
{
int rank = 0;
int size = 0;
int ncore = 128;
char hname[BUFFER_SIZE];
int wait = 0;
if (argc > 1 && !strcmp("--wait", argv[1])) {
wait = 1;
}
#ifdef FJ_CHECK_ENV
{
check_env("PMIX_RANK");
check_env("OMPI_PLE_RANK_ON_NODE");
check_env("PLE_RANK_ON_NODE");
check_env("OMPI_MCA_orte_ess_vpid");
check_env("FLIB_RANK_ON_NODE");
}
#endif
gethostname(hname, BUFFER_SIZE);
#ifdef MPI
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
#endif
#ifdef OPENMP
#pragma omp parallel
#endif
{
int i;
int tid;
pid_t pid;
cpu_set_t cpuset;
char affinity[BUFFER_SIZE];
#ifdef OPENMP
tid = omp_get_thread_num();
pid = (pid_t)syscall(SYS_gettid);
#else
tid = 0;
pid = getpid();
#endif
CPU_ZERO(&cpuset);
if ((sched_getaffinity(pid, sizeof(cpu_set_t), &cpuset)) == 1) {
perror("Error sched_getaffinity");
exit(1);
}
affinity[0] = '\0';
for (i = 0; i < ncore; i++) {
if (CPU_ISSET(i, &cpuset) == 1) {
sprintf(affinity, "%s %d", affinity, i);
}
}
printf("hostname = %s, rank = %03d, PID: %4d, OMP tid = %d, TID = %d, CPU = %d, affinity =%s\n",
hname, rank, getpgid(0), tid, pid, sched_getcpu(), affinity);
if (rank == 0 && tid == 0 && wait == 1) {
printf("Now press ENTER.\n");
getchar();
}
}
#ifdef MPI
MPI_Barrier(MPI_COMM_WORLD);
MPI_Finalize();
#endif
return 0;
}

View File

@ -0,0 +1,48 @@
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 1, TID = 107, CPU = 25, affinity = 25
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 0, TID = 53, CPU = 24, affinity = 24
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 20, TID = 73, CPU = 44, affinity = 44
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 4, TID = 101, CPU = 28, affinity = 28
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 8, TID = 94, CPU = 32, affinity = 32
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 16, TID = 80, CPU = 40, affinity = 40
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 22, TID = 70, CPU = 46, affinity = 46
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 10, TID = 91, CPU = 34, affinity = 34
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 9, TID = 92, CPU = 33, affinity = 33
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 5, TID = 99, CPU = 29, affinity = 29
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 12, TID = 87, CPU = 36, affinity = 36
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 18, TID = 77, CPU = 42, affinity = 42
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 2, TID = 105, CPU = 26, affinity = 26
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 7, TID = 96, CPU = 31, affinity = 31
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 14, TID = 84, CPU = 38, affinity = 38
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 11, TID = 89, CPU = 35, affinity = 35
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 3, TID = 103, CPU = 27, affinity = 27
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 6, TID = 98, CPU = 30, affinity = 30
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 13, TID = 86, CPU = 37, affinity = 37
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 17, TID = 79, CPU = 41, affinity = 41
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 23, TID = 68, CPU = 47, affinity = 47
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 19, TID = 75, CPU = 43, affinity = 43
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 15, TID = 82, CPU = 39, affinity = 39
hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 21, TID = 71, CPU = 45, affinity = 45
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 4, TID = 112, CPU = 4, affinity = 4
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 17, TID = 83, CPU = 17, affinity = 17
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 13, TID = 93, CPU = 13, affinity = 13
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 12, TID = 95, CPU = 12, affinity = 12
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 18, TID = 81, CPU = 18, affinity = 18
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 8, TID = 104, CPU = 8, affinity = 8
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 11, TID = 97, CPU = 11, affinity = 11
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 14, TID = 90, CPU = 14, affinity = 14
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 5, TID = 111, CPU = 5, affinity = 5
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 1, TID = 115, CPU = 1, affinity = 1
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 19, TID = 78, CPU = 19, affinity = 19
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 16, TID = 85, CPU = 16, affinity = 16
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 15, TID = 88, CPU = 15, affinity = 15
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 6, TID = 108, CPU = 6, affinity = 6
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 20, TID = 76, CPU = 20, affinity = 20
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 10, TID = 100, CPU = 10, affinity = 10
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 21, TID = 74, CPU = 21, affinity = 21
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 0, TID = 52, CPU = 0, affinity = 0
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 22, TID = 72, CPU = 22, affinity = 22
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 3, TID = 113, CPU = 3, affinity = 3
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 7, TID = 106, CPU = 7, affinity = 7
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 2, TID = 114, CPU = 2, affinity = 2
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 9, TID = 102, CPU = 9, affinity = 9
hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 23, TID = 69, CPU = 23, affinity = 23